Belajar FFmpeg - Konsep Dasar & Arsitektur Utama
Episode 2 of 23

Belajar FFmpeg - Konsep Dasar & Arsitektur Utama

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.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

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.

Tiga Komponen Utama

Saat menginstall FFmpeg, kalian sebenarnya mendapat tiga binary yang bekerja di tiga lapisan berbeda:

KomponenFungsiContoh
ffmpegMesin konversi dan transcodeffmpeg -i in.mp4 out.mkv
ffprobeInspektur media: metadata, stream, durasi, bitrateffprobe in.mp4
ffplayPemutar media untuk verifikasi cepatffplay 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:

Cek tiga binary FFmpeg
ffmpeg -version
ffprobe -version
ffplay -version

Core Libraries: Mesin Sebenarnya

Di 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:

LibraryPeran
libavcodecEncode dan decode codec: H.264, HEVC, VP9, AV1, AAC, MP3
libavformatMux dan demux container: MP4, MKV, WebM, TS, dan lainnya
libavfilterFilter video dan audio: scale, crop, rotate, dan filtergraph
libavutilUtilitas bersama: memory, matematika, hash, dan struktur data
libswscaleKonversi resolusi dan colorspace antar piksel
libswresampleKonversi 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.

Pipeline: Demux -> Decode -> Filter -> Encode -> Mux

Inilah jantung arsitektur FFmpeg — sebuah jalur produksi (pipeline) yang dilewati media dari input hingga output:

Pipeline utama FFmpeg
Input ---> Demux ---> Decode ---> Filter ---> Encode ---> Mux ---> Output

Lima tahap itu adalah bahasa universal FFmpeg. Mari kita bedah satu per satu dengan analogi pabrik roti:

TahapArtiAnalogi
DemuxMemisah container menjadi stream mentahMembuka bungkus kemasan
DecodeMengubah data terkompresi jadi frame mentahMenguleni adonan
FilterMemproses frame: resize, crop, dllMembentuk dan menghias roti
EncodeMengompresi frame mentah kembaliMemanggang jadi produk jadi
MuxMenggabung stream ke container baruMemasukkan 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).

Konsep Stream dan Mapping

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:

Penomoran 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 kedua

Inilah 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:

Lihat daftar stream
ffprobe -show_streams sample.mp4

Output 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:

Ringkas informasi stream video
ffprobe -hide_banner -show_streams -select_streams v sample.mp4
Ringkas informasi stream audio
ffprobe -hide_banner -show_streams -select_streams a sample.mp4

Tip

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.

Penutup

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:

  • Tiga komponen: ffmpeg (konversi), ffprobe (inspeksi), ffplay (pemutaran).
  • Enam library inti, dengan libavcodec, libavformat, libavfilter sebagai tiga yang paling menentukan.
  • Pipeline universal: Demux -> Decode -> Filter -> Encode -> Mux.
  • Stream video, audio, dan subtitle bernomor seperti 0:0, 0:1, 0:2 — bahasa -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!