Konversi Video ke x264/AVC Baseline Profile untuk Android-x86 4.0 RC1 dengan FFMPEG (Ubuntu 11.04)

Berawal dari info release note Android-x86 4.0-RC1 (Ics-x86), penasaran bagaimana rasanya kalau sistim operasi yang banyak dipakai di smartphone vendor-vendor ternama itu bisa terinstal di notebook BenQ  S35 FE13. Berkunjung ke lokasi download Android-x86 4.0-RC1 di http://www.android-x86.org/download sempat bingung juga karena ada beberapa versi yang tersedia di sana, sebutlah beberapa di antaranya: android-x86-4.0-RC1-amd_brazos.iso, android-x86-4.0-RC1-asus_laptop.iso, android-x86-4.0-RC1-eeepc.iso. Setelah coba instal satu persatu dari 3 file iso yang selesai didownload, hanya file android-x86-4.0-RC1-asus_laptop.iso yang sukses instalasi menggunakan partisi ext3.  Hehehe maka tak dilanjutkan mencoba file iso yang lain.

Saat mulai mencoba memainkan video di sistim operasi android versi 4.0 tersebut, ada yang bikin heran. Beberapa file dapat dimainkan, tapi beberapa yang lain tak bisa dimainkan padahal semua file tersebut berekstensi mp4. Setelah muter-muter menelusuri google, ketemu informasi bahwa file mp4 yang mampu dijalankan android adalah jenis mp4 dengan codec MPEG-4 Part 2 Simple Profile (MPEG-4 SP) dan MPEG-4 Part 10 Baseline Profile (H.264/AVC BP). Menurut beberapa sumber kedua jenis codec itu membutuhkan   kecepatan prosesor dan memori yang tak harus tinggi dan memang diperuntukkan buat telepon bergerak, video conferencing, sistim elektronik pengintaian (CCTV) dan sejenisnya.

MPEG-4 (part 2) lebih dahulu diimplementasikan dan lebih “ringan” dari H.264/AVC dari sudut pandang kebutuhan kecepatan prosesor dan memori serta algoritma decodingnya juga  tak sekompleks proses menggunakan codec H.264/AVC. Akan tetapi, H.264/AVC memberikan kualitas yang lebih baik dengan besaran bitrate yang sama. Sebagai pembandingan, MPEG-4 memiliki efesiensi ruang dua kali lipat dari MPEG-2, sedangkan H.264 memiliki efesiensi ruang tiga kali lipat dari MPEG-2.

Berbekal informasi di atas, video-video yang akan diputar pada sistim operasi android yang telah terinstal tersebut selanjutnya akan dikonversi menggunakan codec h264 (x264 untuk versi opennya).  Tentunya ini semua harus bisa sukses menggunakan tool multimedia yang populer digunakan di dunia linux: FFMPEG. (Hmmm…. Masih harus browsing sana-sini mencari informasi mengenai cara konversi ke container mp4 dengan codec x264 baseline profile.)

Sebagai informasi tambahan, encoding x264 bisa menggunakan beberapa jenis profile yang menggambarkan kualitasnya:

  • Baseline Profile (BP) – profil dasar untuk aplikasi-aplikasi dengan sumber daya terbatas seperti aplikasi bergerak (ponsel). Ciri khasnya: tidak mendukung Context-adaptive binary arithmetic coding (CABAC), B-frames, dan i8x8
  • Main Profile (MP) – awalnya direncanakan sebagi profile encoding untuk keperluan video  broadcasting dan video storage
  • High Profile (HP) – profile yang populer untuk  HD video.

Sempat frustasi juga karena beberapa tutorial yang ada di internet tak berjalan sebagaimana mestinya saat dieksekusi di lapangan.  Pada semua tutorial yang sempat dipelajari, setting video option untuk x264 baseline profile pada FFMPEG dengan memanfaatkan file preset libx264-baseline.ffpreset yang berisi:
coder=0
bf=0
flags2=-wpred-dct8x8+mbtree
wpredp=0

Dan (untungnya) entah dari mana berangkatnya, saya keblusuk di suatu forum yang menginformasikan bahwa telah ada perubahan dalam sistim dokumentasi FFMPEG mulai Februari 2012, padahal hampir semua tutorial yang sempat dipelajari ditulis sebelum tahun 2012. (Pantes gak ada yang sukses…. hampir saja menyerah).

From February 2012 up, FFmpeg dramatically thins out the -flags2 options (from 20 to 6). These options are now available as single commands. Most of them are still flags which can be set to 0 (off) or 1 (on).

Old flags2 options               New replacements
——————————————————————-
-flags2 bpyramid             ->  -b-pyramid [none, strict, normal]
-flags2 wpred                ->  -weightb [0, 1]
-flags2 mixed_refs           ->  -mixed-refs [0, 1]
-flags2 dct8x8               ->  -8x8dct [0, 1]
-flags2 fastpskip            ->  -fast-pskip [0, 1]
-flags2 aud                  ->  -aud [0, 1]
-flags2 ivlc                 ->  -intra_vlc [0, 1]
-flags2 drop_frame_timecode  ->  -drop_frame_timecode [0, 1]
-flags2 non_linear_q         ->  -non_linear_quant [0, 1]
-flags2 reservoir            ->  -reservoir [0, 1]
-flags2 mbtree               ->  -mbtree [0, 1]
-flags2 psy                  ->  -psy [0, 1]
-flags2 ssim                 ->  -ssim [0, 1]
-flags2 intra_refresh        ->  -intra-refresh [0, 1]

Dengan sistim dokumentasi terbaru dari FFMPEG, maka setting video option pada encoding x264 dengan baseline profile menjadi:
-coder 0 -bf 0 -weightb 0 -8x8dct 0 -wpredp 0 -mbtree 1

Atau untuk kemudahan, setting option di atas bisa diwakili oleh preset dengan terlebih dahulu membuat file libx264-baseline.ffpreset dengan isi:
coder=0
bf=0
wpredp=0
weightb=0
8x8dct=0
mbtree=1

(File libx264-baseline.ffpreset ditaruh di direktori \home\user-ubuntu-anda\.ffmpeg\)

Setting  -coder 0 -bf 0 -weightb 0 -8x8dct 0 -wpredp 0 -mbtree 1 bisa diwakili oleh -vpre baseline.

Berikut contoh setting ffmpeg untuk encoding x264 baseline profile:

ffmpeg -i /home/zorin/Videos/Somebody-Me-Mart.mp4 -s 1280×720 -vcodec libx264 -coder 0 -bf 0 -weightb 0 -8x8dct 0 -wpredp 0 -mbtree 1 -level 22 -b:v 1500k -acodec libfaac -ab 192k -ac 2 -vol 512 /home/zorin/Videos/Somebody-Me-Mart-baseline-preset.mp4

ffmpeg -i /home/zorin/Videos/4620898.mp4 -vcodec libx264 -vpre baseline -b:v 700k -acodec libfaac -ar 44100 -ab 192k -ac 2 /home/zorin/Videos/Street-of-Philadelphia-baseline.mp4

Semoga bermanfaat…

Leave a comment

Filed under Linux Stuff

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s