
我有一個 .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
, 2 作為字幕流,會失敗
Could not write header for output file #0 (incorrect codec parameters ?): Error number -22 occurred
如何正確地將多種字體複製或附加到 MKV 容器以供 .ass 字幕串流使用?
答案1
首先,您實際上可以使用ffmpeg
.此-map
選項會覆蓋一些預設值並從輸入中選擇所有串流。例子:
ffmpeg -i infile.mkv -map 0 -c copy outfile.mkv
另請參閱FFmpeg 地圖文檔了解更多。
要將字體附加到現有視頻,該-metadata:s:2
選項確實選擇流 2,但如果您查看輸出,mkvinfo
您會發現附件是它們自己的流。它們沒有“附加”到字幕流。所以在你問題的例子中你會想要-metadata:s:3
.附加附件應使用對應的流說明符。