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

Publicado por Fernando T. Da Silva em 11/06/2015

[ Hits: 8.456 ]

Blog: http://meumundotux.blogspot.com.br/

 


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



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á.

Outras dicas deste autor

Criando pacotes executáveis auto-extraível no GNU/Linux

Backup incremental com cp

Screencast - Gravando seu Desktop com FFmpeg

Assistindo filmes em Blu-ray no GNU/Linux

Bug do duplo clique do Zenity no Linux Mint 17 Qiana [Resolvido]

Leitura recomendada

Localizar arquivos ou diretórios no Linux

O comando split

Referência de comandos Unix/Linux

Problemas com o plugin Swfdec no Firefox

Fedora sem ifconfig [Resolvido]

  

Comentários
[1] Comentário enviado por removido em 20/03/2016 - 20:32h

Houve muita perda na qualidade de imagem,ainda não encontrei (se é que existe) um programa para linux que eu possa embutir legendas,podendo definir cor/tamanho da fonte e a posição da legenda e que mantenha uma boa qualidade de imagem.

[2] Comentário enviado por henriqueferreira em 19/06/2018 - 13:13h

creio que se por um -vcodec libx264 teremos um ótimo resultado e sem perder muita qualidade, eu fiz isso e não consegui ver diferença.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts