Sardylan Site - Guide - MEncoder and ASS subs

Valid XHTML 1.0 Strict Valid CSS Level 3 Valid RSS Optimized for Firefox Apache HTTPD Powered MySQL Powered PHP 5 Powered GNU/Linux Operated Creative Commons License NY-NC-SA 2.5 IT Member of W3C Sites dot com VIM Power



MEncoder and ASS subs

Come fare un Hardsub su Linux codificando con mencoder

Requisiti

L'idea di base

L'idea alla base รจ quella di sfruttare le PIPEs su file e far fare ogni lavoro ad un determinato programma.

Descrizione

Perché complicarsi la vita facendo giri strani? Perché mencoder attualmente (SVN 31217) non supporta il rendering diretto dei subs ASS.
L'unico modo è quello di usare mplayer per fare il rendering, visto che il suo lavoro lo fa davvero bene. Ma mplayer manda l'output solamente sui vari drivers a disposizione, tra cui gl, gl2, xv, x11 etc... Soltanto un driver permette di scrivere su file, ed è yuv4mpeg.
Creando una pipe con il nome stream.yuv (nome di default del file di uscita del driver video, può essere modificato) posso avviare mencoder ed usare come input lo stream generato con mplayer. Ma non so per quale motivo, ottengo degli errori nel filmato di uscita. E' come se ogni colore avesse un framerate diverso. Sembrerebbe un errore di spazio colore.
Facendo vari tentativi, ho notato che ffmpeg è in grado di leggere l'output di mplayer in maniera corretta, visto che dispone di un "formato" diretto. Allora ho pensato di interporre ffmpeg tra mplayer e l'mencoder finale. FFMpeg (SVN 23145) ha però problemi con l'output su pipe a causa del controllo dell'esistenza del file di uscita per evitare le sovrascritture (vedi https://roundup.ffmpeg.org/issue1663). Anche questo è risolvibile usando lo stdout come file di uscita, ed il redirect di bash sulla pipe.
Al termine, con i parametri giusti per leggere l'input, si può usare tranquillamente usare mencoder per la codifica.

Codice

Ecco i comandi bash da usare. Le parti evidenziate in ROSSO non dovrebbero aver bisogno di modifiche.

$ mkfifo stream.yuv
$ mkfifo stream.avi

$ mplayer -vo yuv4mpeg -nosound -noframedrop -sub input.ass -ass -v -fps 25 input.dv
$ ffmpeg -an -f yuv4mpegpipe -r 25 -i stream.yuv -an -vcodec rawvideo -pix_fmt yuv420p -f rawvideo -r 25 - > stream.avi
$ mencoder stream.avi -o video.avi -nosound -demuxer rawvideo -rawvideo fps=25:w=720:h=576:format=i420 -vf harddup,hqdn3d \
-ovc x264 -x264encopts bitrate=1400:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=1:weight_b -aspect 1.9


Fatti un salto su #sardylan @ irc.syrolnet.org...

Visitatore #26856 da Mon, 07 Jun 2010 15:34:36 +0200 | Pagina visitata 542 volte da Wed, 14 Jul 2010 16:51:30 +0200
L'indirizzo IP dal quale ti colleghi è 38.107.179.211 | Thursday 09 February 2012 - 2:51:09