搜索 社区服务 统计排行 帮助
  • 4012阅读
  • 23回复

[尝试]让x264变得更快……(放弃

楼层直达
级别: 工作组
注册时间:
2005-05-03
在线时间:
0小时
发帖:
2914
今天做了个小小的尝试,在x264运行的起始点稍微改了一下,强制所有浮点运算都使用32位长度。因为浮点运算本来就不准确,而且视频编码也不是什么要求特别精确的东西,所以想看看这样能不能提升速度。
实验的结果是,速度稍微有一点点提升。以下是编码日志

x264 [info]: slice I:5 Avg QP:15.14 size: 19088
x264 [info]: slice P:302 Avg QP:15.42 size: 1057
x264 [info]: slice B:193 Avg QP:17.60 size: 308
x264 [info]: consecutive B-frames: 33.7% 33.9% 26.7% 5.7%
x264 [info]: mb I I16..4: 13.3% 49.5% 37.2%
x264 [info]: mb P I16..4: 0.3% 0.4% 0.2% P16..4: 29.3% 3.1% 2.6% 0.1% 0.0%skip:64.0%
x264 [info]: mb B I16..4: 0.2% 0.0% 0.0% B16..8: 6.6% 0.1% 0.1% direct: 7.7% skip:85.2% L0:47.4% L1:50.0% BI: 2.7%
x264 [info]: 8x8 transform intra:45.2% inter:48.6%
x264 [info]: ref P L0 83.2% 9.8% 6.9%
x264 [info]: ref B L0 77.3% 22.7%
x264 [info]: ref B L1 86.4% 13.6%
x264 [info]: SSIM Mean Y:0.9939956
x264 [info]: kb/s:182.1

encoded 500 frames, 12.78 fps, 182.40 kb/s
这个是修改前的


x264 [info]: slice I:5 Avg QP:15.14 size: 19088
x264 [info]: slice P:302 Avg QP:15.42 size: 1057
x264 [info]: slice B:193 Avg QP:17.60 size: 308
x264 [info]: consecutive B-frames: 33.7% 33.9% 26.7% 5.7%
x264 [info]: mb I I16..4: 13.3% 49.5% 37.2%
x264 [info]: mb P I16..4: 0.3% 0.4% 0.2% P16..4: 29.3% 3.1% 2.6% 0.1% 0.0%skip:64.0%
x264 [info]: mb B I16..4: 0.2% 0.0% 0.0% B16..8: 6.6% 0.1% 0.1% direct: 7.7% skip:85.2% L0:47.4% L1:50.0% BI: 2.7%
x264 [info]: 8x8 transform intra:45.2% inter:48.6%
x264 [info]: ref P L0 83.2% 9.8% 6.9%
x264 [info]: ref B L0 77.3% 22.7%
x264 [info]: ref B L1 86.4% 13.6%
x264 [info]: SSIM Mean Y:0.9939956
x264 [info]: kb/s:182.1

encoded 500 frames, 13.09 fps, 182.40 kb/s
这是修改后的

发现ssim的值没有变(不过二进制比较编码结果,是不同的

测试使用的原版和改版下载:
http://www.namipan.com/d/06a68aa3d45a94e71f7dcd05f12afc5a399091b5cbae0500

具体所做的修改,是在程序运行的最开始,加一句代码,把fpu的运算控制寄存器给改了,变成单精度……达到提速的目的(虽然不确定这到底是不是偶然现象……因为速度差别确实是不大)。
步骤:
在x264.exe 0x680字节处(在内存中运行的时候,是0x401280),把
pushebp
mov ebp, esp
sub esp, 8
改为
jmp 00496348
nop

然后在0x95748字节处(内存0x496348)把那一串零改为
pushebp
mov ebp, esp
sub esp, 8
fldcw word ptr [496359]
jmp 00401286


最后把0x95759字节处(内存0x496359)的两个字节改为 7f 00
然后就算改完了
(不过也不能确定x264在运行过程中会不会把这个标志改回来)


ps:以下是发本贴的目的……
有没有人能指导我如何编译自己的x264?最好能从获取代码开始一直到获得编译好的exe……如果能尝试拿源代码来下手,修改起来会容易的多
级别: 精灵王
注册时间:
2003-01-10
在线时间:
1小时
发帖:
2981
只看该作者 1楼 发表于: 2008-10-22
lm,你很伟大。
如果出成品,记得发我一份。
级别: 工作组
注册时间:
2004-11-01
在线时间:
14小时
发帖:
2615
只看该作者 2楼 发表于: 2008-10-23
minGW。

[url=ed2k://|friend|[CHN%5D[eDtoon%5D[PPG_FW%5D[VeryCD%5DGalaxy|D46F9E727D0ED77EDA09D21C55386F57|/]点击这里可以把我加入emule好友名单[/url]

#DEEBEA #F6FAFA
还是挂小图,...[:o]
级别: 精灵王
注册时间:
2005-12-24
在线时间:
45小时
发帖:
2298
只看该作者 3楼 发表于: 2008-10-23
雷兄精力无限呀,期待成品

x264的源码去哪里下,svn还是cvs

在长长地换硬件的道路上,纠结前进中
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 4楼 发表于: 2008-10-23
很有意思,如果真是这样,说明有很大的优化空间,大量浮点运算可用单精度SSE3优化。

关于编译x264,我当时也折腾了很久,说一下吧

要以下几个东西:MinGW,MSYS,还有个pthread静态库补丁。

MinGW可以去mplayer_ww的网站下个压缩包,里面东西比较全。
然后下TDM 的安装包在解压位置安装一遍。接着再装MSYS。

代码可以直接去videolan的ftp上下。
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 5楼 发表于: 2008-10-23
我自己试了下,速度完全没有差异。雷鸣你的x264是哪里下的,还有编码用的参数是什么?我怀疑第二遍快仅仅是IO的影响。
级别: 工作组
注册时间:
2005-05-03
在线时间:
0小时
发帖:
2914
只看该作者 6楼 发表于: 2008-10-23
引用
最初由 roozhou 发布
我自己试了下,速度完全没有差异。雷鸣你的x264是哪里下的,还有编码用的参数是什么?我怀疑第二遍快仅仅是IO的影响。

呃……我自己这里测试了3次,每次都是快0.25~0.4fps这样
因为几乎一样,所以我怀疑是不是偶然误差
不过编码出来的文件二进制比较通不过。

谢谢你的提示,我放学回来去编译试试看
级别: 新手上路
注册时间:
2006-02-08
在线时间:
0小时
发帖:
17
只看该作者 7楼 发表于: 2008-10-23
請問用原代碼壓出來, 和用32-bit FPU壓出來的影片, PSNR分別是多少dB?
级别: 新手上路
注册时间:
2004-08-01
在线时间:
4小时
发帖:
480
只看该作者 8楼 发表于: 2008-10-23
我可以指导从获取代码到编译XD

编码出来的文件就算你不修改exe每次的结果也不可能是一样的。编码有随机性的因素在里面。

überm Sternenzelt richtet Gott, wie wir gerichtet.

Girls
Usually
Need
Diamond
And
Money
级别: 工作组
注册时间:
2003-08-26
在线时间:
13小时
发帖:
6600
只看该作者 9楼 发表于: 2008-10-23
单精度的话,好像是16bit

催片请点此处: http://bbs.popgo.org/bbs/read.php?tid=502402&displayMode=1#19103164
级别: 工作组
注册时间:
2005-05-03
在线时间:
0小时
发帖:
2914
只看该作者 10楼 发表于: 2008-10-23
引用
最初由 sswroom 发布
請問用原代碼壓出來, 和用32-bit FPU壓出來的影片, PSNR分別是多少dB?

测试编码我没有开psnr,只开了ssim
ssim的值是不变的
不过我越来越怀疑是偶然因素,实际上没有提速了

现在学会了编译x264,找时间直接从源代码下手比较好

(源代码真恐怖,然后我又特别不擅长算法……)

引用
最初由 MeteorRain 发布
单精度的话,好像是16bit

是32bit,双精度64,fpu内部运算默认精度80bit
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 11楼 发表于: 2008-10-23
x264用到FPU的部分可能就是DCT了吧,降低精度对画质有明显负面影响
级别: 工作组
注册时间:
2005-05-03
在线时间:
0小时
发帖:
2914
只看该作者 12楼 发表于: 2008-10-23
看了几下x264的代码,放弃……
这东西哪里可能看得懂嘛。是我想得太简单了
级别: 新手上路
注册时间:
2007-06-24
在线时间:
14小时
发帖:
123
只看该作者 13楼 发表于: 2008-10-23
:D 标题变得真快呀~
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 14楼 发表于: 2008-10-23
唉,可见学好C是多么重要啊。我看到x264源码觉得异常亲切。
快速回复

限150 字节
上一个 下一个