Pelajari cara memindahkan beban encoding dari CPU ke GPU memakai NVENC, VAAPI, QSV, AMF, dan VideoToolbox, serta jelajahi tren 2026 dengan encoder Vulkan dan D3D12 di FFmpeg.

Di episode 14 kalian melihat satu perintah FFmpeg bisa menghasilkan tiga variant HLS sekaligus. Keren, tapi ada biayanya: tiga encoder libx264 berjalan bersamaan akan memeras CPU. Pada 1080p 30 fps itu mungkin masih bisa, tapi coba 4K, atau 60 fps, atau dua belas variant — CPU akan menjadi bottleneck dan kalian mulai menghitung berapa lama tiap transcode selesai.
Di sinilah hardware acceleration masuk. GPU bukan hanya untuk game; chip video modern punya sirkuit khusus untuk meng-encode dan men-decode video yang jauh lebih cepat dan lebih hemat daya daripada CPU. Episode 15 ini akan membedah berbagai antarmuka akselerasi di FFmpeg — NVENC, VAAPI, QSV, AMF, VideoToolbox, dan D3D12 — plus tren terbaru 2026 yang memakai Vulkan. Tujuannya bukan menghafal semua flag, melainkan memahami jalan mana yang tersedia di mesin kalian dan kapan layak dipakai.
Sebelum memilih encoder, penting memahami bahwa GPU menangani video melalui dua mekanisme yang berbeda:
Fixed-function block. Sejak sekitar 2012, GPU dilengkapi sirkuit keras khusus untuk H.264/H.265/AV1 encode dan decode. Sirkuit ini tidak fleksibel — hanya bisa mengerjakan codec tertentu — tapi sangat cepat dan sangat hemat daya. Inilah yang dipakai NVENC, QSV, AMF, dan block encoder lainnya.
Compute shader. GPU juga bisa diprogram umum lewat komputasi paralel — kumpulan core yang mengerjakan ribuan operasi sekaligus. Mekanisme ini dipakai untuk memproses codec yang tidak punya fixed-function block (seperti ProRes atau DPX), dan menjadi bahan tren 2026 yang akan kita bahas di akhir episode.
Konsekuensi praktisnya: kecepatan GPU hampir tidak bergantung pada resolusi atau framerate seperti pada CPU. Meng-encode 4K dengan NVENC sering kali tidak jauh lebih lambat daripada 1080p — kapasitasnya ditentukan oleh jumlah engine encode, bukan kekuatan core.
Jangan pernah berasumsi encoder tersedia. Setiap FFmpeg dibangun dengan konfigurasi berbeda, dan setiap GPU punya kemampuan berbeda. Dua perintah berikut adalah kebiasaan pertama yang harus kalian miliki:
ffmpeg -hwaccels
ffmpeg -encoders | grep -i nvenc
ffmpeg -encoders | grep -i qsv-hwaccels menampilkan hwaccel yang tersedia (untuk decode), dan `-encoders | grep -i nvenc{:bash}` memfilter encoder hardware berdasarkan nama. Jika encoder tidak muncul, jangan menebak — FFmpeg kalian memang tidak dibangun dengan dukungan itu, atau driver tidak terdeteksi.
NVENC adalah engine encode keras di GPU NVIDIA, dan salah satu yang paling mudah dipakai di FFmpeg:
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p6 -rc vbr -cq 23 -b:v 0 output.mp4-preset p6 memilih preset kualitas-versus-kecepatan (p1 paling cepat, p7 paling lambat dan terbaik).-rc vbr memakai mode variable bitrate; -cq 23 menargetkan kualitas (semakin kecil semakin bagus), dan -b:v 0 menonaktifkan target bitrate sehingga CQ murni yang menentukan.hevc_nvenc dan av1_nvenc untuk codec yang lebih baru.Untuk pipeline yang seluruhnya di GPU, tambahkan -hwaccel cuda agar decode juga berjalan di GPU dan frame tidak bolak-balik lewat memori sistem. Jika ada scaling, gunakan scale_cuda alih-alih scale biasa — filter berbasis CUDA mempertahankan frame tetap di GPU.
VAAPI (Video Acceleration API) adalah standar akselerasi video di Linux yang mendukung GPU Intel dan AMD sekaligus. Titik masuknya adalah device node render, biasanya /dev/dri/renderD128:
ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf format=nv12,hwupload -c:v h264_vaapi -b:v 4M output.mp4Perhatikan pola format=nv12,hwupload: frame hasil decode di CPU diubah ke format yang didukung hardware, lalu diunggah ke GPU dengan filter hwupload. Ini adalah pola wajib di jalur VAAPI — lupa hwupload adalah kesalahan nomor satu saat memakai VAAPI.
Tip
Di server tanpa monitor, pastikan user yang menjalankan FFmpeg punya akses ke /dev/dri/renderD128 — biasanya lewat grup video atau render. Jika muncul error "Cannot open /dev/dri/renderD128", masalahnya hampir selalu permission, bukan konfigurasi FFmpeg.
QSV adalah teknologi akselerasi Intel. Di Windows ia memakai driver Intel yang bercokol, sedangkan di Linux ia berjalan di atas VAAPI — jadi butuh device yang sama:
ffmpeg -init_hw_device qsv=hw:/dev/dri/renderD128 -i input.mp4 -vf hwupload=extra_hw_frames=64,format=qsv -c:v h264_qsv -b:v 4M output.mp4-init_hw_device qsv=hw:/dev/dri/renderD128 membuat device QSV yang membungkus device VAAPI. Alokasi extra_hw_frames=64 memberi encoder ruang antrean frame di VRAM — nilai ini mencegah beberapa encoder QSV mogok saat beban tinggi.
AMF (Advanced Media Framework) adalah API akselerasi AMD. Di FFmpeg, encoder-nya adalah h264_amf dan hevc_amf. Di Windows pemakaiannya langsung:
ffmpeg -i input.mp4 -c:v h264_amf -b:v 4M -usage lowlatency output.mp4Di Linux, dukungan AMF lebih terbatas dan bergantung pada generasi GPU serta driver; untuk GPU AMD di Linux, jalur VAAPI biasanya tetap pilihan paling andal.
macOS menyediakan VideoToolbox, API akselerasi sistem yang dibungkus encoder h264_videotoolbox dan hevc_videotoolbox:
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -b:v 5M -allow_sw 1 output.mp4Tidak ada setup device seperti di Linux — VideoToolbox memakai GPU yang sedang aktif secara otomatis. -allow_sw 1 mengizinkan fallback ke software jika codec tidak didukung hardware.
Windows memiliki dua generasi API grafik: D3D11 (lama) dan D3D12 (modern). Sejak FFmpeg 8.1, encoder berbasis D3D12 tersedia untuk H.264, HEVC, dan AV1:
ffmpeg -i input.mp4 -c:v av1_d3d12va -b:v 5M output.mp4Encoder D3D12 memakai API modern Windows 10/11 dan cocok untuk pipeline yang juga memakai filter berbasis D3D12 seperti scale_d3d12. Ini adalah jalur akselerasi yang paling relevan di era baru, bersama dengan tren Vulkan di bawah.
Pertanyaan yang paling sering muncul: kalau GPU jauh lebih cepat, kenapa ada orang masih memakai libx264? Jawabannya ada di satu kata: kualitas. Encoder software seperti libx264 dan libx265 menghabiskan ratusan siklus CPU per frame dan menghasilkan kualitas lebih baik pada bitrate yang sama — atau ukuran lebih kecil pada kualitas yang sama. Encoder hardware mencapai target kecepatan dengan kualitas yang "cukup bagus".
| Kebutuhan | Rekomendasi |
|---|---|
| Transcode batch besar, deadline ketat | Hardware (NVENC, VAAPI, dll.) |
| Kualitas tertinggi, bitrate terbatas, arsip | Software (libx264, libx265) |
| Live streaming dengan banyak variant | Hardware |
| Master / mezzanine untuk pasca-produksi | Software atau format lossless |
Aturan praktis yang sehat: untuk master yang akan diproses lagi atau diarsipkan, investasikan waktu CPU. Untuk delivery yang harus cepat dan dalam jumlah besar, pakai GPU. Banyak tim produksi melakukan dua kali: encode lambat untuk master, encode cepat untuk distribusi.
Warning
"Nvidia encoder" bukan berarti hasilnya selalu identik — kualitas encoder hardware berbeda antar generasi GPU dan antar vendor. Jika output akan dinikmati banyak orang, jangan pernah mengadopsi encoder hardware tanpa membandingkan hasilnya di satu atau dua scene yang sulit (gerakan cepat, gradasi halus, teks kecil). Pengukuran subjektif di scene yang tepat lebih berharga daripada benchmark FPS.
Sejak dirilisnya FFmpeg 8.1 pada awal 2026, arah akselerasi hardware bergeser ke sesuatu yang lebih terbuka dan fleksibel: Vulkan. Vulkan adalah API grafis modern yang didukung hampir semua GPU dari semua vendor, sehingga satu implementasi FFmpeg bisa berjalan di banyak merek sekaligus.
Encoder fixed-function Vulkan. Di master FFmpeg, encoder H.264 dan H.265 berbasis Vulkan Video sudah hadir (h264_vulkan, hevc_vulkan), mengarah ke rilis stabil berikutnya. Ini membawa akselerasi encode ke GPU yang tidak memiliki jalan NVENC/QSV/AMF — termasuk beberapa iGPU dan SoC.
Encoder D3D12 stabil. Di FFmpeg 8.1, encoder H.264 dan AV1 berbasis D3D12 sudah stabil untuk Windows, membuka jalur akselerasi yang lebih modern dari D3D11/DXVA2.
Vulkan compute untuk codec tanpa hardware. Inovasi paling menarik ada di sisi compute shader. FFmpeg 8.1 menghadirkan encode dan decode ProRes, decode ProRes RAW, decode DPX, serta encode-decode FFv1 yang dijalankan lewat compute shader Vulkan. Mengapa penting? ProRes dan DPX adalah standar industri pasca-produksi yang tidak pernah punya fixed-function block di GPU mana pun. Dengan compute shader, semua GPU yang mendukung Vulkan bisa mempercepat codec profesional ini tanpa hardware khusus. Encoder-nya diberi nama prores_ks_vulkan dan ffv1_vulkan.
Artinya: dulu pemrosesan ProRes 8K membutuhkan workstation kelas server dengan puluhan core; sekarang, pekerjaan serupa bisa berjalan di GPU konsumen yang tersebar luas. Batas "berapa yang bisa dipercepat" tidak lagi ditentukan oleh sirkuit keras yang sudah tua, tapi oleh kualitas implementasi shader yang terus diperbaiki.
Tip
Untuk melihat apakah FFmpeg kalian dibangun dengan dukungan Vulkan: ffmpeg -filters | grep vulkan, dan ffmpeg -encoders | grep vulkan. Dukungan Vulkan juga bergantung pada driver dan perpustakaan Vulkan loader di sistem. Pada FFmpeg yang dibangun dengan benar di Linux, jalur ini bisa dipakai NVIDIA, AMD, dan Intel secara bergantian tanpa mengubah perintah.
Pada episode 15 ini kalian telah menjelajahi peta akselerasi hardware di FFmpeg: membedakan fixed-function block dan compute shader, memeriksa dukungan dengan -encoders, memakai NVENC di NVIDIA, VAAPI untuk Intel/AMD di Linux, QSV untuk Intel, AMF untuk AMD, VideoToolbox di macOS, dan D3D12 di Windows modern. Kalian juga memahami trade-off kualitas antara encoder hardware dan software, serta tren 2026 di mana Vulkan membuka akselerasi untuk codec profesional seperti ProRes lewat compute shader.
Poin kunci yang perlu dibawa pulang:
-encoders sebelum memakai encoder hardware; jangan berasumsi.hwupload agar frame sampai ke GPU.Setelah encode dan packaging dikuasai, tinggal satu dimensi kualitas yang sering dianggap sepele padahal menentukan seluruh tampilan video: warna.
Di episode 16 berikutnya kita akan membahas HDR & Color Handling — HDR10 dan HLG, filter zscale dan tonemap, konversi HDR ke SDR, serta metadata warna yang menentukan bagaimana video kalian benar-benar terlihat. Pastikan tetap semangat!