Altro articolo tecnico, sempre focalizzato sul tema della manipolazione video.
Use case of the day: abbiamo visto un fantastico video su YouTube, e vogliamo copiarlo sul cellulare, in modo da averlo sempre con noi. Ad esempio, prendiamo questo video, che mostra l’unica esibizione degli Automatic Babies, ossia metà U2 e metà REM che si sono incontrati per caso da qualche parte negli anni ’90, e hanno improvvisato una versione di One, che nulla ha a che spartire con l’obbrobrio con Mary J. Blige che gira oggi, e su cui ho già espresso (s)considerazioni qualche tempo fa.
Il primo problema consiste nello scaricare il video, dato che YouTube, normalmente non lo permette. Ma non ci vuole molto: basta munirsi di Firefox, browser che forse è il più famoso esempio di software libero, e della sua estensione VideoDownloader. Questa aggiungerà un’icona in basso a destra nella barra di stato, mediante la quale potremo facilmente scaricare qualunque video da YouTube, in formato FLV (FLash Video), che potremo visionare, ad esempio, col solito MPlayer.
Il passo successivo consiste nella conversione del video in un formato consono al cellulare. I cellulari moderni, solitamente, sono in grado di riprodurre video in formato 3GPP. Tale formato è, in realtà, solo un contenitore. Dentro, infatti, possiamo trovare uno stream video in formato MPEG-4 o H.263, e uno stream audio in formato AMR o AAC. Grazie al solito FFmpeg potremmo ignorare del tutto questi dettagli, ma in realtà ci saranno utili per ottenere un risultato migliore. Infatti, il formato AAC è di gran lunga migliore di quello AMR, e dato che stiamo encodando un video musicale, non conviene lesinare più di tanto sull’audio. Lanciamo quindi il seguente comando:
sukko@unholycathedral ~ $ ffmpeg -i ab.flv -s qcif -acodec aac ab.3gp
FFmpeg version SVN-r6159, Copyright (c) 2000-2004 Fabrice Bellard
configuration: --prefix=/usr --enable-gpl --enable-mp3lame --enable-libogg --enable-vorbis --enable-faad --enable-faac --enable-libgsm --enable-xvid --enable-a52 --enable-pp --enable-shared --enable-pthreads --enable-amr_nb --enable-amr_wb
libavutil version: 49.0.0
libavcodec version: 51.12.0
libavformat version: 50.5.0
built on Sep 4 2006 01:32:39, gcc: 3.4.6
Seems that stream 1 comes from film source: 1000.00 (1000/1) -> 29.97 (30000/1001)
Input #0, flv, from 'ab.flv':
Duration: 00:04:19.6, bitrate: N/A
Stream #0.0: Audio: mp3, 22050 Hz, mono
Stream #0.1: Video: flv, yuv420p, 320x240, 29.97 fps(r)
Output #0, 3gp, to 'ab.3gp':
Stream #0.0: Video: h263, yuv420p, 176x144, q=2-31, 200 kb/s, 29.97 fps(c)
Stream #0.1: Audio: aac, 22050 Hz, mono, 64 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding
frame= 1936 q=5.9 size= 2053kB time=64.5 bitrate= 260.7kbits/s
Penso sia abbastanza semplice da capire, dato che usiamo solo due opzioni: -s qcif serve a ridimensionare il video. Infatti, il formato H.263 accetta solo alcune risoluzioni, e qcif, nella fattispecie, è il “nomignolo” di 176×144 (avrei potuto scrivere direttamente 176×144, ma i numeri giusti non me li ricordo mai, mentre qcif mi è stato facile da memorizzare :)). -acodec aac mi pare ancora più banale: indica semplicemente a FFmpeg di utilizzare il formato AAC per l’audio, come avevamo stabilito, dato che di default utilizzerebbe il formato AMR.
Tempo pochi secondi, e il nostro file 3GPP è pronto per essere inviato al cellulare, mediante Bluetooth o una normale connessione USB.