
У меня есть файл .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
шрифты, похоже, прикреплены, но все потоки, включая видео/аудио/субтитры, будут отображаться с заданным mime-типом шрифтов.
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...
Субтитры не могут найти шрифт, поскольку он по-прежнему отображается как шрифт по умолчанию в проигрывателе, а не как прикрепленные шрифты.
Theдокументацияпример говорит
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
. А дополнительные вложения должны использовать соответствующие спецификаторы потока.