Membongkar anatomi FFmpeg: peran tiga komponen ffmpeg, ffprobe, dan ffplay, serta core libraries seperti libavcodec, libavformat, dan libavfilter. Memahami pipeline demux-decode-filter-encode-mux dan konsep stream video, audio, subtitle beserta mapping-nya untuk membaca perintah FFmpeg dengan penuh kesadaran.

Setelah di episode 1 kita memahami sejarah dan alasan keberadaan FFmpeg, pada episode ini kita membongkar mesin di balik perintahnya. Banyak orang menghafal opsi FFmpeg tanpa memahami arsitekturnya, sehingga setiap perintah terasa seperti mantra ajaib yang tak tertebak. Episode ini mengubah itu.
Pahami dulu satu kalimat besar: FFmpeg bukan satu program, melainkan keluarga komponen yang saling terkait — tiga program frontend dan sekumpulan library inti. Begitu kalian memahami peta ini, seluruh opsi FFmpeg akan jatuh ke tempatnya masing-masing.
Saat menginstall FFmpeg, kalian sebenarnya mendapat tiga binary yang bekerja di tiga lapisan berbeda:
| Komponen | Fungsi | Contoh |
|---|---|---|
ffmpeg | Mesin konversi dan transcode | ffmpeg -i in.mp4 out.mkv |
ffprobe | Inspektur media: metadata, stream, durasi, bitrate | ffprobe in.mp4 |
ffplay | Pemutar media untuk verifikasi cepat | ffplay in.mp4 |
Analoginya seperti satu studio produksi: ffprobe adalah asisten yang memeriksa materi mentah, ffmpeg adalah teknisi yang mengolahnya, dan ffplay adalah monitor tempat kalian menonton hasilnya. Ketiganya berbagi library yang sama, jadi apa yang dipelajari di salah satunya selalu berkaitan dengan yang lain.
Verifikasi ketiganya sudah ada di mesin kalian:
ffmpeg -version
ffprobe -version
ffplay -versionDi bawah tiga program di atas, ada enam library inti yang dikompilasi ke dalam binary ffmpeg. Ini adalah "bahan bakar" yang menentukan apa yang bisa dan tidak bisa dilakukan:
| Library | Peran |
|---|---|
libavcodec | Encode dan decode codec: H.264, HEVC, VP9, AV1, AAC, MP3 |
libavformat | Mux dan demux container: MP4, MKV, WebM, TS, dan lainnya |
libavfilter | Filter video dan audio: scale, crop, rotate, dan filtergraph |
libavutil | Utilitas bersama: memory, matematika, hash, dan struktur data |
libswscale | Konversi resolusi dan colorspace antar piksel |
libswresample | Konversi sample rate dan kanal audio |
Saat kalian menulis ffmpeg -i input.mp4 -c:v libx264 output.mkv, itu artinya: libavformat membaca container MP4 (demux), libavcodec mendekode codec asli lalu meng-encode dengan libx264, dan libavformat lagi yang menulis container MKV (mux). Satu perintah, tiga library bekerja bergantian.
Inilah jantung arsitektur FFmpeg — sebuah jalur produksi (pipeline) yang dilewati media dari input hingga output:
Input ---> Demux ---> Decode ---> Filter ---> Encode ---> Mux ---> OutputLima tahap itu adalah bahasa universal FFmpeg. Mari kita bedah satu per satu dengan analogi pabrik roti:
| Tahap | Arti | Analogi |
|---|---|---|
| Demux | Memisah container menjadi stream mentah | Membuka bungkus kemasan |
| Decode | Mengubah data terkompresi jadi frame mentah | Menguleni adonan |
| Filter | Memproses frame: resize, crop, dll | Membentuk dan menghias roti |
| Encode | Mengompresi frame mentah kembali | Memanggang jadi produk jadi |
| Mux | Menggabung stream ke container baru | Memasukkan ke kemasan baru |
Yang penting diingat: kalian bisa memotong pipeline di mana pun. Tanpa filter (-vf), tahap filter dilewati begitu saja. Dengan -c copy, decode dan encode tidak terjadi — data langsung disalin mentah (kita bahas di episode 3).
File media adalah container yang berisi satu atau lebih stream: video, audio, subtitle, dan data. Saat membuka input, FFmpeg memberi setiap stream nomor berlapis — indeks input, lalu indeks stream:
0:0 video pertama dari input pertama
0:1 audio pertama dari input pertama
0:2 subtitle dari input pertama
1:0 video dari input keduaInilah bahasa yang dipakai opsi -map. Saat ini cukup pahami polanya; penggunaan detail -map akan kita bedah pada episode muxing/demuxing. Cara tercepat melihat stream dalam sebuah file:
ffprobe -show_streams sample.mp4Output ffprobe berisi informasi lengkap tiap stream: codec, resolusi, fps, dan kanal audio. Latih membaca perintah berikut — video H.264 640x360 30 fps dan audio AAC stereo:
ffprobe -hide_banner -show_streams -select_streams v sample.mp4ffprobe -hide_banner -show_streams -select_streams a sample.mp4Tip
Biasakan menulis -hide_banner pada perintah seperti ffmpeg -hide_banner -i sample.mp4 dan ffprobe -hide_banner sample.mp4 — output jadi bersih, dan mental kalian fokus ke yang penting: stream, format, dan durasi.
Pada episode 2 ini, kalian telah membongkar anatomi FFmpeg: peran ffmpeg, ffprobe, dan ffplay, peran core libraries seperti libavcodec dan libavformat, pipeline demux-decode-filter-encode-mux, serta konsep stream dan mapping.
Inti yang harus dibawa pulang:
-map.Di episode 3 selanjutnya, kita mulai mengetik perintah sungguhan: perintah dasar dan transcoding — sintaks ffmpeg -i input output, konversi format MP4 ke MKV dan WebM, perbedaan stream copy -c copy dengan re-encode, serta pembacaan metadata lewat ffprobe. Sampai jumpa di episode 3!