【发布时间】:2014-10-22 10:22:35
【问题描述】:
我正在尝试在 E3-1245 V2 3.40GHz CPU、32 GB RAM、2TB 7200RPM 磁盘(带软 Raid 1)debian 6 服务器上编码视频(使用 x264 编解码器)
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');
我认为有解复用问题,但不确定。
我也尝试过这样的事情:
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。如果你并行运行,会发生什么?
-
是的。我也试过 -thread 0; -threads auto 和 -threads 8,但 ffmpeg 不在乎。什么都没发生,但现在在生产服务器上是个问题。