segunda-feira, 1 de junho de 2015

Inserindo legenda em vídeo na linha de comando com o FFmpeg

Os arquivos da legenda .ass, .ssa e .srt deve está na codificação de caractere UTF-8 para funcionar corretamente com o ffmpeg, pois senão surgirá um monte de erros e a legenda pode não ser embutida ou ficar dessincronizada no vídeo.


Verificando a codificação de caracteres do arquivo da legenda

$ file video.srt 
video.srt: Pascal source, UTF-8 Unicode text, with CRLF line terminators

$ file trovao.srt 
trovao.srt: Pascal source, ISO-8859 text, with CRLF line terminators 

Nota:
O ffmpeg poderá não inseri a legenda no vídeo com codificação diferente de UTF-8, ou apresentar muitos erros caso consiga inserir, como fora de sincronismo, pular frases, etc.

Como mudar a codificação de caractere caso esteja diferente do UTF-8 ?

Você pode utilizar para isto qualquer editor de texto ASCII que permite especificar uma codificação de caracteres como o Leafpad.
No Leafpad, abra o arquivo da legenda .ass e depois ir no menu Arquivo/Salvar Como, em Codificação de caracteres, escolha UTF-8 e CR+LF e clique em Salvar, depois confirme sobrescrever o arquivo atual.


Outra forma de mudar a codificação é usando o comando iconv em uma janela de terminal.

Convertendo de ISO-8859-1 para UTF-8

$ iconv -f iso-8859-1 -t utf-8 legenda > legenda2

Onde o arquivo legenda2 está com todo o seu conteúdo no formato UTF-8.


Inserindo legenda .ass (.ssa)

O arquivo da legenda .ass  (.ssa - Sub Station Alpha), deve está na codificação de caractere UTF-8 para funcionar corretamente com o ffmpeg.

$ ffmpeg -i video.flv -vf ass=video.ass noite.avi 

Pronto.

Notas:
Para que se possa unir a legenda .ass você deve ter o pacote  libass instalado em seu sistema e o ffmpeg da sua distro deve ter sido compilado com a opção --enable-libass caso contrário não funcionará.


Alterando tamanho da fonte, cor e altura no arquivo da legenda .ass

Como arquivo de legenda .ass também é um arquivo de texto puro ASCII, o mesmo pode ser editado manualmente, para alterar as opções da legenda, sendo  a mais fácil o tamanho da legenda. 
Em Style: Default,Arial,16   troque o tamanho 16 por 36. 

[V4+ Styles] 
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding 
Style: Default,Arial,36,&Hffffff,&Hffffff,&H0,&H0,0,0,0,1,1,0,2,10,10,10,0,0 

Notas:
O tamanho 36 fica muito bom na visualização em um monitor LCD 4:3 de 17" com linhas de 21 caracteres incluído os espaços em branco, e sendo que a previsão é de no máximo 35 a 40 caracteres incluindo os espaços em branco pra caber na mesma linha (vídeo com tela de 640x270).

Alterando a cor da legenda

O padrão da cor da legenda é branco (&Hffffff,&Hffffff) 

Pra deixar a legenda na cor amarela, substitua por H0000ffff, devendo ficar assim.:
Style: Default,Arial,36,&H0000ffff,&H0000ffff 


Subindo a altura da legenda

No valor padrão abaixo:
Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,1,1,0,2,10,10,10,0,0 

O terceiro valor da direita para esquerda da linha Style, modifica a altura padrão da legenda, sendo o valor 10 o padrão.
Para subir a legenda mais um pouco, um valor bom é o 30 que não deixa a mesma muito embaixo da tela.

Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,1,1,0,2,10,10,30,0,0

Se utilizar o valor 80 a legenda ficará no meio da tela.

Importante:
O tamanho da legenda .ass e a cor alterada, bem como a altura da mesma no arquivo poderá não ser vista sua alteração ao reproduzir o vídeo com alguns players de vídeo mesmo o arquivo da legenda tendo o mesmo nome do vídeo e estando na mesma pasta, sendo a visualização das alterações somente depois de embutida a legenda ao vídeo nestes players.

O arquivo de vídeo com o arquivo da legenda separada .ass não será vista a mesma durante a reprodução em uma TV LED com entrada usb tendo os dois em um pendrive, somente será vista a legenda quando o arquivo da legenda for .srt.



Convertendo o formato .srt pra .ass com o ffmpeg 

Se você tem um arquivo de legenda .srt e que converter para .ass para poder especificar o tamanho da fonte e usar também a cor amarela na legenda sem precisar instalar programas adicionais para isto, você pode fazer pelo próprio ffmpeg e um editor de texto ASCII.

Antes de usar o ffmpeg é importantíssimo que o arquivo da legenda esteja com a codificação UTF-8, pois senão não funcionara corretamente, devendo salvar o arquivo da legenda na codificação de caractere UTF-8 como descrito anteriormente.

Para converter a legenda .srt para .ass

$  ffmpeg -i trovao.srt trovao.ass 

Pronto, arquivo de legenda convertido para .ass

Nota:
Também pode-se especificar a extensão .ssa que produz o mesmo resultado na conversão.

Inserido legenda .srt com o ffmpeg

O arquivo da legenda .srt (SubRip) deve está na codificação de caractere UTF-8, caso não estiver a mesma poderá não ser inserida ou apresentar muitos erros.

$ ffmpeg -i video.flv -vf subtitles=video.srt saida.avi


Notas:
Testado com vídeos de entrada nos formatos flv, mp4 e avi com o ffmpeg versão 2.1.5 no Salix 14.1.


Verificando os formatos de arquivo de legenda suportado pelo ffmpeg 


$ ffmpeg -codecs | grep "^...S" 
ffmpeg version 2.1.5 Copyright (c) 2000-2014 the FFmpeg developers 
  built on Jun 30 2014 00:37:24 with gcc 4.8.2 (GCC) 
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/man --enable-shared --disable-static --disable-debug --enable-pthreads --enable-x11grab --disable-libfaac --enable-libcaca --enable-librtmp --enable-libmp3lame --enable-libmodplug --enable-libspeex --enable-libwavpack --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libx264 --enable-libschroedinger --enable-libass --enable-libxvid --enable-gpl --enable-postproc --enable-libopus --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libcdio --enable-openal --enable-avresample --enable-version3 --disable-ssse3 --arch=i486 --cpu=i686 
  libavutil      52. 48.101 / 52. 48.101 
  libavcodec     55. 39.101 / 55. 39.101 
  libavformat    55. 19.104 / 55. 19.104 
  libavdevice    55.  5.100 / 55.  5.100 
  libavfilter     3. 90.100 /  3. 90.100 
  libavresample   1.  1.  0 /  1.  1.  0 
  libswscale      2.  5.101 /  2.  5.101 
  libswresample   0. 17.104 /  0. 17.104 
  libpostproc    52.  3.100 / 52.  3.100 
 ..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 


Para reproduzir o vídeo legendado na TV

Em TVs de LEDs com entrada usb, o vídeo pode está tanto no formato avi com codec de vídeo FMP4, libxvid ou msmpeg4, ou no formato mp4 com codec de vídeo h264 ou x264 e os vídeos pode ter uma resolução de tela de até 1920 x 1080 pixels (Full HD – 1080p).

Em aparelhos de DVDPlayer com suporte a DivX com entrada usb.
O vídeo deve está no formato avi com codec de vídeo libxvid ou msmpeg4, lembrando que o tamanho máximo de tela suportado pelo aparelho é de 720x576 pixels, maior que isto não rodará.

Nenhum comentário:

Postar um comentário