Skip to content
This repository has been archived by the owner on Jul 6, 2024. It is now read-only.

Latest commit

 

History

History
224 lines (199 loc) · 7.75 KB

syntax.md

File metadata and controls

224 lines (199 loc) · 7.75 KB

VSML

XMLの記法

記法はHTMLをベースとしたXMLの一種となっています。
以下の vid のように、単一のタグとして記述したり、 txt のように開始タグ、終了タグをわけて記述したりします。vidsrc のようなタグの追加情報を記述する書き方をアトリビュートと言います。
また、 cont のように、開始タグと終了タグで記述した場合、間に別の要素やテキストを記述できます。その際、間に記述するテキストはインデント上げすることを推奨します。

<cont>
  <vid src="" />
  <txt></txt>
</cont>

全体

<?xml version="1.0" encoding="UTF-8"?>
<vsml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://vsml.pigeons.house/config/vsml.xsd">
...
</vsml>

基本的に上記のタグの間( ... の箇所)に動画の情報を書いていきます。上記の詳細な意味は理解しなくても問題ありません。
vsml タグの中には、 meta, cont のタグを含めることが出来ます。 meta タグの挿入は任意ですが、 cont タグは必ず含めるようにしてください。( meta タグがあれば meta タグの下の位置に)

↓ これは contmeta が逆で動かない例

<vsml>
  <cont>
  </cont>
  <meta>
  </meta>
</vsml>

スタイル指定

meta タグの中には、 style タグを含めることが出来ます。 style タグで挟まれた範囲にVSSの記法で動画のスタイルを指定できます。VSSの記法は下で記述するので省略します。

<style>
  aud {
    audio-volume: 300%;
  }
</style>

また、 style タグは以下のように src アトリビュートでVSSファイルのパスを指定できます。VSMLファイルからの相対パス、もしくは絶対パスで指定できます。

<style src="./" />

動画の要素

cont タグには、resolution, fps の2つのアトリビュートが必須です。
resolution には {width}x{height} と、幅の数値, 'x'(小文字のX), 高さの数値を並べた文字列を指定します。fps には指定したいfpsの整数値を文字列にして指定します。
記述の仕方は以下の通りです。以下は幅1920px、高さ1080px、60fpsの動画を作成する際の記述例です。

<cont resolution="1920x1080" fps="60">
</cont>

cont タグの中には、以下のタグを含めることが出来ます。

source系

タグ名 名前の意味 説明
vid video 映像を表示します。 src アトリビュートで動画ファイルを相対パス、絶対パスで指定できます。デフォルトの時間長は映像ファイルの再生時間と同じになります。
aud audio 音声を表示します。 src アトリビュートで動画ファイルを相対パス、絶対パスで指定できます。デフォルトの時間長は音声ファイルの再生時間と同じになります。
img image 画像を表示します。 src アトリビュートで動画ファイルを相対パス、絶対パスで指定できます。デフォルトの時間長は無限になります。
txt text タグで挟まれた範囲に書いたテキストを字幕として表示します。改行する場合は br タグが使用できます。デフォルトの時間長は無限になります。

wrap系

タグ名 名前の意味 説明
seq sequence-wrap 子要素に持つsource系、wrap系の要素を順番に再生します。子要素は左上揃えで再生されます。デフォルトの時間長は子要素の時間的長さの総和になります。
prl parallel-wrap 子要素に持つsource系、wrap系の要素を並列に再生します。子要素は左上揃えで重ねて再生されます。デフォルトの時間長は、時間長が無限の子要素を除く,子要素の時間長の最大値になります。子要素の時間長が全て無限である場合は無限になります。
rect rectangle seqの仕様をベースに、 color アトリビュートで背景色を指定できます。
layer single-layer prlの仕様をベースに、子要素は、上揃えで右向きに並べて再生されます。

また、 cont タグは、 seq タグと同じく、子要素を順番に再生します。

cont 以下のタグ(当然 cont も含む)は全て、 id, class, style というアトリビュートを持てます。 id, class は、後述のVSSでスタイルを当てる対象として名前をつけることが出来ます。 (id に付ける名前と同一の名前の id は、VSMLファイル内で登場してはいけないのですが、現状の仕様として、制限をかけていないため、この2つのアトリビュートは同じ挙動を取ります。) style は、アトリビュートの値にスタイルのプロパティと値を指定すると、そのタグ単体にそのスタイルが当てられます。

サンプル

txt

<vsml>
  <meta>
    <style>
      txt {
        font-family: "Meiryo";
        font-size: 50px;
        background-color: red;
      }
    </style>
  </meta>
  <cont resolution="1920x1080" fps="30">
    <txt style="object-length: 1s;">1つ目の文章</txt>
  </cont>
</vsml>

txt.mp4

txt.mp4

img

<vsml>
  <cont>
    <img style="object-length: 1s;" src="キリン.png" />
  </cont>
</vsml>

img.mp4

img.mp4

aud

<vsml>
  <cont>
    <aud src="ピロッ.mp3" />
  </cont>
</vsml>

aud.mp4

aud.mp4

seq

<vsml>
  <meta>
    <style>
      txt {
        font-family: "Meiryo";
        font-size: 50px;
        background-color: red;
      }
    </style>
  </meta>
  <cont>
    <seq>
      <aud src="ピロッ.mp3" />
      <txt style="object-length: 1s;">1つ目の文章</txt>
      <img style="object-length: 1s;" src="キリン.png" />
    </seq>
  </cont>
</vsml>

seq.mp4

seq2.mp4

prl

<vsml>
  <meta>
    <style>
      txt {
        font-family: "Meiryo";
        font-size: 50px;
        background-color: red;
      }
    </style>
  </meta>
  <cont>
    <prl>
      <txt style="object-length: 1s;">1つ目の文章</txt>
      <img style="object-length: 1s;" src="キリン.png" />
    </prl>
  </cont>
</vsml>

prl.mp4

prl.mp4
<vsml>
  <meta>
    <style>
      txt {
        font-family: "Meiryo";
        font-size: 50px;
        background-color: red;
      }
    </style>
  </meta>
  <cont>
    <prl>
      <aud src="ピロッ.mp3" />
      <txt>1つ目の文章</txt>
      <img src="キリン.png" />
    </prl>
  </cont>
</vsml>

prl2.mp4

prl2.mp4

layer

<vsml>
  <meta>
    <style>
      txt {
        font-family: "Meiryo";
        font-size: 50px;
        background-color: red;
      }
    </style>
  </meta>
  <cont>
    <layer>
      <txt style="object-length: 1s;">1つ目の文章</txt>
      <img style="object-length: 1s;" src="キリン.png" />
    </layer>
  </cont>
</vsml>

layer.mp4

layer.mp4