Rainbow Captions ブログ ダウンロード

.ytt フォーマット:実務リファレンス

YouTube のタイムドテキスト形式のリファレンスです。スタイル付き字幕の中身である XML で、.ytt として保存され、YouTube 内部では format 3、つまり SRV3 と呼ばれます。以下にまとめたのは、このフォーマットが実際に受け付けるものです。もっともらしく見えて黙って捨てられる値も含めて扱います。

ファイルの形

<timedtext format="3">
  <head>
    <pen id="1" b="1" fc="#FEFEFE" fo="254" et="4" ec="#000000"/>
    <wp id="0" ap="7" ah="50" av="90"/>
    <ws id="0" ju="2"/>
  </head>
  <body>
    <p t="1000" d="1600" wp="0" ws="0" p="1">Today we fix that.</p>
  </body>
</timedtext>

head では使い回すスタイルを宣言します。テキスト用の pen、字幕ウィンドウの位置を決める wp、その中でテキストをどう揃えるかの ws です。body は字幕行の並びで、各行は使うスタイルを id で指します。

<pen> — テキストのスタイル

属性値意味
fs0–7フォント。0 は既定のサンセリフ体、1 は Courier New、2 は Times New Roman、3 は Lucida Console、5 は Comic Sans MS、6 は Monotype Corsiva、7 は Carrois Gothic SC。4 は未定義です。
szintegerサイズ。100 が YouTube の既定値で、目盛りは線形ではありません(下記参照)。
b, i, u"1"太字、斜体、下線。true のときだけ書き出されます。
fc#RRGGBB文字色。純白の #FFFFFF は #FEFEFE と書かれるのが一般的です。
fo0–254文字の不透明度。255 は取り除かれるので、完全な不透明は 254 です。
bc, bo#RRGGBB, 0–254背景ボックスの色とその不透明度。bo="0" でボックスが消えます。
et1–4エッジ。1 はハードな影、2 はベベル、3 はグロー、4 はやわらかな影です。縁取り専用のタイプはなく、濃い色のグローがその代わりになります。
ec#RRGGBBエッジの色。既定は #222222 で、不透明度は文字に合わせられます。
of0–2オフセット。0 は下付き、1 は通常、2 は上付きです。
rb0–5ルビ(ふりがな)。0 はなし、1 はベース、2 は括弧、4 は前に置くテキスト、5 は後ろに置くテキストです。

サイズの計算式

sz の値は、思っているサイズそのものではありません。実際の倍率の 4 倍の速さで動きます。

sz    = (1 + (scale − 1) × 4) × 100
scale = 1 + (sz / 100 − 1) / 4

つまり sz="100" が 100%、sz="200" が 125%、sz="50" がおよそ 87% です。YouTube の既定の字幕サイズはフレーム高さの約 4.6〜4.8% で、sz="100" はこの大きさで描画されます。

<wp> — ウィンドウの位置

属性値意味
ap0–8アンカーポイント。0 は左上、1 は上中央、2 は右上、3 は左中央、4 は中央、5 は右中央、6 は左下、7 は下中央、8 は右下です。
ah0–100水平位置。
av0–100垂直位置。

位置はフレームのそのままの割合ではありません。YouTube はこれをセーフエリアに割り当てます。

screen% = value × 0.96 + 2

av="0" は上から 2%、av="100" は 98% の位置に来ます。逆方向に変換するときは value = (screen% − 2) / 0.96 を使います。

<ws> — ウィンドウのスタイル

属性値意味
ju0–2行揃え。0 は左、1 は右、2 は中央です。
pd0–3表示方向。0 は横書きの左から右です。
sd0–1スクロール方向。縦書きテキスト用です。

<p> と <s> — 行とセグメント

属性値意味
p.t≥ 1 ms開始時刻。0 から始まる行を無視する Android プレーヤーがあります。
p.d> 0 ms表示時間。
p.wp, p.wsid使用するウィンドウの位置とウィンドウのスタイル。
p.pid行全体に使うペン。
s.pid行の中のひとつのセグメントに使うペン。
s.t≥ 0 ms行を基準としたセグメントの開始。一語ずつのタイミングはこれで実現します。

半日を溶かすクセ

この情報の出どころ

このフォーマットは YouTube から公に文書化されていません。基準となる挙動は、オープンソースのコンバーター YTSubConverter — そのソースが事実上の仕様書です — から来ていて、YouTube からダウンロードした実際の字幕トラックと、プレーヤーが実際に描画する内容で確かめられています。Rainbow Captions も同じフォーマットを書き出します。上の表を見ながら手でトラックを組んでもいいですし、レイヤーの重ね方、保険の文字、一語ずつのタイミングをアプリに任せることもできます。

XML はアプリにまかせる

Rainbow Captions がペン、重ねた縁取り、保険の文字、一語ごとのタイミングを、170言語すべてで引き受けます。ダウンロード無料、最初の10言語も無料です。

Mac 版をダウンロード