FFmpeg düşük CPU kullanımı


2

Komutu kullanarak MP4'ten (H264 ve AC3) MP4'e (H264 ve AAC) birkaç dosyayı dönüştürmek için FFmpeg kullanıyorum ffmpeg -i in.mp4 -c:v copy -c:a aac out.mp4

Dönüşüm yaparken yaklaşık% 15 kullanım gösteren hiper iş parçacıklı 4 çekirdekli bir işlemcim var. Dosyalar bir SSD'de bulunur ve disk etkinliği yaklaşık 3 MB / sn'dir, bu nedenle disk bir darboğaz gibi görünmüyor.

Kodlama başladığında CPU maksimum frekansına ulaşır, ancak herhangi bir çekirdek üzerindeki yükün% 50'nin üzerinde olduğunu fark etmedim.

FFmpeg çoklu çekirdeklerden yetersiz yararlanıyor mu? Kodlamayı daha hızlı yapmanın bir yolu var mı?


Birkaç çalıştırmak ffmpeg aynı anda işler.
llogan

Yanıtlar:


1

Kodladığınız tek şey ses ve var olan ses kodlama kitaplıklarının çoğu tek iş parçacıklı. Bu en olasıdır çünkü ses kodlaması zaten tek bir iş parçacıklı uygulama olarak hızlı bir şekilde cayır cayır yanıyor (zaten video kodlamasına kıyasla) ve çok fazla bellek kullanmıyor, bu yüzden her dosyayı tek bir iş parçacığı kullanarak kodlamak ve yeni bir başlangıç ​​yapmak gerçekten mümkün CPU'yu tamamen doyurmak için gerektiği kadar çok ayrı işlem. Çoklu iş parçacılığının aynı zamanda zorunlu olarak doğrusal performans iyileştirmelerine yol açmaması gerçeğinin faktörüdür ve muhtemelen çoğu ses kodlayıcısının geliştiricisinin çoklu iş parçacılığının yüksek öncelikli olduğunu düşünmemesinin sebebi vardır. Yalnızca çoklu iş parçacığı uygulayan iki ses kodlayıcısını biliyorum - MP3 için LAME MT pflac FLAC için - ve her ikisi de, elde ettikleri projelerin ana kod tabanlarının bir parçası olmayan ayrı değişikliklerdir.

CPU kullanımınıza gelince, hiper iş parçacıklı olarak 8 mantıksal çekirdeğiniz vardır ve% 8'i% 12,5'tir, bu% 15 kullanım rakamınızdan çok uzak değildir. Sisteminizin neden herhangi bir çekirdek üzerinde% 100 yük göstermediğinden emin değilim, belki de işletim sistemi çekirdekler arasındaki işlemi yüke veya benzeri bir şeye eşitlemek için ilerletiyor.

Çok sayıda dosyayı kodlamanız gerekiyorsa, aynı anda birden çok dosyayı kodlamak için birden fazla FFmpeg işlemi içeren bir komut dosyası yazmayı düşünebilirsiniz. Çok az komut dosyası / programlama deneyimim var ama görüntü optimizasyonu için aynı mantığı uygulayan açık kaynaklı bir araç biliyorum: picopt . Böylece, Python'da nasıl yapılacağına dair bir göstericiye ihtiyacınız varsa, picopt'un kaynak koduna bir göz atabilirsiniz.


0

Kontrol ffmpeg -hwaccels

itibaren https://ffmpeg.org/ffmpeg.html

-hwaccels Bu ffmpeg derlemesinde desteklenen tüm donanım hızlandırma yöntemlerini listeleyin.

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)
Select a device to use for hardware acceleration.

This option only makes sense when the -hwaccel option is also specified. Its exact meaning depends on the specific hardware

seçilen ivme yöntemi.

vdpau
For VDPAU, this option specifies the X11 display/screen to use. If this option is not specified, the value of the DISPLAY environment

değişken kullanılır

dxva2
For DXVA2, this option should contain the number of the display adapter to use. If this option is not specified, the default adapter

kullanıldı.

qsv
For QSV, this option corresponds to the values of MFX_IMPL_* . Allowed values are:

auto
sw
hw
auto_any
hw_any
hw2
hw3
hw4

Bunlar video kod çözme hızlandırıcıları. OP videoyu kopyalıyor, bu yüzden kod çözme işlemi yapılmadı.
Gyan

Sesi ac3'den aac'a kodladığını sanıyordum.
Michael D.
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.