- Transcoding multithread di FFmpeg CLI dirilis dalam bentuk pertama yang “berfungsi penuh” setelah sekitar 2 tahun pengerjaan dan lebih dari 700 commit persiapan
- Karena cakupan perubahannya besar, masih ada kemungkinan sebagian fitur rusak, dan pengujian serta review tetap menjadi tugas utama sebelum benar-benar digabungkan
-fix_sub_duration_heartbeatsulit menghindari perilaku nondeterministik dalam eksekusi asinkron karena asumsi sinkronisasi antara dekoder, encoder, dan muxer- Overhead threading umumnya kecil, tetapi pada pekerjaan dengan beban kerja per paket yang sangat rendah, biayanya bisa lebih terlihat daripada manfaat performanya
- Jika bottleneck tidak terpusat pada satu komponen dan tiap komponen belum sudah jenuh oleh multithreading internalnya sendiri, pemanfaatan CPU dan waktu pemrosesan nyata di lingkungan multicore dapat meningkat signifikan
Inti patch multithreading FFmpeg CLI
- Setelah sekitar 2 tahun pengerjaan dan lebih dari 700 commit persiapan, versi “fully functional” pertama dari FFmpeg CLI multithread dipublikasikan sebagai satu set patch
- Karena skala perubahannya besar, ada kemungkinan kerusakan yang belum ditemukan, sehingga pengujian dan review berbasis kasus penggunaan nyata diperlukan
- Dalam kasus umum, overhead threading kecil, tetapi pada workload dengan beban kerja per paket yang sangat rendah, overhead bisa menjadi signifikan
- Jika transcoding tidak didominasi oleh satu komponen tunggal dan tiap komponen belum sudah jenuh oleh multithreading internalnya sendiri, pemanfaatan CPU dan waktu eksekusi pada sistem multicore dapat meningkat
Batasan operasi dan masalah yang diketahui
- Opsi
-fix_sub_duration_heartbeatdalam struktur saat ini mengasumsikan sinkronisasi antar komponen yang terpisah- Alur targetnya adalah sinkronisasi dari encoder·muxer ke dekoder
- Jika tiap komponen berjalan secara asinkron, perilakunya secara fundamental menjadi nondeterministik
- Saat ini pun perilakunya sulit diprediksi, tetapi jika dijalankan dengan opsi yang sama, hasil antar eksekusi tetap deterministik
- Pada patch 16/24, opsi ini dinonaktifkan, dan dibutuhkan pendekatan penanganan yang lebih baik
Susunan set 24 patch
- Set patch terdiri dari total 24 patch
- 01-09/24 adalah perbaikan persiapan, dan dapat di-push lebih dulu daripada seri lainnya
- 10-17/24 memindahkan encoding dan filtering ke thread serta melakukan perubahan persiapan yang diperlukan
- Threading pada tahap ini adalah threading “palsu”, di mana thread utama menunggu thread lain selesai, sehingga belum merupakan eksekusi paralel yang sesungguhnya
- Karena overhead sementara bisa besar atau beberapa corner case bisa rusak, lebih tepat jika di-push setelah seluruh set siap
- 18/24 adalah patch individual terbesar yang menambahkan scheduler transcode, tetapi pada titik itu belum benar-benar berfungsi
- 19-24/24 mengubah tiap komponen agar menggunakan scheduler
- Dipisah untuk keperluan review, tetapi pada push akhir seharusnya digabungkan
- Materi terkait dapat dilihat di video presentasi VDD terbaru dan branch
ffmpeg_threading- VDD talk
- ffmpeg_threading branch
1 komentar
Opini Hacker News
Di server ARM 4-core, sekitar 2x lebih cepat, dan overhead paralelisasi tampaknya tidak besar
ffmpeg_threading/ffmpegmemakan waktu 7,771 detik, sedangkanffmpeglama 13,841 detik; penggunaan CPU masing-masing 218% dan 114%Penasaran bagaimana hasilnya jika decoding dan encoding video sama-sama memakai akselerasi hardware di kartu NVIDIA:
ffmpeg -hwaccel cuda -i $inputFile -codec:a copy -codec:v hevc_nvenc $outputPekerjaan lainnya sepertinya relatif kecil dari sisi biaya performa, jadi peningkatan ini disambut baik, tetapi dampak nyatanya saya perkirakan cukup terbatas
Sepertinya lebih baik menautkan https://ffmpeg.org/pipermail/ffmpeg-devel/2023-November/3165... daripada tweet
Inti tweet itu pada akhirnya juga tautan ini
Untuk memahami ini, sebaiknya tonton presentasi Anton di VideoLAN Dev Days 2023: https://www.youtube.com/watch?v=Z4DS3jiZhfo&t=1221
Itu membuat saya membayangkan arah untuk menangani animasi properti dengan lebih kuat
Tweet itu mengarah ke http://ffmpeg.org/pipermail/ffmpeg-devel/2023-November/31655..., lalu dari sana merujuk lagi ke kode https://git.khirnov.net/libav.git/log/?h=ffmpeg_threading
Saya penasaran apakah ini diterapkan otomatis, atau perlu merangkai parameter command line yang rumit
Saya penasaran apakah ada software penyunting video yang memanfaatkan ffmpeg
Dulu saya sempat berpikir untuk membuat sesuatu yang menggambar bentuk dengan SVG lalu memakai ffmpeg, atau menambahkan UI, atau hanya menambahkan teks, tetapi tidak pernah memulainya
Avidemux agak terasa seperti itu, dan bagian dalam ffmpeg cukup mentah sehingga tidak dipakai agar bisa diakses dari GUI; editor berbasisnya mungkin akan lamban, aneh, dan sulit dirawat
Sesuatu seperti editor modular yang membuat pratinjau lewat deskriptor perintah atau viewer pipeline sepertinya mungkin
ffmpeg sangat kuat, tetapi karena hanya dipakai lewat command line, hal itu menghalangi sebagian pengguna. Dulu saya menulis skrip Python yang menerima jumlah klip acak lalu membuat mosaik dengan filter
xstack, dan itu tidak mudahhttps://vsdb.top/
https://www.vapoursynth.com/
Untuk software niche berbasis ffmpeg, saya pernah melihat losslesscut: https://github.com/mifi/lossless-cut
Staxrip juga besar: https://github.com/staxrip/staxrip
Namun untuk editor yang “komprehensif”, saya kurang tahu
Semoga pekerjaan transcoding kecil yang saya lakukan untuk Plex jadi lebih cepat
Kartu grafis saya tidak mendukung hardware transcoding, jadi saya menantikannya
Saya sedang mencari cara untuk meningkatkan kecepatan transcoding; salah satunya akselerasi GPU, dan yang lain menambah jumlah thread
Namun sulit menemukan jumlah thread yang optimal
Namun kalau memungkinkan, akselerasi GPU jauh lebih baik
Saya penasaran bagaimana persyaratan lisensi untuk deployment ffmpeg berskala besar. Dalam kasus apa perlu biaya?
http://ffmpeg.org/legal.html
Dengan kata lain, gratis, tetapi jika memakai beberapa modul tertentu, bisa muncul masalah saat digabungkan dengan kode proprietary
Senang melihat FFmpeg makin membaik. Semoga segera ada dukungan Dolby AC4 juga