segunda-feira, 17 de outubro de 2016

Como Extrair Vídeo e Legendas do .mkv e Depois Converter Para avi

Para extrair o arquivo de legenda (.srt):
*Se você já tem o arquivo .srt ou vai produzir um, pule essa primeira parte

**Copiado do blog TI Log Book:
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

Editando o arquivo legenda (.srt)

Se você pretende editar o arquivo de legenda por algum motivo, ou até mesmo criar sua própria legenda, eu recomendo o programa Aegisub que é bem simples de utilizar e bastante completo. Para você editar todas as legendas de uma só vez, clique em uma das linhas e aperte as teclas Ctrl+a, e assim  aplicar as alterações a todas as linhas. É basicamente um editor de texto, não tem dificuldade, tem uns pequenos botões com ícones iguais aos do word, onde você coloca bold, itálico, muda a fonte, etc. Tem a opção vídeo para você abrir uma janelinha com o vídeo e checar se a legenda está ok, sincronizada com o mesmo e etc.

Converter para avi e colocar legenda

Instale o programa WinFF utilizando o sistema de instalação da sua distribuição linux. Este programa é também bastante simples de usar, tem as pré-configurações, então você basicamente não precisa se preocupar com detalhes técnicos.

1. Na janela do WinFF, tenha certeza de que o botão "Opções" esteja ativado, porque é necessário ter acesso às guias(abas) de configuração.

2. Na janela do WinFF tem um botão "Adicionar", clique nele, ache o seu vídeo para adicionar e adicione.

3. Na janela do WinFF na guia(aba) "Detalhes da saída", clique logo abaixo de "Converter para", vai abrir um "menu drop-down" onde neste caso vamos escolher AVI, que é o arquivo que vamos gerar.

4. No "pré-ajuste" nesta mesma guia, clicamos e escolhemos "Xvid WideScreen", que vai gerar um vídeo próprio para telas widescreen.

5. Em "Pasta de destino", vamos marcar a caixinha "Utilizar a pasta de origem", que é para onde nosso arquivo .avi vai ser gerado, na mesma pasta do arquivo de vídeo .mkv.

6. Agora se você ativou o botão "Opções" vai ver uma guia(aba) escrito "FFmpeg" do lado da guia "Hora". Clique nesta guia. Você verá um extenso texto com parâmetros de configuração do ffmpeg. Logo acima  tem um espaço em branco "Parâmetros extra da linha de comandos". Nesta linha, você vai digitar onde está o seu arqui .ass(que você gerou com o Aegisub), por exemplo, vamos supor que você é o usuário Leandro que salvou dentro da sua pasta pessoal em Downloads/video:

-vf   "ass=/home/leandro/Downloads/video/legenda.ass"

O que você está fazendo é adicionando um parâmetro a mais indicando que você quer que "cole" a legenda no vídeo do arquivo .avi a ser gerado.

7. Feito isso é só Clicar no botão "Converter", lá no topo da janela. Então irá abrir uma janela de terminal e vai começar a gerar o avi com legendas a partir do mkv.