Como extrair legendas de vídeo usando ffmpeg?

34

Estou tentando extrair legendas do vídeo como .srtarquivo, usei o seguinte comando:

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

Mas, recebi um erro como opção não reconhecida codec:s:0:1 Então, você pode me dizer o comando exato e como extrair uma legenda como .srtarquivo em vídeo?

vijay
fonte
umair: u deve me dizer no prompt de comando
vijay
Eu tenho o mesmo problema. Você conseguiu que isso funcionasse?
precisa

Respostas:

51

Simples:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL / caminho do arquivo de entrada.
  • -map : designe um ou mais fluxos de entrada como uma fonte para o arquivo de saída.
  • s: 0 : selecione o fluxo de legendas.
jm3
fonte
2
Isso funcionou para mim com um arquivo MP4 com legendas incorporadas.
Rubens Mariuzzo
11
Isso baixaria a primeira faixa de legenda. Se houver vários, use 0:s:1para baixar o segundo, 0:s:2para baixar o terceiro e assim por diante.
Fabien Snauwaert 10/11
5
@ jm3 Você conhece alguma maneira de extrair automaticamente todos os fluxos de legenda de um arquivo, nomeando-os após o identificador de idioma (por exemplo, eng, fre, dut etc.)?
pe.
por que é tão lento ao extrair de um grande recipiente MKV (~ 4 gb)?
usar o seguinte comando
Para extrair mais legendas de uma só vez, você deve duplicar os -mapparâmetros para cada arquivo. Também incluem -c copyde modo que apenas extrai o arquivo sem tentar processá-lo: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. De qualquer forma, levará muito tempo porque o ffmpeg deve ler o arquivo de vídeo inteiro para encontrar todas as partes dos fluxos de legenda.
Radek Pech
8

-codec:s:0:1está incorreto. Se você usar -codec:s:0, o ffmpeg usará o codec indicado para o primeiro fluxo de legenda que está sendo transmitido para a saída; se você usar -codec:s:1, ele o usará para o segundo fluxo de legenda, etc.

Você também pode usar -codec:spara selecionar todos os fluxos de legenda de saída ou -codec:2para selecionar o terceiro fluxo de saída, independentemente do que seja.

Você provavelmente está confuso porque a -mapopção se comporta de uma maneira diferente - lá, você precisa selecionar de qual entrada o fluxo selecionado vem. (assim, -map 0:s:0pegaria o primeiro fluxo de legenda da primeira entrada e o alimentaria na saída). No entanto, -mapé para selecionar quais fluxos você deseja obter das entradas; enquanto a maioria das outras opções que usam o mapeamento de fluxo é para uso nos fluxos depois que eles foram selecionados (portanto, não é necessário especificar de qual arquivo de entrada eles são), pois eles são passados ​​para a saída.

evilsoup
fonte
evilsoup: eu usaria o seguinte comando E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ rotina.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, parece um erro tem Incapaz de encontrar um formato de saída apropriado para 'srt', u pode me dizer o comando para extrair um subtítulo em vídeo ...
Vijay
2
Tente: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg deve detectar que você quer srt legendas o nome do arquivo de saída)
evilsoup
Eu usei: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtisso deve copiar todas as legendas para o arquivo srt.
Stuart
@Stuart não extrair todas as legendas
USER25
1
@evilsoup -codec:sé igual a -codec:s:0que ele não selecionar todas as legendas ... ele irá extrair primeira faixa de texto
USER25