- Meta menjalankan puluhan miliar eksekusi FFmpeg per hari dan berhasil beralih sepenuhnya ke FFmpeg upstream alih-alih terus memakai versi fork internal
- Untuk menutup kesenjangan fitur antara fork internal dan versi open source, Meta bekerja sama dengan FFlabs dan VideoLAN untuk mengimplementasikan encoding paralel multi-lane serta fitur metrik kualitas real-time ke upstream
- Meta memproses lebih dari 1 miliar unggahan video per hari dan melakukan encoding multi-resolusi serta multi-kodek untuk pemutaran DASH dalam satu command line FFmpeg
- Struktur threading yang efisien yang diimplementasikan pada FFmpeg 6.0~8.0 didasarkan pada rancangan Meta, dan memberikan peningkatan efisiensi encoding bagi semua pengguna
- ASIC rancangan sendiri, MSVP (Meta Scalable Video Processor), diintegrasikan melalui API hardware standar FFmpeg untuk memastikan konsistensi antara pipeline software dan hardware
- Melalui investasi berkelanjutan pada FFmpeg yang telah dikembangkan lebih dari 25 tahun, Meta sekaligus memperkuat pengalaman video baru dan stabilitas platformnya
Peran FFmpeg dan Tantangan Meta
- FFmpeg adalah alat pemrosesan media standar industri yang mendukung beragam codec audio/video dan format kontainer, serta memungkinkan pengeditan dan konversi media melalui rantai filter yang kompleks
- Meta menjalankan biner ffmpeg (CLI utama) dan ffprobe (utilitas untuk melihat properti file media) puluhan miliar kali per hari, dengan kebutuhan tambahan yang melampaui pemrosesan file individual
- Selama bertahun-tahun Meta mengandalkan fork internal dan mengimplementasikan sendiri fitur yang saat itu belum ada di upstream, seperti encoding multi-lane berbasis thread dan perhitungan metrik kualitas real-time
Divergensi Fork Internal dan Kebutuhan Kembali ke Upstream
- Fork internal makin berbeda jauh dari FFmpeg upstream sehingga kesenjangan set fiturnya terus melebar
- Pada saat yang sama, versi baru FFmpeg menghadirkan dukungan codec dan format file baru serta peningkatan stabilitas, sehingga Meta juga perlu mendukung versi open source terbaru agar bisa terus menerima beragam konten video yang diunggah pengguna tanpa gangguan
- Karena semakin sulit mencegah regresi saat me-rebase perubahan internal, Meta bekerja sama dengan pengembang FFmpeg, FFlabs, dan VideoLAN untuk sepenuhnya meninggalkan fork internal dan beralih ke penggunaan versi upstream saja
Membangun Transcoding Multi-Lane yang Efisien (VOD dan Live Streaming)
- Saat pengguna mengunggah video, Meta membuat sekumpulan encoding untuk pemutaran DASH (Dynamic Adaptive Streaming over HTTP), dengan variasi resolusi, codec, frame rate, dan tingkat kualitas
- Player video di aplikasi dapat berpindah encoding secara real-time berdasarkan sinyal seperti kondisi jaringan
- Cara paling sederhana adalah memproses tiap lane secara terpisah dengan command line FFmpeg masing-masing, tetapi bahkan saat dijalankan paralel, tiap proses tetap melakukan pekerjaan yang berulang (decode berulang, overhead start proses) sehingga tidak efisien
- Dengan mendekode frame hanya sekali dalam satu command line FFmpeg lalu mengirimkannya ke tiap encoder output, Meta bisa menghilangkan decode yang duplikatif dan mengurangi overhead start proses
- Karena Meta menangani lebih dari 1 miliar unggahan video per hari, penghematan komputasi per proses memberikan peningkatan efisiensi besar secara keseluruhan
- Fork internal Meta juga menambahkan optimasi encoding video paralel: FFmpeg sebelumnya mengeksekusi beberapa encoder secara serial per frame, tetapi Meta menjalankan semua instance encoder secara paralel untuk memperoleh paralelisme yang lebih tinggi
- Berkat kontribusi pengembang FFmpeg (termasuk FFlabs dan VideoLAN), threading yang lebih efisien mulai diimplementasikan sejak FFmpeg 6.0 dan disempurnakan pada 8.0
- Implementasi ini dipengaruhi langsung oleh rancangan fork internal Meta, dan dicatat sebagai refactoring FFmpeg paling kompleks dalam beberapa dekade
- Hasilnya, semua pengguna FFmpeg mendapatkan manfaat encoding yang lebih efisien
Metrik Kualitas Real-Time (Live Streaming)
- Metrik kualitas visual digunakan untuk merepresentasikan kualitas visual media dalam bentuk angka dan mengukur kehilangan kualitas akibat kompresi
- Metrik referensi (reference): membandingkan encoding asli dengan encoding yang terdistorsi
- Metrik non-referensi (no-reference): menilai kualitas tanpa materi asli
- FFmpeg dapat menghitung metrik kualitas seperti PSNR, SSIM, dan VMAF menggunakan dua encoding yang sudah ada lewat command line terpisah setelah encoding selesai, tetapi live streaming memerlukan perhitungan real-time
- Dengan menyisipkan decoder video di belakang encoder video pada tiap lane output, Meta memperoleh bitmap frame setelah kompresi dan membandingkannya dengan frame sebelum kompresi, sehingga metrik kualitas tiap lane encoding dapat dihitung secara real-time dalam satu command line FFmpeg
- Mulai FFmpeg 7.0, berkat kontribusi dari FFlabs dan pengembang VideoLAN, decoding in-loop diaktifkan sehingga ketergantungan pada fork internal untuk fitur ini dapat dihapus sepenuhnya
Kriteria Kontribusi Upstream dan Patch Khusus Internal
- Fitur seperti metrik kualitas real-time dan threading yang efisien meningkatkan efisiensi berbagai pipeline berbasis FFmpeg baik di dalam maupun di luar Meta, sehingga dikontribusikan ke upstream
- Sebaliknya, patch yang sangat spesifik untuk infrastruktur Meta dan sulit digeneralisasi tetap dipertahankan secara internal
- FFmpeg mendukung decoding, encoding, dan filtering dengan akselerasi hardware melalui API standar untuk NVIDIA NVDEC/NVENC, AMD UVD, Intel QSV, dan lainnya
- ASIC transcoding video milik Meta, MSVP (Meta Scalable Video Processor), juga ditambahkan dukungannya melalui API standar yang sama, sehingga alat yang sama dapat digunakan di berbagai platform hardware
- Karena MSVP hanya dipakai di infrastruktur internal Meta, pengembang FFmpeg eksternal tidak memiliki akses hardware untuk menguji dan memverifikasinya, sehingga patch-nya tetap dipelihara secara internal
- Saat di-rebase ke versi FFmpeg terbaru, Meta melakukan validasi yang luas untuk memastikan ketangguhan dan akurasi
Investasi Berkelanjutan pada FFmpeg
- Dengan fitur encoding multi-lane dan metrik kualitas real-time, Meta sepenuhnya menghentikan penggunaan fork internal di semua pipeline VOD dan live streaming
- Berkat API hardware standar FFmpeg, Meta dapat mendukung ASIC MSVP dan pipeline berbasis software dengan friksi seminimal mungkin
- Meta berencana terus berinvestasi pada FFmpeg yang telah aktif dikembangkan selama lebih dari 25 tahun melalui kemitraan dengan pengembang open source, sehingga memberi manfaat bagi Meta, industri, dan pengguna
1 komentar
Komentar Hacker News
Saat fork internal makin usang, kami bekerja sama dengan para pengembang FFmpeg untuk menggabungkan fitur yang kami butuhkan ke FFmpeg resmi
Hasilnya, kami bisa sepenuhnya membuang versi internal dan beroperasi hanya dengan versi upstream
Ada yang bilang "bukannya kalian bisa berkontribusi lebih banyak?", tetapi inti open source adalah semua pihak berbagi manfaat
Kita sudah menikmati manfaat dari banyak proyek seperti React, React Native, dan lainnya
Pada akhirnya, struktur seperti ini terasa hanya menguntungkan pihak yang sudah punya kuasa
Meski begitu, fakta bahwa Meta telah membuka banyak hal ke ekosistem open source tetap menjadi pembeda di industri
Ungkapan seperti "baru sekarang diintegrasikan ke upstream" terasa seperti mencoba membungkus kekurangan masa lalu
Mencampurkan kalimat pemasaran ke blog teknis terasa mengganggu dari sudut pandang pembaca
Semoga saat Fabrice Bellard pensiun, dia mendapat kompensasi yang layak
Berkat perangkat lunaknya, banyak perusahaan telah menghasilkan uang
Bagus bahwa versi baru FFmpeg kini mendukung beragam codec dan format,
tetapi pada skala Meta yang menjalankannya miliaran kali setiap hari, saya penasaran apakah mereka ikut berpartisipasi secara berkelanjutan dalam peningkatan semacam ini
Dijalankan puluhan miliar kali per hari itu benar-benar skala yang luar biasa
Saya sendiri sudah bisa merasakan overhead hanya dengan pekerjaan perakitan video otomatis yang berjalan beberapa ribu kali per hari
Berkat fitur
single-decode multi-output, waktu pemrosesan berkurang 40%Untungnya, turunnya harga memori belakangan ini membuat cost-benefit dari peningkatan open source menjadi lebih besar
Pendekatan meningkatkan paralelisme dengan menjalankan instance encoder secara paralel terdengar masuk akal
Tetapi saya ingin melihat fitur time-axis parallelization
Jika video input dibagi berdasarkan keyframe lalu dienkode secara paralel, kecepatan bisa ditingkatkan tanpa menurunkan kualitas
Biasanya encoder menempatkannya secara dinamis demi efisiensi, jadi pemisahan lebih awal mungkin sulit
Terima kasih kepada tim Meta karena telah berkontribusi ke
ffmpegdanffprobeKe depan, semoga mereka juga mempertimbangkan dukungan pendanaan untuk kualitas kode, dokumentasi, dan acara komunitas
Ungkapan "fork internal makin lama makin usang" terasa sangat relatable
Sebagai catatan, di FFmpeg 8 pemetaan warna HDR dan SDR kini ditangani dengan sempurna
Menarik bahwa Sovereign Tech Fund dari Jerman ternyata menyumbang ke FFmpeg
Mungkin Meta punya tim khusus encoding media dan berkontribusi senilai lebih dari 1 juta dolar per tahun
Lihat tweet terkait
STF Jerman disebut memberikan €157,580 pada 2024/2025
Untungnya server FFmpeg hanya menangani konten ringan, jadi masih bisa bertahan
Kalau videonya berat, mungkin sudah kewalahan
Posting HN yang sama juga sudah muncul 6 hari lalu
Saya tidak mengerti kenapa mencantumkan tautan ini malah di-downvote