3

У меня есть файл .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 ответ1

4

Во-первых, вы можете скопировать шрифты с помощью ffmpeg . Опция -map отменяет некоторые значения по умолчанию и выбирает все потоки из входных данных. Пример:

ffmpeg -i infile.mkv -map 0 -c copy outfile.mkv

Также см. Документацию FFmpeg Map для получения дополнительной информации.

Для прикрепления шрифтов к существующему видео -metadata:s:2 действительно выбирает поток 2, но если вы посмотрите на вывод mkvinfo вы увидите, что вложения являются их собственным потоком. Они не "привязаны" к потоку субтитров. Таким образом, в примере в вашем вопросе вы хотели бы -metadata:s:3 . А дополнительные вложения должны использовать соответствующие спецификаторы потока.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .