Outro dia estávamos discutindo sobre a melhor forma de re-codificar um arquivo de vídeo original com sua respectiva legenda renderizada sobre o stream de vídeo… Pensei logo no mencoder!!!
Isso é necessário quando não temos um player com a funcionalidade de carregar um arquivo de legenda para tocar junto com o vídeo (overlay do texto da legenda + sincronização). Um exemplo é o player do PS3 (*).
Enfim, trata-se de algo que considero bastante útil e que resolvi compartilhar por aqui…
Setup Inicial
Especifique a fonte a ser utilizada:
$ cp /Library/Fonts/Arial.ttf ~/.mplayer/subfont.ttf
Escolha a formatação desejada para a fonte:
$ vim .mplayer/config
# Write your default config options here!
ffactor="10" #black outline
sub-bg-alpha="0" #background color ala closed captions
sub-bg-color="0" #black to white
subfont-text-scale="3.7" #truetype font scaling
subfont-blur="1" #Slight blur
Codificação do vídeo
A opção utilzada para referenciar os arquivos de legenda é o -sub <legenda.srt>. Para a renderização da legenda no arquivo de vídeo original, precisaremos re-codificar o stream de vídeo do arquivo. De preferência, com os mesmos parâmetros de codificação do original:
$ mplayer -vo null -frames 0 video.avi
Playing video.avi.
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
VIDEO: [DX50] 640×272 24bpp 25.000 fps 561.6 kbps (68.6 kbyte/s)
========================================================
Opening video decoder: [ffmpeg] FFmpeg’s libavcodec codec family
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
========================================================
========================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 48000 Hz, 2 ch, s16le, 80.0 kbit/5.21% (ratio: 10000->192000)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
========================================================
De posse dos parâmetros de codificação do stream de vídeo do arquivo original, podemos seguir com re-codificação do vídeo incluindo a legenda:
$ mencoder -vf scale=640x272 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=600 -sub "legenda.srt" -o video_com_legenda.avi video.avi
Daí, é aguardar a re-codificação do vídeo e testar ao final:
$ mplayer video_com_legenda.avi
Simples, não?!
(*) neste caso em específico temos a possibilidade de utilizar media servers DLNA que também fazem o streaming com as legendas, mas isso é assunto para outro post…