ffmpeg copia fontes anexadas para serem usadas por legendas .ass

3

Eu tenho um arquivo .ass que quero migrar para um vídeo que requer fontes adicionais.

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

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

Mas como eu os coloco 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 todas as transmissões, incluindo vídeo / áudio / legendas, aparecerão com um tipo MIME conjunto 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 podem encontrar a fonte porque ela ainda aparece como fonte padrão do player, não das fontes anexadas.

As documentações do exemplo dizem

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

mas eu não tenho ideia do que -metadata: s: 2 significa, eu pensei que ele diz para qual fluxo anexá-lo, mas usando -metadata:s:2 , sendo 2 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 várias fontes corretamente a um contêiner MKV para ser usado por um fluxo de legendas .ass?

    
por elch 14.03.2014 / 22:10

1 resposta

4

Primeiro, você pode copiar fontes com ffmpeg . A opção -map 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 a documentação do FFmpeg Map para mais informações.

Para anexar fontes a um vídeo existente, a opção -metadata:s:2 está, de fato, selecionando o fluxo 2, mas se você observar sua mkvinfo , verá que os anexos são seus próprios fluxos. Eles não estão "conectados" ao fluxo de legendas. Portanto, no exemplo da sua pergunta, você deseja -metadata:s:3 . E anexos adicionais devem usar especificadores de fluxo correspondentes.

    
por 04.12.2015 / 19:37