
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 -map
opçã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:2
opção é selecionar o fluxo 2, mas se você olhar sua mkvinfo
saí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.