我試圖上E3-1245 V2 3.40GHz CPU視頻編碼的(使用X264編解碼器),32 GB RAM,2TB 7200RPM磁盤(軟RAID 1)的Debian 6服務器找到瓶頸。 Ffmpeg不使用4核心8線程CPU的800%。爲什麼?
E3-1245 V2具有4個核/ 8個線程,但ffmpeg無法全部使用800%,並且每個實例使用大約200%。
我看了很多其他的線程,人們總是說「在並行模式下運行幾ffmpeg的過程」
但是,在實際上是在一個ffmpeg的實例中的瓶頸? CPU總線/ RAM頻率。速度
exec ("/usr/bin/ffmpeg -i " . $fullpath . ' -pass 1 -passlogfile
/var/www/scripts/twopass2.log -refs 1 -threads 0 -vcodec libx264 -bsf h264_mp4toannexb
-s 1280x720 -aspect 16:9 -r 24 -g 48 -keyint_min 48 -sc_threshold 0 -x264opts
"keyint=48:min-keyint=48:scenecut=0:stats=/var/www/scripts/stats2.log" -b:v 2300k -bf 0
-profile:v baseline -mixed-refs 0 -level 30 -maxrate 80M -bufsize 80M -acodec aac -
async 1 -pix_fmt yuv420p -f mpegts -strict -2 -ar 44100 -b:a 128k -map 0 -dn -sn -y
/dev/null');
exec ("/usr/bin/ffmpeg -i " . $fullpath . ' -pass 2 -passlogfile
/var/www/scripts/twopass2.log -refs 1 -threads 0 -vcodec libx264 -bsf h264_mp4toannexb
-s 1280x720 -aspect 16:9 -r 24 -g 48 -keyint_min 48 -sc_threshold 0 -x264opts
"keyint=48:min-keyint=48:scenecut=0:stats=/var/www/scripts/stats2.log" -b:v 2300k -bf 0
-profile:v baseline -mixed-refs 0 -level 30 -maxrate 80M -bufsize 80M -acodec aac -
async 1 -pix_fmt yuv420p -f mpegts -strict -2 -ar 44100 -b:a 128k -map 0 -dn -sn -
flags -global_header -f segment -segment_format mpegts -segment_time 10 -
segment_list /dev/null -y ' . $idpath . '2/%5d.ts');
我覺得有demuxing的問題,但不知道。
而且我想是這樣的:
mkfifo pipe.y4m
ffmpeg -i input.mp4 -f yuv4mpegpipe -y pipe.y4m
and run
x264 -o dvd1.264 pipe.y4m
CPU利用好一點(約150%的ffmpeg和350% - X264),而且這是不是800%的。
任何方式來加快編碼? 那裏真的存在瓶頸?
您是否設置線程數?很難告訴這麼少的信息。我敢打賭IO。如果你平行運行,會發生什麼? – 2014-08-28 14:07:58
是的。我也嘗試了-thread 0; -threads auto和-threads 8,但ffmpeg不在乎。什麼都沒有發生,但現在在生產服務器上是個問題。 – user3652819 2014-08-28 14:18:00