Usando o FFMPEG para adicionar legendas a um arquivo de vídeo M4v

5

Estou tendo problemas para adicionar legendas a um arquivo de vídeo usando o ffmpeg.

Eu estou usando este comando:

ffmpeg -i movie_input.m4v -newsubtitle subtitles.srt -acodec copy -vcodec copy movie_output.m4v

Encontrei este exemplo de linha de comando em vários tutoriais, mas por algum motivo (uma versão mais recente do ffmpeg?), Ele me fornece:

Unrecognized option 'newsubtitle'

Alguma pista de como posso adicionar legendas usando o ffmpeg?

Obrigado!

PS: Preciso de uma solução que possa ser automatizada em um script bash, portanto, o uso de programas como o Subler não é adequado para esta tarefa.

Yuval Cohen
fonte

Respostas:

9

-newsubtitleé uma opção obsoleta das versões antigas do ffmpeg; com versões mais modernas, o comando terá a seguinte aparência:

ffmpeg -i input.m4v -i subtitle.srt -map 0 -map 1 -c copy -c:s mov_text output.m4v

-i input.m4v -i subtitle.srt diz ao ffmpeg para usar esses dois arquivos como entrada.

-map 0 -map 1 diz ao ffmpeg para usar todos os fluxos da entrada número 0 e entrada número 1.

Não é diretamente relevante para isso, mas você pode selecionar fluxos individuais com -map: -map 0:vselecionaria todos os fluxos de vídeo da entrada 0, -map 1:sselecionaria todos os fluxos de legenda da entrada 1, -map 0:0selecionaria fluxo 0 (o primeiro fluxo) da entrada 0, -map 1:a:0selecionaria o primeiro fluxo de áudio da entrada 1.

-c copydiz ffmpeg para copiar todos os fluxos a partir da entrada sem re-codificação, enquanto tendo -c:s mov_text depois as -c copysubstituições a cópia de ajuste para o fluxo de legendas, que codifica re-lo a uma forma do recipiente MP4 pode conter.

evilsoup
fonte
Existe uma maneira de gravar as legendas em um arquivo m4v usando ffmpeg?
Koray Tugay
@KorayTugay Sim . Se precisar de ajuda não contida nesse link, faça uma pergunta (e não se esqueça de marcar com ela ffmpeg).
evilsoup
Estou confuso porque os exemplos aqui não contêm m4v.
Koray Tugay
6

Com o FFmpeg 0.9, a -newsubtitleopção foi removida. Se você deseja adicionar todos os fluxos de vídeo / áudio / legenda dos arquivos de entrada à saída, use as -mapopções, por exemplo:

ffmpeg -i movie_input.m4v -i subtitles.srt -c:v copy -c:a copy -c:s mov_text \
-map 0 -map 1 out.m4v

Isso copiará os fluxos de vídeo e áudio, mas codificará as legendas para mov_text, que é o único formato de legenda oficialmente suportado para MP4. SRT por padrão não funcionará.

As mapopções aqui especificam que todos os fluxos do primeiro arquivo ( 0) e do segundo arquivo ( 1) serão copiados, portanto funcionaria mesmo que o original tivesse vários fluxos de áudio, por exemplo.

Para um artigo detalhado sobre como usar a mapopção, consulte o wiki do FFmpeg .

Motivo para remover essas opções do Changelog :

As opções -newvideo / -newaudio / -newsubtitle foram removidas. Não apenas eram irregulares e altamente confusos, como também eram redundantes. No avconv, a opção -map criará novos fluxos no arquivo de saída e mapeará os fluxos de entrada para eles. Por exemplo, avconv -i INPUT -map 0 OUTPUT criará um fluxo de saída para cada fluxo no primeiro arquivo de entrada.

slhck
fonte