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
    回复
      resize貌似只要i686-pc-mingw里面有libav和libswscale的libpack即可,至少我就这么弄不管怎么configure都有resize...
      patch下载在2楼的MF地址


      IP属地:湖南4楼2011-05-14 17:05
      回复
        其实我这个主要也就是打下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
            回复
              不做fprofile是没问题的
              要做fprofile我该如何模拟android环境?
              不过最关键的,android可以借助DirectShow编码吗?
              非win环境用x264应该是用lavf和ffms输入编码吧?


              IP属地:湖南13楼2011-09-05 09:43
              回复
                用avs输入的话,差别不大
                GUI的话,用Direct264GUI更佳


                IP属地:湖南16楼2011-09-06 08:49
                回复
                  也许可以--profile baseline --preset veryslow 然后配合tune;再限制下level,用我这个编译版,最好加个--level force
                  不如试一试


                  IP属地:湖南17楼2011-09-06 08:51
                  回复
                    最后写错,是--level-force


                    IP属地:湖南18楼2011-09-06 08:52
                    回复
                      Android环境受限应该是硬性原因吧,如果没办法摆脱profile baseline的话,低码率是没有什么好办法的


                      IP属地:湖南20楼2011-09-06 13:11
                      回复
                        VAX or AVX ?
                        支持AVX指令集(包括我加的patch里的fgo)
                        不过基本没什么用,下代Haswell的AVX2对x264来说更有用


                        IP属地:湖南22楼2011-09-07 20:19
                        回复
                          关于介绍,参照
                          tieba。baidu。com/p/476310665
                          bbs。popgo。org/bbs/read。php?tid=494982
                          ProFiles里本质也是参数设置吧,direct264在参数上可说是只多不少
                          Direct264GUI
                          bbs。popgo。org/bbs/read。php?tid=524640


                          IP属地:湖南27楼2011-09-08 19:04
                          回复
                            优势的话,一方面是完美支持VFR以及VFR处理
                            另一方面是内嵌字幕很方便,如果用批处理一条龙式地处理或者批量压制会有极大方便的好处
                            再就是很多处理可以不用avs,因为avs本身架构关系有诸如内存管理不佳、VFR处理难等方面的问题,稳定版的avs又不支持多线程,并且处理的文件过大也会出问题


                            IP属地:湖南28楼2011-09-08 19:18
                            回复
                              静态场景较多的话,直接用deldup删掉不是最省事么,为了压缩率ref和bframe也不需要调高,即节约了压制时间,又节省了体积,何乐而不为呢
                              我之前有段时间也压了不少60fps的游戏视频,deldup也带来了不少好处
                              此外,某些动画经常会出现OP或者ED部分是29.97fps或59.94fps但正片部分是23.976fps这样的,用direct264直接压就成了,也不用担心音画不同步或者其他各种因为帧率而造成的问题
                              其实你说的“大动态场景”的情况是最不能体现VFR价值的情况……


                              IP属地:湖南32楼2011-09-10 12:27
                              回复