Ffmpeg varsayılan olarak kaç tane iplik kullanır?


46

-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:


24

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.


Teşekkürler. Ffmpeg tarafından desteklenen bazı standart kodekler için varsayılanlara bir referansınız var mı?
Edward Dale

6
Ona güvenme. Linux'taki ffmpeg 0.7.8 ne olursa olsun varsayılan olarak 1 thread kullanıyor.
Barafu Albino

Daha iyi sonuç almak için hangi değer kullanılabilir? PS Android çerçevesinde FFMpeg kullanıyorum.
Katil

23

2014 yılı itibariyle en uygun sayıyı kullanır.

Bunu çok çekirdekli bir bilgisayarda CPU yükünü (Linux:, topWindows: 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 tophangi 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.


1
Bunun yalnızca genel işleme için değil kodlama için doğru göründüğünü unutmayın. Aslında çıktı çerçeveleri üretmiyorsa, paralelleşmez. Örneğin, saat 02: 00'den itibaren titriyorsanız, yalnızca saat 02: 00'den itibaren paralellik elde edersiniz, ancak saat 02: 00'a kadar olan her şeyin seri olarak işlenmesi gerekir.
Mehrdad

6

2015 yılında ffmpeg 0.8.10-6 ile Ubuntu 14.04 tarihinde, 4 çekirdekli bir sistemde 1 çekirdek kullandı. htopbunu gösterdi; sadece bir çekirdek kullanıldı ve bir FullHD video için 16 fps dönüşüm oranı elde ettim.

Kullanarak -threads 4tü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

6

Bu yanıtlardan bazıları biraz eski, ve ben Sadece her ne biz ile eklemek gibi ffmpeg 4.1ile kodluyor libx264, 6 çekirdekler benim Ryzen 5 2600X sistemin / 12 konu herhangi olmadan limitini edildi -threadargüman.


1800X'e sahibim ve 16 iş parçacığına yayılmış% 20 kullanımın olmadığını gözlemliyorum, ancak birkaç isteğe bağlı argüman da kullanıyorum: -vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecodebu yalıtmak için birkaç değişken. Eklemenin bir -threads 12etkisi olmadı.
Elaskanator

3

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 ( htopizlemek için kullanıyordu ). 130 fps aralığında
hiçbir -threadsseç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 -threadsseç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.


Lütfen "dönüştürme" ile ne demek istediğinizi ekler misiniz? İdeal olarak, kesin komut.
Ondra Žižka

4.1.3 Ubuntu 18.04 ve çok benzer bir sonuç. Varsayılan "tüm çekirdekte düşük yük" idi.
Roel Van de Paar

Sanırım "12 çekirdekli" makinede 6 iş parçacığında en iyi duruma gelme nedeninin (cpu belirtilmemiş, ilk listelenenlerden farklı olarak) 6 çekirdeğin gerçek çekirdek sayısı ve 12 iş parçacığı sayısının olabileceğini tahmin ediyorum.
Roel Van de Paar

1

iş parçacığı etkin olduğunu varsayarak, 1.5x çekirdek sayısı atadı.


Çerçeve dişleri için 1,5 x çekirdek sayısı. Dilim iplikleri için 1 x çekirdek sayısı. Bu (lib) x264'e özgüdür. Diğer kodlayıcılar için tahsisatın ne olduğundan emin değilim.
llogan

@ LordNeckbeard Çerçeve iş parçacığı ile dilim iş parçacığı iş parçacığı arasında geçiş nasıl yapılır?
Dr.Jacky

1
@ Mr.Hyde Muhtemelen ile -x264-params sliced-threads=1. Veya kullanımı ile -tune zerolatency.
llogan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.