-threads <count>
Ffmpeg'de bir komut satırı seçeneği olduğunu görüyorum . Bu seçeneğin varsayılan değeri nedir?
-threads <count>
Ffmpeg'de bir komut satırı seçeneği olduğunu görüyorum . Bu seçeneğin varsayılan değeri nedir?
Yanıtlar:
kullanılan kodeğe, ffmpeg versiyonuna ve CPU çekirdek sayınıza bağlıdır. Bazen sadece çekirdek başına bir iplik var. Bazen şöyle daha karmaşıktır:
Libx264 ile kare dişler için x 1.5, dilim dişler için x 1 çekirdeğidir.
2014 yılı itibariyle en uygun sayıyı kullanır.
Bunu çok çekirdekli bir bilgisayarda CPU yükünü (Linux:, top
Windows: görev yöneticisi) ffmpeg seçeneğine farklı seçeneklerle inceleyerek doğrulayabilirsiniz :
-threads 0
(en uygun);
-threads 1
(Tek dişli);
-threads 2
(Örneğin, bir Intel Core 2 Duo için 2 konu);
yok (varsayılan, ayrıca en uygun).
2015 düzenleme: 12 çekirdekli bir işlemcide, bazı ffmpeg komutlarında Linux top
hangi sayıya sahip olursa olsun en fazla% 200 CPU (yalnızca 2 çekirdek) gösteriyor -threads
. Öyleyse, varsayılan "hala bu ffmpeg binary 'in alabileceği kadar iyi" anlamında en uygun olabilir, fakat "leet CPU'mu tamamen kullanma" anlamında optimal olmayabilir.
2015 yılında ffmpeg 0.8.10-6 ile Ubuntu 14.04 tarihinde, 4 çekirdekli bir sistemde 1 çekirdek kullandı.
htop
bunu gösterdi; sadece bir çekirdek kullanıldı ve bir FullHD video için 16 fps dönüşüm oranı elde ettim.
Kullanarak -threads 4
tüm işlemci çekirdeğimi% 100'e çıkardım ve 47 fps'lik bir dönüşüm oranı elde ettim.
Aşağıdaki komutu kullandım:
$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg
Bu yanıtlardan bazıları biraz eski, ve ben Sadece her ne biz ile eklemek gibi ffmpeg 4.1
ile kodluyor libx264
, 6 çekirdekler benim Ryzen 5 2600X sistemin / 12 konu herhangi olmadan limitini edildi -thread
argüman.
-vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode
bu yalıtmak için birkaç değişken. Eklemenin bir -threads 12
etkisi olmadı.
Bir CentOS 6.5 VM'de dönüştürme ile oynuyordum (Ryzen 1700 8c / 16t - vm, 16 çekirdeğin 12'sine atandı). 480p filmlerle yapılan deneyler aşağıdakileri netleştirdi:
İplik seçeneği / Dönüşüm Oranı (fps @ 60 sn.)
(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps
İlginç olan kısım CPU yüklemesiydi ( htop
izlemek için kullanıyordu ). 130 fps aralığında
hiçbir -threads
seçeneğin kullanılmaması , yük düşük yük seviyesinde tüm çekirdeğe yayılmıştır.
1 iş parçacığı kullanarak tam olarak bunu yaptı,% 100 ile bir çekirdek yükledi. Başka bir şey kullanmak başka bir yayılma durumuyla sonuçlandı.
Gördüğünüz gibi, azalan bir geri dönüş noktası da var, bu yüzden kendi makineniz için -threads seçeneğini ayarlamanız gerekecek. Özellikle benim kurulumum için, -threads 6'yı (12 çekirdekli bir makinede) kullanmak, videoyu dönüştürürken (H264'ten x264'e farklı bir bit hızında farklı bir bit hızında h264'den x264'e) en iyi FPS ile sonuçlandı ve iadeler aslında içine attığım daha fazla ipliği azalttı o.
Bu da bir hafıza sorunu olabilirdi - VM'ye yalnızca 1GB atanmıştı. Bunu çimdikleyebilir ve bir şeyleri değiştirip değiştirmeyeceğini görebilirim. Yine de - bu -threads
seçeneğin kullanılmasının performansı artırabileceğini gösteriyor, bu sayede kurulumlarınızı tatlı noktayı bulmak için kendi makinenizde farklı seviyelerde testler gerçekleştirin.
iş parçacığı etkin olduğunu varsayarak, 1.5x çekirdek sayısı atadı.
-x264-params sliced-threads=1
. Veya kullanımı ile -tune zerolatency
.