dwing吧 关注:5,665贴子:89,010

[分享] Direct264 自编译版

只看楼主收藏回复

出于没人给direct264编译第三方版本(主要是没patch),故自己决定动手,并打算长期更新(只要direct264在更新)。
编译环境:
win7 x86 + msys 1.0.17.1
mingw-gcc 4.6.0
yasm 1.1.0
Patches:
01. Film Grain Optimization (#1)
02. Fade Compensation (#2)
03. Remove stats before renaming
04. Auto VBV Settings
05. Force Level
06. Automatically Level
07. Filter: hqdn3d/pad/vflip/yadif
08. Logger
09. Encode Time
10. Cosmetic (#3)
#1: help里额外加了需要subme>=7的提示
#2: 额外使用x264_clip3ff函数强制限制fade-compensate的参数范围为0.0-1.0, help添加对应信息
#3: crf显示的有效小数位被我改为2位
其他说明:
1) direct264目前内置GPAC,与l-smash互斥,故不能打此补丁,所以音频建议用(dshow2wav+音频编码器+)其它混流器处理(如roozhou编译的ffmpeg)
2) MixAQ/OreAQ有可能对x264引起问题,再加上direct264本来与官方x264差别较大,故也不能打这些补丁
Build info:
Platform:    X86
System:      WINDOWS
asm:         yes
avs:         yes
lavf:        no
ffms:        no
gpac:        internal
gpl:         yes
thread:      win32
filters:     resize crop select_every hqdn3d pad vflip yadif
debug:       no
gprof:       no
LTO:         no
PIC:         no
shared:      no
visualize:   no
bit depth:   8
说明:取消了lavf和ffms. ffms在direct264里应该不能用;lavf的优势是处理图片序列,所以取消了,这样x264能小不少;gcc换komisar除错的4.6.0 release再次对比了下LTO对x264的编码速度影响,多次测试发现依然不如不带LTO的,故不开启这个开关
gcc CFLAGS相关开关:
-Wshadow -Ofast   -Wall -I. -march=#4 -mfpmath=sse -msse -std=gnu99 -fomit-frame-pointer -fno-tree-vectorize -fno-zero-initialized-in-bss
#4: 本人编译时提供了3个版本的x264, generic为i686, coreix为corei7, k10为amdfam10, 当然后两者我没法做fprofiled
另:make fprofiled时会自动在合适的地方加上-fprofile-generate和-fprofile-use
make fprofiled时的Makefile改动
OPT0 = --crf 30 -b1 -m1 -r1 --me dia --no-cabac --direct temporal --tune ssim --ssim --no-weightb --weightp 0 --b-pyramid 0 --vf resize:640,360,,,,lanczos/pad:0,60,0,60
ifeq ($(MP4),yes)
OPT0 += -o tmpout.mp4
endif
OPT1 = --crf 16 -b2 -m3 -i1 --no-8x8dct --nr 100 --no-dct-decimate -t0 --rc-lookahead 0 --slice-max-mbs 50 --weightp 1 --b-pyramid 1 -I infinite --fade-compensate 0.5
OPT2 = --crf 26 -b4 -m5 -r2 --me umh --merange 64 --cqm jvt --tune psnr --psnr --no-mixed-refs --b-adapt 2 --slice-max-size 1500 --weightp 1 --b-pyramid 1 --vf hqdn3d
OPT3 = --crf 18 --b-adapt 0 -m9 -r5 --me umh -A all --direct auto --no-fast-pskip --no-mbtree --weightp 2 --fgo 10 --vf crop:16,16,16,16
OPT4 = --crf 22 -b4 -r4 --me esa --merange 12 -t2 -A all --psy-rd 1.0:1.0 --slices 4 --weightp 2
OPT5 = --frames 60 --crf 24 -m10 --me tesa -t2 -o tmpout.mkv
OPT6 = --frames 80 -q0 -m9 -r2 -Aall --direct none
OPT7 = --frames 100 -q0 -m2 -r1 -t0 --no-cabac
$(OPT$I) --threads 1


IP属地:湖南1楼2011-05-14 14:24回复
    下载:(基于direct264 svn r375 / x264 core:115 r1955)
    u。115。com/folder/f08b3bb7f21
    patch only:
    www。mediafire。com/?ze26zka9gkqtj
    版本说明:
    x264_generic.exe     --> 适用于几乎所有的PC
    x264_coreix.exe       --> 限 Intel Core i系CPU 可用
    x264_k10.exe          --> 限 AMD K10/K10.5架构 CPU/APU 可用
    据Doom10的反映和本人实测,目前使用gcc -march=core2编译出来的x264在速度上无论如何都不如i686的,故不单独编译core2的版本;另外又据说k10的版本能比i686的快多达6%左右的速度,故单独编译一个
    FULL包里除了x264*.exe外,其余文件为roozhou编译(ffmpeg 2011-03-12, others 2011-03-25)
    目前direct264暂不支持64bit编译


    IP属地:湖南2楼2011-05-14 14:24
    回复
      一直想问没有lavf,你的resize哪里来的?
      还有,你的patch在哪里?


      IP属地:美国3楼2011-05-14 16:08
      回复
        resize貌似只要i686-pc-mingw里面有libav和libswscale的libpack即可,至少我就这么弄不管怎么configure都有resize...
        patch下载在2楼的MF地址


        IP属地:湖南4楼2011-05-14 17:05
        回复
          Clang是除GCC外唯一支持Objective-C的编译器?


          6楼2011-05-14 19:56
          回复
            如果要长期更新的话,找个适合于发布开源软件包的地方,比如Google Code和sf.net,这些都支持版本管理


            IP属地:山东7楼2011-05-14 23:25
            回复
              有的代码快,有的代码慢。
              clang也只是替换的gcc的前端,后端还是gcc的,所以保证了他俩的编译开关的高度兼容。


              IP属地:山东8楼2011-05-14 23:27
              回复
                其实我这个主要也就是打下patch, 自主开发性质的东西基本为0(最多也就是检查这些patch是否与现有版本代码相容,然后小作修改罢了)
                另外direct264本身就是SF的svn项目,发现就以direct264为版本控制的蓝本在更新上还更方便一些...(估计跟我不擅长运用svn/git这些版本控制也有关系)


                IP属地:湖南9楼2011-05-15 11:35
                回复
                  2011.06.22 更新
                  r380 (x264 r2008)
                  另因为MF访问困难/无限Reset
                  patch部分以后只在Google Code发布:code.google.com/p/direct264umod/


                  IP属地:湖南10楼2011-06-22 21:13
                  回复
                    2011.09.03
                    更新至r396
                    添加10bit编译版,同时修复了LimitRange下x264内部8->10 bit-depth转换的问题和高位深dither相关处理的问题
                    增加AQ Mode 3
                    configure和makefile的fprofiled部分做了下调整和优化
                    下载参考2楼的115地址和10楼的Google Code地址


                    IP属地:湖南11楼2011-09-03 15:53
                    回复
                      能不能添加for android的profile优化?


                      12楼2011-09-04 14:56
                      回复
                        不做fprofile是没问题的
                        要做fprofile我该如何模拟android环境?
                        不过最关键的,android可以借助DirectShow编码吗?
                        非win环境用x264应该是用lavf和ffms输入编码吧?


                        IP属地:湖南13楼2011-09-05 09:43
                        回复
                          请问支持直接替换MEGUI里面的X264.EXE吗?


                          IP属地:山东14楼2011-09-05 23:03
                          回复

                            是我没说清楚,只是想要个针对android的最优preset。
                            目前到最新的3.2 android os,只提供baseline级的profile(iphone4可以到profile main),而且只能解码。编码的话大概以后可能会支持,现在的编码采用的是h263。


                            15楼2011-09-06 02:11
                            回复
                              用avs输入的话,差别不大
                              GUI的话,用Direct264GUI更佳


                              IP属地:湖南16楼2011-09-06 08:49
                              回复