ffmpeg copia fontes anexadas para serem usadas por legendas .ass

ffmpeg copia fontes anexadas para serem usadas por legendas .ass

Eu tenho um arquivo .ass que quero misturar em um vídeo que requer fontes adicionais.

Parece não haver opção de copiar os anexos de um arquivo para outro, então descartei todos eles usando

ffmpeg -dump_attachment:t "" -i input.mkv

Mas como faço para colocá-los no novo arquivo corretamente?

Eu tentei o seguinte:

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

as fontes parecem estar anexadas, mas todos os fluxos, incluindo vídeo/áudio/legendas, aparecerão com um tipo MIME definido das fontes.

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...

As legendas não conseguem encontrar a fonte porque ela ainda aparece como fonte padrão do player, não como as anexadas.

Odocumentaçõesexemplo diz

ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

mas não tenho ideia do que -metadata:s:2 significa, pensei que ele informasse a qual fluxo anexá-lo, mas usar -metadata:s:2, 2 sendo o fluxo de legendas, falha com

Could not write header for output file #0 (incorrect codec parameters ?): Error number -22 occurred

Como copiar ou anexar corretamente várias fontes a um contêiner MKV para ser usado por um fluxo de legendas .ass?

Responder1

Primeiro, você pode copiar fontes com arquivos ffmpeg. A -mapopção substitui alguns padrões e seleciona todos os fluxos da entrada. Exemplo:

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

Veja também oDocumentação do mapa FFmpegpara mais informações.

Para anexar fontes a um vídeo existente, a -metadata:s:2opção é selecionar o fluxo 2, mas se você olhar sua mkvinfosaída, verá que os anexos são seu próprio fluxo. Eles não estão "anexados" ao fluxo de legendas. Então, no exemplo da sua pergunta, você gostaria -metadata:s:3. E anexos adicionais devem usar especificadores de fluxo correspondentes.

informação relacionada