- FFmpeg CLI için çok iş parçacıklı transcoding desteğinin, yaklaşık 2 yıllık çalışma ve 700'den fazla hazırlık commit'inin ardından ilk "tam çalışır" haliyle yayımlandığı açıklandı
- Değişiklik kapsamı büyük olduğundan bazı işlevlerin bozulmuş olma ihtimali sürüyor; bu yüzden gerçek birleştirme öncesinde test ve inceleme temel gündem maddeleri olmaya devam ediyor
-fix_sub_duration_heartbeat, decoder ile encoder ve muxer arasındaki senkronizasyon varsayımı nedeniyle asenkron çalışmada belirsiz davranışı önlemekte zorlanıyor- İş parçacığı ek yükü genel olarak düşük olsa da, paket başına iş miktarının çok az olduğu görevlerde performans kazanımından çok maliyet daha görünür olabilir
- Darboğaz tek bir bileşende toplanmıyorsa ve her bileşen zaten kendi içinde çok iş parçacıklı yapıda doygun değilse, çok çekirdekli ortamlarda CPU kullanım oranı ve gerçek işlem süresi önemli ölçüde iyileşebilir
FFmpeg CLI çok iş parçacıklılığı yamasının özeti
- Yaklaşık 2 yıllık çalışma ve 700'den fazla hazırlık commit'inin ardından, çok iş parçacıklı FFmpeg CLI'nin ilk “fully functional” sürümü bir yama seti olarak yayımlandı
- Değişikliklerin kapsamı büyük olduğu için henüz fark edilmemiş bozulmalar olabilir; bu nedenle gerçek kullanım senaryolarına dayalı test ve inceleme gerekiyor
- Genel durumda iş parçacığı ek yükü düşük olsa da, paket başına iş miktarının çok az olduğu iş yüklerinde bu ek yük anlamlı hale gelebilir
- Transcoding tek bir bileşen tarafından domine edilmiyorsa ve bileşenlerin her biri zaten kendi çok iş parçacıklılığıyla doygun hale gelmemişse, çok çekirdekli sistemlerde CPU kullanımı ve çalışma süresi iyileşebilir
Çalışma kısıtları ve bilinen sorunlar
-fix_sub_duration_heartbeatseçeneği mevcut yapıda birbirinden ayrık bileşenler arasında senkronizasyon varsayıyor- Hedef akış, encoder ve muxer'dan decoder'a uzanan senkronizasyon
- Her bileşen asenkron çalıştığında davranış temelden belirsiz hale geliyor
- Şu anda da davranış öngörülmesi zor olsa da, aynı seçenekle çalıştırıldığında çalıştırmalar arası sonuçlar deterministik
- 16/24 yamasında bu seçenek devre dışı bırakılıyor ve daha iyi bir çözüm gerekiyor
24 parçalık yama setinin yapısı
- Yama seti toplam 24 parçadan oluşuyor
- 01-09/24 hazırlık düzeltmeleri; geri kalan seriden önce gönderilebilir
- 10-17/24, encoding ve filtering işlemlerini iş parçacıklarına taşıyor ve gerekli hazırlık değişikliklerini yapıyor
- Bu aşamadaki threading, ana iş parçacığının diğer iş parçacıklarının tamamlanmasını beklediği “sahte” threading olduğundan gerçek paralel yürütme sağlamıyor
- Geçici ek yük büyük olabilir veya bazı köşe durumları bozulabilir; bu nedenle tüm set hazır olduktan sonra gönderilmesi daha uygun
- 18/24, en büyük tekil yama olarak transcode scheduler ekliyor, ancak bu aşamada henüz gerçekten çalışmıyor
- 19-24/24, tek tek bileşenleri scheduler kullanım modeline dönüştürüyor
- İnceleme kolaylığı için ayrılmış olsalar da nihai gönderimde birleştirilmeleri gerekiyor
- İlgili materyaller son VDD sunum videosunda ve
ffmpeg_threadingbranch'inde görülebilir- VDD talk
- ffmpeg_threading branch
1 yorum
Hacker News yorumları
4 çekirdekli bir ARM sunucuda yaklaşık 2 kat hızlanmış ve paralelleştirme ek yükü pek görünmüyor
ffmpeg_threading/ffmpeg7,771 saniye, mevcutffmpegise 13,841 saniyeydi; CPU kullanımı sırasıyla %218 ve %114'tüNVIDIA kartta hem video kod çözme hem de kodlama için donanım hızlandırma kullanılırsa ne olacağını merak ediyorum:
ffmpeg -hwaccel cuda -i $inputFile -codec:a copy -codec:v hevc_nvenc $outputDiğer işlemlerin performans maliyeti açısından nispeten küçük olacağını düşündüğüm için, iyileştirme sevindirici olsa da gerçek etkisinin epey sınırlı olmasını bekliyorum
Tweet yerine https://ffmpeg.org/pipermail/ffmpeg-devel/2023-November/3165... bağlantısını vermek daha iyi olurdu
Tweetin özü de zaten bu bağlantı
Bunu anlamak için VideoLAN Dev Days 2023'te Anton'un yaptığı sunumu izlemek iyi olur: https://www.youtube.com/watch?v=Z4DS3jiZhfo&t=1221
Özellik animasyonlarını daha güçlü şekilde ele alan bir yön hayal ettiriyor
Tweet http://ffmpeg.org/pipermail/ffmpeg-devel/2023-November/31655... adresine gidiyor, oradan da koda https://git.khirnov.net/libav.git/log/?h=ffmpeg_threading referans veriliyor
Bunun otomatik uygulanıp uygulanmadığını, yoksa komut satırı parametrelerini karmaşık biçimde birleştirmek gerekip gerekmediğini merak ediyorum
ffmpeg kullanan bir video düzenleme yazılımı var mı merak ediyorum
Bir ara SVG ile şekiller çizip ffmpeg kullanmayı ya da üstüne bir UI eklemeyi veya yalnızca metin ekleyen bir şey yapmayı düşünmüştüm ama başlamadım
Avidemux biraz o havada; ffmpeg'in içi de oldukça ham olduğundan GUI'den erişilecek şekilde kullanılmıyor, bu yüzden üzerine kurulu bir editör hantal, garip ve bakımı zor olur gibi
Komut açıklayıcısı ya da pipeline görüntüleyicisiyle önizleme üreten modüler bir editör gibi bir şey mümkün olabilir
ffmpeg güçlü ama yalnızca komut satırından kullanılması bazı kullanıcıların önünü kesiyor. Geçmişte rastgele sayıda klip alıp
xstackfiltresiyle mozaik oluşturan bir Python betiği yazmıştım; kolay değildihttps://vsdb.top/
https://www.vapoursynth.com/
ffmpeg tabanlı niş yazılım olarak losslesscut'ı görmüştüm: https://github.com/mifi/lossless-cut
Staxrip de büyük: https://github.com/staxrip/staxrip
Ancak “kapsamlı” bir editör konusunda pek emin değilim
Plex için yaptığım küçük transkoding işlerinin hızlanması iyi olurdu
Ekran kartım donanımsal transkoding desteklemediği için umutluyum
Transkoding hızını artırmanın yollarını arıyordum; biri GPU hızlandırma, diğeri iş parçacığı sayısını artırmaktı
Ancak en uygun iş parçacığı sayısını bulmak zor
Yine de mümkünse GPU hızlandırma çok daha iyi
Büyük ölçekli ffmpeg dağıtımında lisans gereksinimlerinin nasıl olduğunu merak ediyorum. Hangi durumlarda ücret gerekir?
http://ffmpeg.org/legal.html
Yani ücretsiz, ancak bazı modüller kullanılırsa kapalı kaynak kodla karıştırırken sorun çıkabilir
FFmpeg'in geliştiğini görmek güzel. Umarım yakında Dolby AC4 desteğini de görürüz