Sono anni che tribolo con la conversione dei file AVI.
Già in un altro articolo ho trattato in parte questo argomento; consiglio di leggerlo per convertire gli AVI in MPG, formato supportato dai DVB (quelli economici non aprono gli AVI, in genere) che possiedono entrata USB.
In questo articolo voglio invece soffermarmi sulla conversione degli AVI in modo che siano leggibili da quella schiera di dispositivi che li supportano, come i Lettori DVD e i televisori di livello medio/alto (non sempre, a volte anche su modelli da pochi euro è supportato l’AVI).
Io opero le conversioni su Linux, tuttavia, i software che tratterò mi risulta siano disponibili anche su Windows (e forse pure Mac OS X, anche se non penso che gli utenti di questi sistemi operativi abbiano necessità di leggere qui).
Una premessa: ho realizzato una serie di script che automatizzano quanto esposto di seguito; se qualcuno è interessato può scaricare uda video converter.
Dunque, per convertire, sono solito utilizzare 2 software: mplayer e ffmpeg.
Il primo sarebbe un Player Multimediale, ma io sfrutto la parte dedicata alla conversione: mencoder.
La mia esperienza nella conversione dice sostanzialmente una cosa: tutti i dispositivi in grado di riprodurre file AVI si aspettano che il file sia codificato in MPEG4/mp3.
Non è sempre vero, a volte ad esempio è supportato anche il formato audio AC3 e altri codec video, tuttavia solo con l’accoppiata citata sopra ritengo si abbia la garanzia che il filmato sarà riproducibile ovunque.
Devo sottolineare una cosa: il mio obiettivo è quello di rendere i file riproducibili ovunque e con una qualità decorosa.
Questo significa che comunque è possibile ci sia una perdita di qualità rispetto all’originale. Spesso capita anche una perdita della sincronizzazione audio; i comandi che propongo di seguito hanno lo scopo di mitigare questo fenomeno, ma non sempre funziona.
Io controllo sempre, dopo la conversione, i filmati per verificare che:
- L’Audio sia sincronizzato all’inizio, in mezzo e alla fine.
- L’Audio sia ad un volume adeguato e si senta in modo decente.
- Il video sia accettabile.
- Sia presente l’inizio e la fine (cioè che non si tronchi prima del previsto)
- Sia possibile “andare avanti e indietro nel video”, un po’ come si faceva con il registratore a cassette (non sempre è possibile farlo se l’AVI non è trattato opportunamente).
Con questo modo di fare, dettato dalla pluriennale pratica, riesco ora a limitare i fallimenti ad una percentuale bassissima (direi non oltre il 5%).
Ma veniamo ai comandi da usare (rigorosamente a terminale, mi spiace, non uso interfacce grafiche); il primo ci serve per ottenere informazioni sul video:
ffmpeg -i nomefile.avi
che dovrebbe restituire qualcosa di simile a questo:
FFmpeg version SVN-r25767, Copyright (c) 2000-2010 the FFmpeg developers built on Mar 8 2011 21:48:23 with gcc 4.3.4 configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --enable-static --enable-shared --cc=i686-pc-linux-gnu-gcc --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --disable-stripping --disable-debug --disable-doc --disable-vaapi --disable-static --enable-runtime-cpudetect --disable-vdpau --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-libfaac --enable-nonfree --enable-libdc1394 --enable-x11grab --enable-pthreads --enable-libopencore-amrwb --enable-libopencore-amrnb --enable-libvpx --disable-altivec --cpu=pentium4 --enable-hardcoded-tables libavutil 50.33. 0 / 50.33. 0 libavcore 0.13. 0 / 0.13. 0 libavcodec 52.96. 0 / 52.96. 0 libavformat 52.84. 0 / 52.84. 0 libavdevice 52. 2. 2 / 52. 2. 2 libavfilter 1.62. 0 / 1.62. 0 libswscale 0.12. 0 / 0.12. 0 libpostproc 51. 2. 0 / 51. 2. 0 Input #0, avi, from 'nomefile.avi': Metadata: encoder : MEncoder SVN-r32624-4.3.4 Duration: 01:56:37.96, start: 0.000000, bitrate: 938 kb/s Stream #0.0: Video: mpeg4, yuv420p, 640x272 [PAR 1:1 DAR 40:17], PAR 34816:34815 DAR 16384:6963, 25 tbr, 25 tbn, 25 tbc Stream #0.1: Audio: mp3, 48000 Hz, 1 channels, s16, 125 kb/s At least one output file must be specified
Le righe che ci interessano sono le ultime, dove iniziano con “Stream”; una è dedicata al video e l’altra all’audio.
Come si può notare, abbiamo che il file AVI in oggetto è stato codificato in mpeg4/mp3, che è quello che vogliamo ottenere. Se il vostro video non è così, significa che la strada può essere in salita perché si rende necessario la ri-codifica.
A seconda di come è stato codificato il file AVI sorgente dovremo infatti decidere come procedere. Di seguito espongo come procedo io.
AVI Codificato mpeg4/mp3
È la situazione più semplice che possiamo trovare; non dobbiamo ri-codificare nulla, ma solo accertarci che l’AVI contenga le informazioni corrette per essere riconosciuto dai vari “player”.
Il comando che uso per trattare questi file è:
mencoder input_file.avi -noskip -noencodedups -forceidx -ovc copy -oac copy -ffourcc DX50 -of avi -af volnorm=2:0.2 -o output_file.avi
Forza la creazione dell’indice (necessario per fare il seek avanti e indietro), la scrittura del codice “DX50” (mi è capitato player che senza non riconoscevano comunque il file) e la normalizzazione del volume (spesso l’audio è “conciato male”, questo parametro in genere aiuta).
Nel caso in cui il volume sia troppo basso, consiglio di correggerlo con questa alternativa:
mencoder input_file.avi -noskip -noencodedups -forceidx -ovc copy -oac mp3lame -lameopts vol=2 -ffourcc DX50 -of avi -af volnorm=2:0.2 -o output_file.avi
AVI Codificato mpeg4 ma audio non mp3
Qui già si rischia di perdere la sincronizzazione, lo dico subito. Dobbiamo ricodificare il solo audio; per farlo usiamo:
mencoder input_file.avi -noskip -noencodedups -forceidx -ovc copy -oac mp3lame -ffourcc DX50 -of avi -mc 0 -af channels=1 -o output_file.avi
se l’audio è basso, possiamo aumentarlo con:
mencoder input_file.avi -noskip -noencodedups -forceidx -ovc copy -oac mp3lame -lameopts vol=2 -ffourcc DX50 -of avi -mc 0 -af volnorm=2:0.2 -af channels=1 -o output_file.avi
AVI non codificato in mpeg4/mp3
In questo caso la ricodifica è totale e ci dobbiamo aspettare il risultato peggiore; ciò significa che dovremo controllare con cura il risultato.
Il comando che uso io in genere è questo:
mencoder input_file.avi -noskip -noencodedups -forceidx -ovc lavc -oac mp3lame -lavcopts vcodec=mpeg4:mbd=2:autoaspect -lameopts vol=2 -ffourcc DX50 -of avi -mc 0 -af volnorm=2:0.2 -af channels=1 -o output_file.avi
Se proprio l’audio è già in mp3 ed il volume è a posto, possiamo tentare anche:
mencoder input_file.avi -noskip -noencodedups -forceidx -ovc lavc -oac copy -lavcopts vcodec=mpeg4:mbd=2:autoaspect -ffourcc DX50 -of avi -o output_file.avi
Conversione AVI per Smartphone
Ultimamente mi diverto a guardare i film anche sul telefono; può essere divertente, durante un viaggio, guardarsi qualcosa, anziché limitarsi ad ascoltare musica o quant’altro.
Io possiedo un Samsung Wave S5330 e ottengo buoni risultati convertendo con questo comando:
ffmpeg -i "input_file.avi" -s qcif -vcodec h263 -acodec libfaac -ac 1 -ar 8000 -r 25 -ab 12200 -y "output_file.3gp"
Sui cellulari il formato – principalmente – supportato è il 3gp; volendo è supportato anche l’mp4 ma, onestamente, non mi sono ancora cimentato, per pigrizia ho accettato il primo risultato soddisfacente.