查看: 49493|回复: 41
上一主题 下一主题 跳转到指定楼层

Direct264 自编译版(2012.04.20更新 / x264 core120 r2171 内含10bit-depth相关)新增简单命令行压制说明

25

主题

122

存在感

271

活跃日
帅哥离线 zj262144
 4 

SOS团一星级★

发帖: 834
SOS币: 2520
注册: 2009-11-03
访问: 2013-12-07

楼主
发表于 2011/04/30 | 编辑

猜你喜欢: direct264, 10bit, 10bit压制教程


目录
1. 编译环境(普通用户可略过)
2. Patches(直接看patch说明即可)
3. 编译信息(普通用户可略过)
4. 下载
5. 10bit-depth的优劣
6. 简单命令行压制指导


一直没有看到direct264的带patch的编译版,于是决定自己动手,丰衣足食。
1. 编译环境:
win7 x64 sp1
msys 1.0.17.1
mingw-gcc 4.6.3
yasm 1.2.0
libav-v0.8-1060-g90e5*


2. Patches:
01. Ofast & LTO config
02. Film Grain Optimization (Update) (增加AVX、XOP指令集支持)
03. Fade Compensation
04. Remove stats before renaming
05. Auto VBV Settings
06. Force level
07. Filter: hqdn3d/pad/vflip/yadif
08. Logger
09. Encode Time
10. Cosmetic
11. AviSynth 16bit hack
12. Skip bit-depth filter
13. Add back "touhou" tune info (New)
14. AQ Mode 3 & 4 (Update)
15. Fix AviSynth color space converting matrix (New)
16. Fprofiled Extension (Update)


简要说一下这些patch的作用,一些未提到的请参考--fullhelp (随x264附有x264.txt)

Film Grain Optimization:
  - 使用  --fgo <int>  默认0  范围0-50  需要subme>=7  如果是2pass编码,且pass 1时没有使用--slow-firstpass, 则此参数在pass 1时强制归0(不影响pass 2)
  - 作用  顾名思义,主要针对film和grain类型视频的特别优化。更合适的名称叫PSY Film Grain Optimization, 与x264现有的--psy-rd采用的算法不同。建议设在15以内,如果是二次元动画想用的话,建议在5以内,再高就明显浪费码率,不如降低crf更佳。

Fade Compensation:
  - 使用  --fade-compensate <float>  默认0.00  建议值0.00~1.00  注意如果使用了--no-psy或者--no-mbtree, 则此参数无效;如果使用--weightp 0,则这个参数会自动+0.1
  - 作用  为淡入淡出场景补偿/分配更多的码率。对没有什么fade的场景一般不需要开,现在默认的--weightp 2在这方面就能处理得比较好。

Remove stats before renaming:
  - 使用  被动使用。
  - 作用  2pass下对--stat相关有性能提升。

Auto VBV Settings:
  - 使用   --vbv-maxrate <auto_high|auto_main>
              --vbv-bufsize <auto_high|auto_main>
  - 作用  根据--profile和--level的参数自动设定该H.264规格等级下对应的VBV数值。

Force level:
  - 使用  --level-force   
  - 作用  强制level, 确保视频符合H.264 level规范。


Filter: hqdn3d/pad/vflip/yadif
  hqdn3d
    -  使用  --vf hqdn3d:ls,cs,lt,ct    更具体参考--fullhelp
    -  作用  降噪滤镜,源于Mplayer,质量效果明显优于x264自带的--nr
  pad
    -  使用  --vf pad:[left][,top][,right][,bottom][,width][,height][,red][,green][,blue]
    -  作用  加边。如跟640x360的视频上下各加60像素黑边补成640x480,则用--vf pad:0,60,0,60
  vflip
    -  使用  --vf vflip
    -  作用  垂直翻转视频。
  yadif
    -  使用  --vf yadif:[mode][,order]    更具体参考--fullhelp
    -  作用  反交错滤镜,源于Mplayer, 按需要使用。注意当同时resize时,必须先反交错。

如果想同时使用多个滤镜,比如1280x720的片源,想resize成640x360再加黑边到640x480,参数为--vf resize:640,360/pad:0,60,0,60 其余依此类推。


Logger:
  - 使用  --log-file <string>   --log-file-level <int/string>   其中CLI窗口部分为自动显示(需要配合direct264自己的--versioninfo)
  - 作用  显示x264写入H.264 SEI的编码信息(mediainfo看到的Encoding Settings);额外以文件形式保存x264在编码时的信息。

Encode Time:
  - 使用 被动使用。
  - 作用 显示开始编码时间、结束编码时间,以及编码耗费时间。

Cosmetic:
  - 使用  被动使用。
  - 作用  美化用。crf有效值增多,以及参数传递方面的优化。

AviSynth 16bit hack:
  - 使用  被动使用。
  - 作用  让x264支持16bit AVS输入,而不需要通过avs2yuv等pipe方式。

Skip bit-depth filter:
  - 使用  被动使用。
  - 作用  跳过位深滤镜以防止因dither产生的错误。

AQ Mode 3 & 4:
  - 使用  --aq-mode 3, --aq-mode 4
  - 作用  基于aq mode 2修改而来,实际效果只能编码后用自己眼睛去看……

Ofast & LTO config + Fprofiled Extension:
  - 使用 编译相关。
  - 作用 让编译后的x264编码速度更快、体积更小。



3. Build Info:

Platform:      X86
System:        WINDOWS
cli:           yes
libx264:       internal
shared:        no
static:        yes
asm:           yes
interlaced:    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
strip:         yes
PIC:           no
visualize:     no
bit depth:     8 / 10
chroma format: all / 420



-------  4. 下载 -------
地址一:115网盘文件夹
地址二:DBank网盘文件夹 (长期未更新,备份用)
地址三:Google Code 下载页面


注意:如果是第一次使用direct264, 建议直接下载完整版:http://115.com/file/anm02rya

版本说明(仅以最新版为例):下载后里面有4个x264*.exe
x264-8bit-all.exe --> 8bit标准版本
x264-8bit-420.exe --> 8bit标准版本,只支持YUV 4:2:0输出(不影响输入)
x264-10bit-all.exe --> 10位深版
x264-10bit-420.exe --> 10位深版,只支持YUV 4:2:0输出(不影响输入)

【如果您不知道用哪个exe,那么就用x264-8bit-420.exe这个即可】

注1:可能是因为gcc优化的关系,编译的core2版在编码速度上反而还不如generic版,故不提供core2版
注2:只支持4:2:0输出(不影响输入),主要为了更快的编码速度,并且绝大部分情况也只需要4:2:0输出。
注3:不再编译Intel/AMD部分系列专用CPU版本的原因:此次更新涉及巨量汇编优化,gcc优化的优势进一步缩小;此外,对应CPU的编译版我没法做fprofile(这需要使用对应的CPU编译),而gcc fprofile本身就有加速编码速度的作用(同时大幅缩小x264.exe体积)
以上均为32bit 8bit-depth版,64bit的暂无法编译,因为direct264的部分代码未实现x86_64 asm

---------
5. 这里简单说下10bit-depth相比8bit-depth的优劣

10bit压制主要是通过提升编码的预测精度,从而在大多数有损压缩时可以采用更高的量化值,同时还能保证相当好的质量,于是可以在比8bit压制更低的码率下还原出更好的画面。

LimitRange前提,8bit量化下的Luma(亮度)和Chroma(色度)取值范围:Y:16-235,Cb/Cr:16-240。10bit量化下的Luma和Chroma取值范围:Y:64-940,Cb/Cr:64-960。所以10bit在更高的精度冗余下可以在有损编码时往往有更高的效率。

具体对于画质有利的方面主要在于:
1.防止banding(色彩平滑过渡区域的色带)产生
2.提升暗场效果
3.更好地容纳噪点
而这几项正好都是现在8bit压制中很难处理的地方。特别是对于动画,banding是个及其麻烦的东西。暗场是十分容易码率分配不足,并且产生画面劣化的部分(也就是所谓的“暗场烂掉了”;我记得凝芳文以前也抱怨过这些)。而噪点则是十分消耗码率。10bit下这些困难的东西都变得容易处理了(基本就不用特意再去额外处理啥的了)。

x264.nl于2010年10月提供了一个PDF(现在仍有),里面提到10bit能比8bit节省25%的码率(等质量)。如果只是比较banding/暗场这些的话,10bit即便只有8bit一半码率也往往可能表现更佳。另外,即使片源是8bit, 显示器本身也不支持10bit, 依然能享受到其75%的好处


不过10bit由于需要更多的采样,无损编码和极低码率编码均不如8bit(但正常来讲,没人会去用这么极端的压片方式吧)

跟8bit相比,10bit的解码需求也更高,但10bit 4:2:0比8bit 4:2:2还轻松,再加上现在解码器效率也不低,倒也不用担心太多

到目前为止还没有支持10bit硬解的手段,故播放Hi10p 1080p需要比较强劲的CPU(24p的话,Core 2双核3GHz肯定能吃得消)
Flash player还不能正确渲染10bit视频,所以10bit在线视频并不推荐(况且flash那本身的解码效率……另一方面,HTML5本身似乎也没啥消息)
所有移动播放设备全灭(Android平台某播放器可解码,但满是banding,无意义)

相同片源+压制参数比较,10bit编码比8bit慢18%~32%(测试得出的数据;不过通过合适改变参数,还是会发现10bit的编码速度+压缩率更优)<--另外注意这个数据是2011年8~9月份的了,这期间x264同时也有各种10bit汇编优化,现在的速度差距有所缩小


总体而言,10bit相比8bit还是利大于弊的,并且是能用眼睛看出来的,这也是为什么现在有人在不遗余力地推广10bit.

更多10bit vs 8bit,参考http://www.nmm-hd.org/newbbs/viewtopic.php?f=17&t=551


6. 简单压制指导(命令行方式)
也许很多童鞋从没接触过命令行方式压制,所以这里我有必要给予相关指导;但如果详细说明一方面可能偏题且信息量太大,另一方面未必大部分人是有兴趣的,所以仅直接从压制开始说明,并且尽可能简单且不出问题;如果有兴趣较为深入地学习,可以自行使用各个搜索引擎自学:)

1) 首先,请确保系统要能正确解码待压制的视频
最有效的检测方法:
下载GraphStudioNext: http://code.google.com/p/graph-studio-next/downloads/detail?name=graphstudionext_0_4_9_0.zip&can=2&q=
打开GraphStudioNext,把视频直接拖到这个里面,点那个播放按钮,没问题的话那么就可以直接压了;有问题的话,首先卸载相关解码器,建议就安装个解码包,比如K-lite之类的,一般也就不会有什么问题

另外,对于同一类视频(比如都是8bit H.264+AAC的mkv视频,一次没有问题的话,在不改变解码环境的情况下,以后也不会有问题的)

2) 获取音频编码器及相关文件,从简便性考虑给大家推荐用NeroAAC,官方下载:http://www.nero.com/eng/downloads-nerodigital-nero-aac-codec.php
只需要那个neroaacenc.exe即可(所以从其他地方能获取也可,不过如果出问题了那么还是从官方地址下载)
另外因为音频编码器默认是只支持wav输入的,所以视频作为输入的话,一般是需要用到管道std输入
需要先下载ffmpeg/libav
http://ffmpeg.zeranoe.com/builds/
请找日期最新的"32-bit Builds (Static)"下载,只需要里面的ffmpeg.exe即可;为了不与direct264里的ffmpeg重名,建议其中一个另改名称(我的做法是direct264里的ffmpeg.exe改为ffmpegr.exe;官方的版本保持不变)

3) 新建一个记事本(必须与以上所有文件在同一目录,当然如果本身熟悉命令行有其他做法,不过应该也没必要看这个简单教程了吧;两个ffmpeg的命名如步骤"2)"所示;要使用哪个x264就改哪个的名字,改exe本身或者这个命令里改均可,只要对应即可
CODE:

@ECHO OFF & CD/D "%~dp0"
:Enc1
IF "%~1"=="" GOTO :EOF

x264 --crf 24 --preset 8 -r 5 -b 4 --deldup 12:0.8:160 -I 300 -i 2 --scenecut 50 -f 1:1 --psy-rd 0.3:0 --aq-mode 2 --aq-strength 0.8 -o "%~dpn1_v.mp4" "%~1"

ffmpeg -i "%~1" -f wav - | neroaacenc -q 0.28 -if - -ignorelength -of "%~dpn1_a.m4a"

ffmpegr -i "%~dpn1_v.mp4" -vcodec copy -i "%~dpn1_a.m4a" -acodec copy -y "%~dpn1_enc.mp4" -map 0:v -map 1:a

SHIFT /1
GOTO :Enc1

复制以上内容,保存,文件后缀由txt改为bat

4) 把你要压的视频拖入这个bat即可,文件名带"_enc"即是你要的编码后的文件,其余如果不要了可以自行删除(不在bat里弄是怕出错又误删文件)。本方法支持批量拖拽


[ 此贴被upyzl在2012-04-20 12:19重新编辑 ]
此帖被评分,最近评分记录
萌度:1(疯狗咬猫拳)

67

主题

189

存在感

83

活跃日
 6 

SOS团三星级★★★

1楼
发表于 2011/04/30 | 编辑
咳、咳、  看了半天、、不知道是干嘛用的、、、不过、如果是自己编译的话、、嗯、厉害的说

关于我们|无图版|SOSG WIKI

Copyright © 2006-2024 SosG.Net
Total 0.035165(s) query 9, Gzip enabled,  沪ICP备07006640号-3