Os arquivos da legenda .ass, .ssa e .srt devem estar na codificação de caracteres 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 inserir 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 caracteres 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 vá ao 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 estar na codificação de caracteres UTF-8 para funcionar corretamente com o FFmpeg:
ffmpeg -i video.flv -vf ass=video.ass noite.avi
Pronto.
NOTA: 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
NOTA: O tamanho 36 fica muito bom na visualização em um monitor LCD 4:3 de 17" com linhas de 21 caracteres, incluindo 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á visto 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 estar na codificação de caracteres 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
NOTA: 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 arquivos de legenda suportadas 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 DVD Player com suporte a DivX com entrada USB.
O vídeo deve estar 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á.