QQCif's Frozen Zone

让x264吃满CPU,提高x264效率[存在RP的概率]

By QQCif

话说起因是这样的,因为我有时候需要使用–preset ultrafast来测试一些滤镜(因为我也在慢慢折腾中),这时候x264往往只能占CPU的30%左右,效率非常之低。百思不得其解,遂搜索。原来有可能此时整个workflow里面的瓶颈不在x264,而在前端的Avisynth或者是视频解码器。因为我是用FFMS输入的,所以就考虑是不是Avisynth的问题,然后就发现在doom9上面的相关问题(解决方案在第二页)。费了好大的劲(你懂的)下载到SET编译的非官方的Avisynth 2.5.8 MT即多线程版本(2.6的实在是下载无力啊)。参照说明解压替换原版文件。

(注意多线程版本的Avisynth存在各种兼容性问题,可能在搭配不同的滤镜是会出现各种意外,请慎重考****虑。)

然后在AVS脚本的开头添加

SetMTmode(mode,thread) 

mode有1-6,具体可以参考Avisynth的Wiki,我试下来mode=3最快,各人的情况可能不同。thread=0是默认使用所有核心。

好了举个例子,现在我的AVS脚本是这样的(请先忽略我滤镜的使用问题)

SetMTMode(3,0)

LoadPlugin(“D:Program Filesmeguitoolsffmsffms2.dll”)

FFVideoSource(“E:Music Japan – (NHK-E 1440×1080 2011-10-09 MPEG2).ts”, threads=0)

Load_Stdcall_Plugin(“D:Program Filesmeguitoolsyadifyadif.dll”)

Yadif(mode=1, order=1)

#crop

LanczosResize(512,288) # Lanczos (Sharp)

__film = last

__t0 = __film.trim(23516, 29006)

__t0 

可以看到,FFVideoSource里面也有一个thread,道理是一样的。我们执行一次x264 –preset ultrafast –crf 20,随便跑几帧看看结果

D:Program Filesmeguitoolsx264>x264 –preset ultrafast –crf 20 –output “E:Music Japan – (NHK-E 1440×1080 2011-10-09 MPEG2).ts.264” “E:Music Japan – (NHK-E 1440×1080 2011-10-09 MPEG2).ts.avs”

avs [info]: 512x288p 0:0 @ 30000/1001 fps (cfr)

x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX

x264 [info]: profile Constrained Baseline, level 2.1

x264 [info]: frame I:22    Avg QP:18.14  size: 35067

x264 [info]: frame P:5469  Avg QP:20.88  size: 10328

x264 [info]: mb I  I16..4: 100.0%  0.0%  0.0%

x264 [info]: mb P  I16..4:  3.4%  0.0%  0.0%  P16..4: 68.1%  0.0%  0.0%  0.0%  0.0%    skip:28.5%

x264 [info]: coded y,uvDC,uvAC intra: 47.3% 46.5% 18.8% inter: 47.0% 28.5% 7.3%

x264 [info]: i16 v,h,dc,p: 32% 34% 23% 12%

x264 [info]: i8c dc,h,v,p: 46% 30% 18%  6%

x264 [info]: kb/s:2500.05

encoded 5491 frames, 83.42 fps, 2500.05 kb/s

 

再看一下没有MT的情况

D:Program Filesmeguitoolsx264>x264 –preset ultrafast –crf 20 –output “E:Music Japan – (NHK-E 1440×1080 2011-10-09 MPEG2).ts.264” “E:Music Japan – (NHK-E 1440×1080 2011-10-09 MPEG2).ts.avs”

avs [info]: 512x288p 0:0 @ 30000/1001 fps (cfr)

x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX

x264 [info]: profile Constrained Baseline, level 2.1

x264 [info]: frame I:22    Avg QP:18.09  size: 35151

x264 [info]: frame P:5469  Avg QP:20.88  size: 10389

x264 [info]: mb I  I16..4: 100.0%  0.0%  0.0%

x264 [info]: mb P  I16..4:  3.4%  0.0%  0.0%  P16..4: 68.6%  0.0%  0.0%  0.0% 0.0%    skip:28.0%

x264 [info]: coded y,uvDC,uvAC intra: 47.1% 46.4% 18.7% inter: 47.3% 28.7% 7.4%

x264 [info]: i16 v,h,dc,p: 32% 34% 23% 11%

x264 [info]: i8c dc,h,v,p: 46% 30% 19%  6%

x264 [info]: kb/s:2514.59

encoded 5491 frames, 53.56 fps, 2514.59 kb/s