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

4

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

Estou usando este comando:

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

Eu encontrei este exemplo de linha de comando em vários tutoriais, mas por algum motivo (uma versão mais nova do ffmpeg?) me dá:

Unrecognized option 'newsubtitle'

Alguma pista de como adicionar legendas usando o ffmpeg?

Obrigado!

P.S. Eu preciso de uma solução que possa ser automatizada em um script bash, então usar programas como Subler não são adequados para esta tarefa.

    
por Yuval Cohen 10.02.2013 / 17:56

2 respostas

8

-newsubtitle é uma opção obsoleta de versões antigas do ffmpeg; com versões mais modernas, o comando ficará assim:

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

-map 0 -map 1 diz ao ffmpeg para usar todos os streams da entrada 0 e da entrada 1.

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

-c copy diz ao ffmpeg para copiar todos os streams da entrada sem recodificar, enquanto tendo -c:s mov_text após o -c copy substitui a configuração de cópia do fluxo de legenda, recodificando-o para um formulário que o contêiner MP4 pode conter.

    
por 10.02.2013 / 19:17
6

Com o FFmpeg 0.9, a opção -newsubtitle foi removida. Se você quiser adicionar à saída todos os fluxos de vídeo / áudio / legenda de todos os arquivos de entrada, use as opções -map , 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

Isto irá copiar os streams 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 opções map aqui especificam que todos os fluxos do primeiro arquivo ( 0 ) e do segundo arquivo ( 1 ) serão copiados, por isso funcionará mesmo se o original tiver vários fluxos de áudio, por exemplo.

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

Razão para remover essas opções do Changelog :

-newvideo/-newaudio/-newsubtitle options were removed. Not only were they irregular and highly confusing, they were also redundant. In avconv the -map option will create new streams in the output file and map input streams to them. E.g. avconv -i INPUT -map 0 OUTPUT will create an output stream for each stream in the first input file.

    
por 10.02.2013 / 18:59