追加のフォントが必要なビデオに多重化したい.assファイルがあります。
あるファイルから別のファイルに添付ファイルをコピーするオプションがないように思われるので、私はそれらをすべて使用してダンプしました
ffmpeg -dump_attachment:t "" -i input.mkv
しかし、どうすればそれらを新しいファイルに正しく入れることができますか?
私は以下を試しました:
ffmpeg -i input.mkv -c copy -attach "fontastique.ttf" -metadata:s: mimetype=application/x-truetype-font -attach "Franchise - Extra.ttf" -metadata:s: mimetype=application/x-truetype-font -attach "Painfresco-Italic.ttf" -metadata:s: mimetype=application/x-truetype-font -attach "Painfresco-Regular.ttf" -metadata:s: mimetype=application/x-truetype-font -attach "SETFIRETOTHERAIN.TTF" -metadata:s: mimetype=application/x-truetype-font -attach "Volter__28Goldfish.ttf" -metadata:s: mimetype=application/x-truetype-font output.mkv
フォントは添付されているように見えますが、ビデオ/オーディオ/字幕を含むすべてのストリームは、フォントの設定されたmimetypeで表示されます。
Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp (default) (forced)
Metadata:
MIMETYPE : application/x-truetype-font
Stream #0:2: Subtitle: ssa (default) (forced)
Metadata:
MIMETYPE : application/x-truetype-font
Codec 0x18000 is not in the full list.
Stream #0:3: Attachment: unknown_codec
Metadata:
filename : fontastique.ttf
mimetype : application/x-truetype-font
...etc...
字幕は、添付されているフォントではなく、プレーヤーのデフォルトフォントとして表示されるため、フォントを見つけることができません。
ドキュメント 例は言う
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
しかし、-metadata:s:2が何を意味するのかわかりません。アタッチするストリームを示していると思いましたが、字幕ストリームである-metadata:s:2
を使用すると、次のように失敗します。
Could not write header for output file #0 (incorrect codec parameters ?): Error number -22 occurred
.ass字幕ストリームで使用するMKVコンテナに複数のフォントを正しくコピーまたは添付するにはどうすればよいですか?
まず、実際にはffmpeg
を使用してフォントをコピーできます。 -map
オプションはいくつかのデフォルトをオーバーライドし、入力からすべてのストリームを選択します。例:
ffmpeg -i infile.mkv -map 0 -c copy outfile.mkv
詳細については、 FFmpeg Mapのドキュメント も参照してください。
既存のビデオにフォントを添付する場合、-metadata:s:2
オプションは確かにストリーム2を選択していますが、mkvinfo
出力を見ると、添付ファイルが独自のストリームであることがわかります。それらは字幕ストリームに「添付」されていません。したがって、質問の例では、-metadata:s:3
。また、追加の添付ファイルでは、対応するストリーム指定子を使用する必要があります。