Ffmpeg -threads ayarları nasıl değiştirilir


15

Bir tüp sitesinde çalışıyor. Ben mp4 dönüştürmek için bir linux adanmış sunucu üzerinde ffmpeg aracılığıyla video çalıştırıyorum .

Sunucu özellikleri:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               3491.749
BogoMIPS:              6983.49
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

Sınama sırasında sorun, bir kerede yalnızca 4-5 yapıldığında bile, sunucunun ortalama yaklaşık 36'ya fırlamasıdır. Bu sadece tek bir kişidir. Açıldığında, birçok kişinin aynı anda yükleyeceğini hayal ediyorum.

Görünüşe göre ffmpeg dönüşüm başına mevcut olan tüm kaynakları kullanmaya çalışıyor.

Değiştirebileceğiniz bir ayar ayarı olduğunu duydum, ancak bulamıyorum. 8 cpu sunucum var. Yalnızca dönüşümler için kullanılır, bu yüzden en iyi ayarın 2 ile 4 arasında olacağını duydum. Test edebilirim.

Ancak bu ayarı nasıl değiştirebilirim? Çevrimiçi gördüğüm her şey bu ayarı tartışıyor, ancak değiştirme adımları tartışmıyor.

linux  ffmpeg  cpu  mp4 

Yanıtlar:


17

İstediğiniz seçenek bayrağı gerçekten sadece -threadsve bu şekilde kullanabilirsiniz (sadece bir iş parçacığı için):

ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264  -threads 1 transcoded.mp4

Bununla birlikte, bazı VM mimarilerinin her şeyi iki kez okuduğu ve yazdığı gerçeğinden bahsetmemek gerekirse, yeniden boyutlandırma, filtreler uygulama ve son kare kalitesi / kare hızı gibi sunucu yükünüzü ve işletim sürenizi artıracak birkaç incelik vardır. ve neredeyse bir kez !!!)

Hızınızı artırmak için birkaç ipucu:

  1. bir kuyruğu kullanın, böylece bir seferde yalnızca bir öğe kod dönüştürülür
  2. kullanıcılarınızdan daha küçük dosyalar isteyin
  3. makinenizin tam beygir gücünü aşağıdaki yollarla kullanın:
    • Ramdisk'ten okuma ve yazma
    • kod dönüştürme görevleri için çıplak metale geçme
    • kullanım -threads 0

Ne yaparsanız yapın, kullanıcılarınızı kod dönüştürme işlemi hakkında bilgilendirin, çünkü sadece zaman alır. (IJTT)

[LordNeckbeard'ın yorumunu yansıtmak için komut düzenlendi]


10
Seçenek yerleştirme önemlidir. Girişten -threadsönce bu seçeneği uygularsınız, giriş (kod çözücü). Genel kullanım ffmpeg [global options] [input options] -i input [output options] output.
llogan

Peki nereye yerleştirmeyi önerirsiniz? Başlangıçta küresel olarak uygulandığını düşündüm?
denjello

3
Bir çıkış seçeneği olarak kodlama seçeneği haline gelir. Hangi seçeneklerin işaretlendiğini görmek için FFmpeg belgelerine bakın (global).
llogan

-threadsarg parametresini arg öğesinin önüne veya arkasına koymanız önemli -imidir? Ayrıca, kaç tane iş parçacığı kullanmam gerektiğini nasıl belirlemeliyim? Temelde sadece yapıyorum-c copy
chovy

3

Bu biraz eski olabilir, ancak docker gibi bir konteyner için mükemmel bir görev gibi görünüyor.

  • Bırakın ffmpeg full horsepower(denjello dediği gibi)
  • ama docker'ın içinde koşmasına izin ver

Artık tek bir ffmpeg örneğinin ffmpeg komut satırı seçeneklerini kullanmadan bile ne kadar kaynak tüketebileceğini sınırlayabilirsiniz. Ve sadece işlemci değil, aynı zamanda bellek ve ES'ler.

Daha da fazlası: Belki arka planda çalışabilecek farklı görevleriniz var ve ne kadar sürdüğü umurumda değil ve hızlı çalışması gereken görevleriniz var, böylece farklı görevlere ağırlık verebilirsiniz.

Bkz. Https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources

Github'da önceden tanımlanmış bir ffmpeg görüntüsü var: https://github.com/jrottenberg/ffmpeg

docker run jrottenberg/ffmpeg \
        -i http://url/to/media.mp4 \
        -stats \
        $ffmpeg_options  - > out.mp4

Tek bir dönüşüm, ek yük nedeniyle muhtemelen daha yavaş çalışacaktır, ancak aynı anda birden çok örneği çalıştırırsanız bu çok büyük bir fayda olabilir. Herhangi bir görev, gelişmiş güvenlikten bahsetmeden, çok iyi ölçeklendirilecektir, çünkü her görev temel işletim sisteminden izole edilmiştir.


Docker'ın içinde çalıştırmak biraz aşırı değil mi? Linux'ta işlemci kullanımını sınırlamak için daha pek çok daha iyi yol var scoutapm.com/blog/…
yurtesen

Neden? Yükleyicinin zaten yüklü olduğunu düşünün, --rmgörev yapmak için bayraklı bir kap çalıştırmak ve çıkıştan sonra kapsayıcıyı kaldırmak, yöneticilerin 2019'da yapması ve yapması gereken tamamen normal bir şeydir. Özellikle belge dönüştürme gibi şeyler için. Dönüşüm başarısız mı? Yerel araç zincirinizi yükseltmeden / düşürmeden başka bir dönüştürücü sürümü denemek ister misiniz? İnternetten indirildiğinden dokümana güvenmiyor musunuz? Görevi bir kap içinde ayırın. Ffmpeg bir istisna değildir. cvedetails.com/vulnerability-list/vendor_id-3611/Ffmpeg.html
Jürgen

Kulağa pazarlama konuşması gibi geliyor. Docker sizin koyduğunuz gibi mükemmel değil -> techbeacon.com/security/… Linux'ta normal bir kullanıcı sınırlı erişim ve sistem güvenliğinden de yararlanıyor. Program sürüm düşürme ihtiyacı çok nadirdir ve depo aracılığıyla yapılabilir. Birçok liman işçisi görüntüleri rastgele insanlar tarafından yapılır. Belki de belge dönüştürücü bağlantı istasyonu görüntüsü tehlikeye atıldı ve tüm belgelerinizin bir kopyasını uzak bir sunucuya gönderildi. Bu nedenle, docker görüntülerini kullanmak bu tür bir güvenlik açığı olasılığını artırır. Sonra ne?
yurtesen

Perhaps the document converter docker image was compromised and sent copy of all your documents to a remote server. So, using docker images increase possibility such vulnerability. What then?repo'ya göz atın, dockerfile'ı araştırın ve docker build -t myimagekendiniz yerel bir görüntü oluşturmak için kullanın . Veya kendi dockerfile'ınızı oluşturun, bu roket bilimi değil github.com/alfg/docker-ffmpeg/blob/master/Dockerfile
Jürgen
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.