我试图在E3-1245 V2 3.40GHz CPU、32 GB内存、2TB 7200 RAM磁盘(带有软Raid 1) debian 6服务器上对视频进行编码(使用V2编解码器)
E3-1245 V2有4个内核/8个线程,但是ffmpeg不能充分利用所有800%的数据,而且每个实例的利用率约为200%。
我读过许多其他线程,人们总是说“以并行模式运行少量ffmpeg进程”。
但是,在一个ffmpeg实例中,瓶颈究竟在哪里?CPU总线/ RAM freq速度??
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.y4mCPU的使用稍微好一点(大约150%的ffmpeg和350%的x264),但这一点也不是800%。
有办法加快编码速度吗?哪里是瓶颈呢?
发布于 2014-08-28 15:44:56
回答编辑:
@user3652819如果您的ffmpeg构建是用p线程支持编译的,那么-threads选项应该可以工作。如果ffmpeg即使使用-threads也不能使用您的CPU能力,这意味着有些编码或解码算法无法并行化。让我解释一下并行化的问题:
用手推车搬运沙子是一项完全并行的工作。你可以随意使用手推车。把一些人送上公共汽车不是一项可并行的工作。人们必须一个接一个地进去。
我通常运行更多的ffmpeg实例来处理更多的文件来使用我的免费CPU功能。
旧员额:
您在输入或输出中使用的一些编解码器的算法可能不够可并行。您使用的输入文件是什么?当您使用libx264编码的文件作为输入时,这个问题仍然存在吗?
https://stackoverflow.com/questions/25550774
复制相似问题