sábado, 12 de julho de 2014

Extraindo legendas embutidas de vídeos utilizando FFmpeg

Este post mostra como extrair legendas embutidas em vídeos para o formato SRT utilizando o FFmpeg.

Verificando os Encoders

Precisamos de um encoder para extrair a legenda do vídeo. Utilizamos o comando ffmpeg -codecs para verificar os encoders de legenda disponíveis.

ffmpeg -codecs | grep -e '^...S...'
...
 ..S... = Subtitle codec
 DES... ass                  ASS (Advanced SSA) subtitle
 DES... dvb_subtitle         DVB subtitles (decoders: dvbsub ) (encoders: dvbsub )
 ..S... dvb_teletext         DVB teletext
 DES... dvd_subtitle         DVD subtitles (decoders: dvdsub ) (encoders: dvdsub )
 ..S... eia_608              EIA-608 closed captions
 D.S... hdmv_pgs_subtitle    HDMV Presentation Graphic Stream subtitles (decoders: pgssub )
 D.S... jacosub              JACOsub subtitle
 D.S... microdvd             MicroDVD subtitle
 DES... mov_text             MOV text
 D.S... mpl2                 MPL2 subtitle
 D.S... pjs                  PJS (Phoenix Japanimation Society) subtitle
 D.S... realtext             RealText subtitle
 D.S... sami                 SAMI subtitle
 DES... srt                  SubRip subtitle with embedded timing
 DES... ssa                  SSA (SubStation Alpha) subtitle
 DES... subrip               SubRip subtitle
 D.S... subviewer            SubViewer subtitle
 D.S... subviewer1           SubViewer v1 subtitle
 D.S... text                 raw UTF-8 text
 D.S... vplayer              VPlayer subtitle
 D.S... webvtt               WebVTT subtitle
 DES... xsub                 XSUB

O resultado acima mostra que o ffmpeg tem o filtro SRT com encoder e o decoder.

Analisando o vídeo

Antes de extrairmos a legenda embutida no vídeo precisamos analisas os streams do vídeo com o comando ffmpeg.

ffmpeg -i video.mkv
...
Input #0, matroska,webm, from 'video.mkv':
  Metadata:
    encoder         : libebml v1.0.0 + libmatroska v1.0.0
    creation_time   : 2012-04-05 12:36:01
  Duration: 00:23:09.60, start: 0.000000, bitrate: 1906 kb/s
    Stream #0:0(eng): Video: h264 (High), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 23.81 fps, 23.81 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp (default)
    Stream #0:2: Subtitle: ssa (default)
...

No resultado acima temos 1 stream de vídeo, 1 stream de audio e 1 stream de legenda (subtitle). Anotamos então os identificados do stream na forma 0.0, 0.1 e 0.2

Extraindo a legenda

ffmpeg -i video.mkv -vn -an -codec:s:0.2 srt video.srt

Onde

  • -i video.mkv: seleciona o vídeo
  • -vn: desabilita o stream de vídeo
  • -an: desabilita o stream de audio
  • -codec:s:0.2 srt: seleciona o stream de legenda (subtitle) com o filtro srt
  • video.srt: é o arquivo de legenda que será gerado

Pronto, você deve ter agora um arquivo video.srt contendo a legenda do seu vídeo

Postar um comentário