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.

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.