2004年3月4日(日本時間5日)、MKVでSSA字幕用のフォント埋め込みが可能になったと発表された。
SSAの フォント埋め込み とは、字幕表示用に使うフォントデータを動画内に格納しておき、 再生時にそれを使用することで、再生側のシステムにインストールされていないフォントを使えるようにするもの。 画像の一部として焼き込んでしまうハードサブと変わらない自由な字幕表現が、 オンオフ・切り替え可能なソフトサブで可能になる。
単にスタイリッシュなフォントが自由に使えるようになっただけでなく、 特別なフォントを必要とするマイナーな言語のサポートという点でも意味が大きい。 すぐれた映画作品などを、 英語スペイン語などの主要言語だけでなく、 世界のいろいろな人が母国語で楽しめるようにする、といったことは望ましいことであり、 インターネット配信を使えば、字幕のテキストデータだけを入れ替えることで低コストでこれが実現できる。 そのとき、どんなフォントでも自由に使える統一規格があれば便利だ。 現在のDVDの、不鮮明でまともにリサイズもできない画像字幕は、もはや時代遅れだ。
ファンタジーで「ルーン文字」や「エルフ文字」などを使った特殊字幕効果への応用も考えられる。
下記サンプルでは、SSA にて MT TARE_P(MTたれっぴ(プロポーショナル))が指定され、 かつ、このフォントファイル MT_TARE_P.ttf が埋め込まれている。 システムにこのフォントがなてくも、 新しいフィルターを使えば、自動的に「たれっぴ」で表示される。
画像データではなくフォントデータだから、 優秀なレンダラーを使えば、拡大すれば解像度も上がり、アンチエイリアスまでかかる。 (画像例は減色しているので、実物よりやや見劣りするかもしれません。)
フォント埋め込みは、 Haali の MatroskaSplitter [CRC: B552 21F5] で、 実験的にサポートされた。このフィルターは、 Gabest の MatroskaSplitter 1.0.2.1 Unicode 版(2004年3月4日現在の最新版)に基づく。 Unicode 版であるため、Windows 2000/XP での動作が期待される。 (追記: MatroskaSplitter 1.0.2.2で正式版にマージされた。Windows 98系では未サポート) (追記2: Media Player Classic 6.4.7.9 では内蔵フィルターでも用いられている。 オプションの Player - Output で VMR9 モード、Subtitle - Maximum texture resolution を desktop にして、DirectVobSub の字幕は切ってから、 [Alt] + [Enter] で全画面表示にしてスペースを押して再生スタートしてみよう。 全画面の解像度で描画されるソフトサブの美しさは、なかなかのものだ。)
作成には特別なフィルターなどは要らない。 すぐ後で説明するように非常に簡単で、 MIME Type application/x-truetype-font でフォントファイルを添付するだけだ。 この MIME Type は MMG では自動選択されるので、要するに、作成時に [Browse] をクリックして埋め込みたいフォントファイルを指定してやるだけでいい。
再生には上記の新しいフィルターが必要だが、上記のフィルターがない場合でも、 単にシステムにないフォントは埋め込みフォントの効果が現れないだけで、全般的な再生には問題ない。 後方に何ら影響を及ぼさない、整然とした上位互換だ。 Media Player Classic (MPC) 6.4.7.8以下で再生テストするときは、 内蔵の MatroskaSplitter を無効にする必要がある(内蔵フィルターにはまだこの機能がないので)。 現時点では、まだ実験的段階なので、試したい場合 regsvr32 でフィルターを手動登録する必要がある。 また、MPC内蔵の字幕レンダラーと、VSFilterとから、二重に字幕が描画されると、CPUリソースが無駄なだけでなく、 字幕が二重になって輪郭がぼけるので注意。Media Player Classic 6.4.7.9以降なら、 内蔵フィルタで埋め込みフォントを使える。 一般のDSプレーヤー用のフィルターをとりあえずインストールしたい場合には、 mkvinst の b6 以降を使おう。
フォント埋め込みは、再生側にそのフォントがあるかどうか分からない場合、つまり不特定の相手にデータを配布する場合に、 特に役立つが、実は個人使用でもかなり有益だ。
OSを再インストールしたときなど、どこかで入手したちょっとしたフォントがシステムから消えてしまい、 入手先が思い出せず困ることがある。 そんなときでも、使いたいフォントデータが、自分の動画ファイルのなかにあらかじめ埋め込んであれば、問題ない。
2台以上のマシンや、ハードウェアデバイスなど、いろいろな場所で同じ動画を見る場合にも、 いちいちそれだけのために全部のデバイスに必要な特殊フォントを入れるのは非効率だ。 動画側にフォントが格納されているほうが合理的だ。
一台のマシンだけでも、 その動画だけでちょっと使うだけの目的で、いちいちフォントをシステムにインストールするのは面倒だしリソースの無駄だ。 Windows は基本的に FONT フォルダにある全フォントを起動時に読み込み、フォントが多ければそれだけ動作が遅くなる。
以上のようなことがあるので、 一部の動画でちょっと使うだけの特殊なフォントなどは、動画側に埋め込んでしまうのが、 効率の点でも、保守性の点でも得策であり、 配布を予定しない個人使用の動画でも、フォント埋め込みは使い方次第でかなり役に立つ。
半面、企業などが配布するファイルでフォント埋め込みを使用した場合など、 映像や音声そのものの版権に問題なくても、フォントの利用がEULAによって制限されている場合があるため、 権利関係に注意が必要だ。自由な利用を許可しているフォントも多いかもしれないが、 フォント埋め込みの場合、間接的にフォントファイルそのものを再配布することになるから、 ライセンスに注意を要する。
別記事「フォントデータの書き換えの法的問題」も参照。
一時フォルダにフォントファイルを取り出して読み込むため、 潜在的に、悪意をもって加工されたフォントファイルにより、 再生すると害を及ぼすような動画ファイルが作成される危険性もある。 規格外のデータは完全に無視するなど、再生アプリケーション側での適切な対応が重要だ。
実に簡単。SSAで指定したフォントのうち埋め込みしたいものを、 MUX のとき MMG の Attachments タブで指定してやるだけ。
注意: TTF以外のファイル形式(TTC、OTFなど)は、現在の、 DirectShowフィルターでは対応しないようである。 この場合、TTFに変換して添付することができる。
このとき MIME Type が application/x-truetype-font になっていることを確認しよう。 再生側システムにもともとあると考えられるフォントは埋め込む必要ない。
本家SSAフォーマットには、UuencodeでASCII文字列に変換したフォントデータを埋め込む機能があり、 SSAユーザの間では比較的よく用いられてきたが、この機能は VSFilter によるソフトSSAではサポートされなかった。 Uuencodeで実行ファイルなども埋め込めてしまうので、セキュリティ上の配慮もあったのかもしれない。
タイプセッターが指定したフォントが確実に使われるようにしたい、というのは、当然の要求であり、 タイプセットとはまさにその作業なのだが、このことは(フォントを画像の一部として埋め込む)ハードサブでは当然でも、 (フォントを独立したテキストデータとして埋め込む)ソフトサブではこれまで制約があった。 指定したフォントが再生側のシステムで利用可能かどうかの保証がないからだ。
Matroska ではもともとフォントファイル自体を「添付」(動画内に埋め込み)できたので、 あとは、埋め込まれているフォントを再生時に一時フォルダに取り出して利用するようにすれば、 フォント埋め込みが可能になる。一部のユーザの間で前から要望が高かった機能だ。
これまでにも、ソフトサブで任意のフォント種を使う方法として、 SSA→IDX+SUB方式(Son2Vobsub)があった。この方法では任意のフォントのイメージを確実に埋め込めるが、 同時に使用できる色数が4色程度、エフェクトも使えず、 オンオフはできるものの固定画像なので、SSAの直接レンダリングよりやや品質が劣り、 拡大するとぼけてしまうという問題があった。
クロスプラットフォーム(特に将来的にはハードウェアデバイス)や、WindowsでもVLCを含むより広い環境で安定的に再生できるという点で、 今なお SSA→IDX+SUB方式 も独自の価値を持っている。フォント内蔵方式は理論的には優れているが、 現時点では、Windows 用の MatroskaSplitter.ax に依存しており、IDX+SUBほど普遍的には使えない。 明らかに便利な機能で技術的にも特に困難でないので、 将来的にはサポートが広がるだろうが、今のところは、まだ実験段階だ。