VSML ファイルは、以下のように記述します。
<vsml>
<meta>
<style src="hoge.vss" />
</meta>
<cont resolution="1920x1080" fps="30">
<prl>
<img src="yellow.jpg" />
<layer>
<txt class="styled">これは文章です</txt>
<txt class="styled">これもまた文章です</txt>
</layer>
</prl>
</cont>
</vsml>
vsml
タグで全体を囲み、その子要素に meta
タグと cont
タグを 1 つずつ持ちます。
このタグドキュメントでは cont
以下に記述するタグについて説明していきます。
それぞれのタグで示される要素は、
content
系wrap
系大きくこの 2 種類に分けられます。
content
系content
系は基本的に子要素に他のタグを持たず、動画内の素材単体のオブジェクトを示します。content
系においては、duration
というプロパティについて理解する必要があります。
映像や音声の content
は直感的でわかりやすく、その映像や音声のソースの有限な時間長がその content
の duration
になります。10 秒の動画であれば、その content
の duration
は 10s
ということです。
では、字幕や画像など、ソースに時間長が存在しないものはどうでしょうか。この場合、duration
は無限の時間長となります。これは、後述の wrap
系の仕様と合わせることで、真価を発揮します。
wrap
系wrap
系は、子要素に content
系、または wrap
系を持ち、子オブジェクトとそのタグ自身をまとめて大きな一つのオブジェクトを示します。wrap
系においては、duration
の他に、order
というプロパティについて理解する必要があります。order
というプロパティは、sequence
、parallel
のいづれかの値を取ります。
sequence
の場合、子オブジェクトは上から順番に再生するように連ねてオブジェクトとします。この場合、duration
の値は、子オブジェクトの総和となります。この際、子要素に無限長のオブジェクトがあった場合、そのオブジェクトより後ろのオブジェクトは再生されることはなく、その sequence
の値を持つ wrap
オブジェクトも時間長は無限となります。
parallel
の場合、子オブジェクトの再生開始位置を揃えて同時に再生するように並べてオブジェクトとします。この場合、duration
の値は、子オブジェクトのうち、有限な時間長の最大値となります。もし order
が parallel
な wrap
オブジェクトの子オブジェクトが、10 秒の映像、5 秒の音声、字幕の場合、wrap
オブジェクトは 10 秒となります。この際、子要素がすべて無限の時間長の場合、wrap
オブジェクトも無限の時間長となります。
VSML の真価の一つは上記の通り、order
が parallel
なオブジェクトの子に duration
が無限のオブジェクトをもたせると、その子オブジェクトは親オブジェクトの長さにフィットするのです。そのため、無限の時間長の duration
の値は fit
という値で指定します。