Kompresi video MPEG

Phew, terbukti badai deadline tugas ditambah topan ujian tengah semester membuat blogging jadi sulit. Akhir-akhir ini blog aggregator langsung sepi. Hahaha…

Anyway, topik kali ini berhubungan dengan UTS kemarin, yaitu IF4055 – Sistem Multimedia, yang pesertanya hanya lima orang. Sebagai pembuka, perhatikan contoh ini: saya mempunyai sebuah berkas gambar dengan format JPEG berdimensi 800×600 pixel, dengan ukuran berkas sebesar 161720 byte (sekitar 158 kb, anggaplah 150 kb). Sekarang bayangkan sebuah film bisu dengan dimensi 800×600 pixel, frame rate 25 fps, dan durasi 120 menit. Maka ukuran berkas tersebut seharusnya:

size = (25 frame/detik * (120 menit * 60 detik/menit)) * 150 kb/frame
= (25 frame/detik * 7200 detik) * 150 kb/frame
= 180000 frame * 150 kb/frame
= 27000000 kb
= 26367 Mb
= 25 Gb

25 gigabyte!! Dan itu baru film bisu, artinya di dalamnya tidak terdapat informasi suara. Kita tahu bahwa untuk kualitas yang cukup baik, sebuah lagu berdurasi 3 menit biasanya berukuran sekitar 5 Mb. Tak perlu lah saya hitung lagi untuk durasi 120 menit dan ditambahkan lagi ke video yang besarnya sudah 25 Gb itu. Tetapi kenyataannya film dalam koleksi saya tidak ada yang mencapai ukuran sebesar itu! Yang paling besar pun rasanya tidak sampai 2 Gb.

Mengapa bisa begitu? Tentu saja karena adanya kompresi video. Salah satu teknik kompresi video paling populer adalah MPEG (Moving Picture Experts Group). Bagaimana kompresi dilakukan? Kompresi pada video memanfaatkan temporal redundancy, yaitu kemiripan pixel di posisi yang sama pada frame yang berbeda (berurutan). Contoh nyatanya, bayangkan sebuah tayangan berita. Pada tayangan berita, tidak banyak bagian dari frame yang berubah-ubah, idealnya hanya bagian mulut pembaca berita yang berbeda pada setiap frame. Maka, informasi bagian selain mulut pembaca berita cukup disimpan satu kali.

Cukup teorinya, langsung ke praktis. Pada sebuah video MPEG, terdapat tiga macam frame, yaitu I, P, dan B. I-frame berisi gambar lengkap, mirip dengan sebuah gambar JPEG, sedangkan isi kedua jenis frame yang lain diprediksi berdasarkan frame lain: isi P-frame dibangun berdasarkan frame sebelumnya (baik I-frame maupun P-frame lain), sedangkan isi B-frame dibangun berdasarkan frame sebelum DAN sesudahnya (I-frame ataupun P-frame). Jika sebuah video tidak dikompresi, berarti semua frame-nya adalah I-frame (seperti pada contoh film berukuran 25 Gb di atas).

Apa maksudnya isi frame diprediksi berdasarkan frame lain? Perhatikan contoh dua buah frame berurutan:

dua buah frame berurutan yang menunjukkan segitiga yang berpindah tempat

Dua buah frame berurutan yang menunjukkan segitiga yang berpindah tempat

Dari frame I ke frame II, terdapat objek segitiga yang sama, tetapi berpindah posisi. Nah, frame I disimpan sebagai I-frame yang berisi gambar sebuah segitiga, sedangkan frame II disimpan sebagai P-frame, yang hanya berisi informasi perpindahan posisi segitiga, atau yang disebut dengan motion vector, yang pada gambar berikut ditunjukkan dengan vektor v:

Motion vector v yang terdiri atas vx dan vy

Motion vector v yang terdiri atas vx dan vy

Pada kenyataannya, dalam film biasanya hanya sedikit benda yang hanya berpindah tempat saja. Bagaimana jika benda tidak hanya berpindah tempat, tetapi juga sedikit berubah bentuk? Yang semacam ini banyak terjadi dalam film. Lihat contoh di bawah, segiempat yang bukan hanya berpindah tempat tetapi juga berotasi sebesar 15 searah jarum jam.

Dua frame berurutan yang menampilkan segiempat yang berpindah tempat dan berotasi

Dua frame berurutan yang menampilkan segiempat yang berpindah tempat dan berotasi

Maka yang disimpan bukan hanya motion vector, tetapi juga prediction error compensation:

Prediction error compensation

Prediction error compensation

Jadi, hasil akhir gambar (resulting picture) yang akan ditampilkan pada frame tersebut adalah

resulting_picture = (I_frame + motion_vector) + prediction_error_compensation

Bagaimana jika dalam frame terdapat lebih dari satu buah objek, masing-masing bergerak ke arah yang berbeda? Kedua contoh di atas merupakan contoh konsep. Pada penerapannya, motion vector dan prediction error compensation bukan untuk satu frame. Sebuah frame dibagi lagi menjadi block-block yang biasanya berukuran 16×16 pixel. Setiap block ini memiliki informasi motion vector dan prediction error compensation sendiri. Jadi, objek-objek yang terdapat pada block yang berbeda dalam frame yang sama bisa saja bergerak ke arah yang berbeda.

Terakhir, bagaimana jika perubahan yang terjadi terlalu banyak? Pada pergantian scene, misalnya? Mudah. Simpan saja sebagai I-frame (gambar lengkap), dari pada buang-buang ruang untuk menyimpan motion vector dan prediction error compensation yang akan menjadi besar karena perubahannya banyak, dan proses prediksi isi frame juga akan menjadi lambat sehingga pada pemutaran film dapat terjadi lagging.

Ternyata begitulah konsep kompresi video! Sebelum mengambil mata kuliah IF3055 – Sistem Operasi, tidak pernah terbayangkan oleh saya. Dan di kuliah IF4055 – Sistem Multimedia, hal ini dikupas lebih dalam lagi.

Iklan

6 thoughts on “Kompresi video MPEG

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s