Memilih codec dengan kesadaran penuh: H.264, H.265/HEVC, VP9, dan AV1, menguasai opsi -c:v, -crf, -preset, dan -b:v, memahami strategi two-pass, serta mengatur resolusi, fps, dan GOP untuk menyeimbangkan kualitas dengan ukuran file.

Setelah di episode 3 kalian bisa menjalankan transcode pertama — konversi format dan stream copy — episode ini masuk ke jantung kualitas: encoding video. Di sinilah perbedaan antara hasil "bisa diputar" dan hasil "layak produksi" ditentukan.
Kalian tidak akan menghafal semua opsi FFmpeg; yang kalian butuhkan adalah model mental yang benar. Bayangkan encoding seperti menyetel mesin kopi: ada beberapa parameter yang saling berhubungan, dan kalian harus tahu mana yang diputar dulu, mana yang dikorbankan, dan mana yang tidak boleh disentuh asal-asalan.
Di episode 0 kalian belajar bahwa codec adalah algoritma kompresi. Sekarang kita lihat empat codec video yang paling sering kalian temui dan encoder-nya di FFmpeg:
| Codec | Encoder FFmpeg | Karakteristik |
|---|---|---|
| H.264 / AVC | libx264 | Paling luas didukung, standar web dan mobile |
| H.265 / HEVC | libx265 | Kompresi lebih baik, dukungan lebih selektif |
| VP9 | libvpx-vp9 | Open, unggul di browser dan YouTube |
| AV1 | libaom-av1, libsvtav1 | Kompresi paling tinggi, encoding lambat |
Pilihannya seperti memilih bahasa: H.264 adalah bahasa universal yang dipahami semua perangkat; HEVC lebih hemat ruang tapi tidak semua pemutar memahaminya; AV1 paling irit untuk kualitas yang sama, tapi butuh tenaga komputasi jauh lebih besar saat encode. Untuk konten umum, H.264 masih juara kompatibilitas.
Cek encoder apa saja yang tersedia di build kalian:
ffmpeg -encoders | grep -E "libx264|libx265|libvpx-vp9|libsvtav1"Untuk melihat seluruh opsi sebuah encoder, jalankan ffmpeg -h encoder=libx264 — daftar parameter lengkap beserta deskripsinya.
Opsi -c:v memilih codec video; -c:a untuk audio. Perintah lengkapnya:
ffmpeg -i sample.mp4 -c:v libx264 -crf 18 -preset slow out-h264.mp4ffmpeg -i sample.mp4 -c:v libsvtav1 -crf 30 -preset 8 out-av1.mp4Perhatikan pasangan -crf dan -preset yang selalu menyertai libx264 — inilah dua tuas utama yang wajib kalian pahami.
CRF (Constant Rate Factor) adalah cara paling intuitif mengontrol kualitas: nilai lebih kecil = kualitas lebih tinggi = file lebih besar. Skala khasnya:
| CRF | Kesan |
|---|---|
| 18 | Kualitas nyaris tak hilang (visual lossless) |
| 23 | Kualitas default libx264, seimbang |
| 28 | Lebih kecil, mulai terlihat penurunan |
| 30+ | Kecil, kualitas kompromi untuk web |
CRF bersifat konstan: FFmpeg menambah bitrate di adegan kompleks dan menguranginya di adegan tenang. Analoginya seperti juru kamera yang menyesuaikan kompresi agar tiap momen selalu terlihat baik — bukan memakai satu setting kaku untuk seluruh video.
-preset mengatur kompromi kecepatan vs efisiensi. Preset lebih lambat memberi kompresi lebih baik pada ukuran file yang sama:
| Preset | Arah | Efek |
|---|---|---|
ultrafast, fast | Cepat | Ukuran lebih besar |
medium | Seimbang | Default libx264 |
slow, veryslow | Lambat | Ukuran lebih kecil |
Untuk hasil akhir yang disimpan, -preset slow biasanya worth it. Untuk preview atau pengujian cepat, pakai -preset fast. Sekali lagi: pilih sesuai situasi, bukan kebiasaan.
CRF bagus untuk file lokal karena ia mengejar kualitas. Tapi untuk streaming dengan target bitrate tertentu — misal maksimal 2 Mbps di atas jaringan terbatas — kalian butuh mode bitrate:
ffmpeg -i sample.mp4 -c:v libx264 -b:v 2M -maxrate 2.5M -bufsize 5M out-2mbps.mp4Kualitas mode ini menurun pada adegan kompleks — bitrate dipatok, sehingga kualitas "menyerah". Untuk hasil terbaik dalam mode bitrate, pakai two-pass: pass pertama memetakan kompleksitas video, pass kedua mengalokasikan bitrate secara optimal:
ffmpeg -y -i sample.mp4 -c:v libx264 -b:v 2M -pass 1 -an -f null /dev/nullffmpeg -i sample.mp4 -c:v libx264 -b:v 2M -pass 2 out-2pass.mp4Pass pertama hanya menganalisis tanpa menghasilkan file video (diarahkan ke -f null /dev/null), lalu pass kedua memakai hasil analisis itu. Hasilnya: kualitas terbaik untuk bitrate tertentu — standar di industri untuk distribusi dengan target bandwidth.
Selain codec dan bitrate, tiga pengaturan ini menentukan karakter video keluaran:
| Setting | Opsi | Fungsi |
|---|---|---|
| Resolusi | -vf scale | Mengubah dimensi piksel, misal 640x360 |
| Frame rate | -r | Menetapkan fps output |
| GOP | -g | Jarak antar keyframe (frame I) |
Contoh gabungan: turunkan ke 480p, tetap 30 fps, dan GOP 250 (tiap sekitar 8 detik pada 30 fps):
ffmpeg -i sample.mp4 -c:v libx264 -crf 23 -preset slow -vf scale=854:480 -r 30 -g 250 out-480p.mp4GOP penting untuk streaming: keyframe adalah "titik masuk" baru bagi pemirsa — GOP yang terlalu panjang membuat seek atau stream join lebih lambat. Detail mendalam soal keyframe dan streaming kita bahas di episode HLS.
Semua opsi di atas ujungnya bermuara pada satu keseimbangan: kualitas vs ukuran. Tidak ada pengaturan yang "paling benar" — semuanya bergantung pada tujuan:
| Skenario | Rekomendasi |
|---|---|
| Arsip master | H.264 CRF 18, preset slow |
| Distribusi web | H.264 CRF 23-28, preset medium-slow |
| Streaming bitrate terbatas | Two-pass dengan target -b:v |
| Konten 4K hemat ruang | AV1 dengan libsvtav1 |
Tip
Aturan praktis yang sehat: simpan master tanpa encode ganda (CRF rendah), dan hasilkan turunan dari master itu. Meng-encode ulang file yang sudah di-encode menumpuk cacat — setiap generasi copy menurunkan kualitas, persis seperti fotokopi fotokopi.
Pada episode 4 ini, kalian telah menguasai peta encoding video: memilih codec H.264, H.265/HEVC, VP9, dan AV1, mengontrol kualitas lewat -crf dan -preset, memahami mode bitrate -b:v dan two-pass, serta mengatur resolusi, fps, dan GOP.
Inti yang harus dibawa pulang:
-c:v memilih codec; -crf rendah = kualitas tinggi = file besar.-preset menukar kecepatan dengan efisiensi — slow untuk hasil akhir.scale), fps (-r), dan GOP (-g) menentukan karakter video.Di episode 5 selanjutnya, kita masuk ke dunia filter dasar — scale, crop, rotate, fps, trim, dan setpts — beserta cara menyusun filter chain dengan -vf untuk memproses video secara presisi. Sampai jumpa di episode 5!