标题：x264
简介
[1]H.264是ITU（International Telecommunication Unite 国际通信联盟）和MPEG（Motion Picture Experts Group 运动图像专家组）联合制定的视频编码标准。从1999年开始，到2003年形成草案，最后在2007年定稿有待核实。在ITU的标准里称为H.264，在MPEG的标准里是MPEG-4的一个组成部分--MPEG-4 Part 10，又叫Advanced Video Codec，因此常常称为MPEG-4 AVC或直接叫AVC。
H.264编码能实现非常好的压缩比，有广泛的适用码率（适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流），良好的硬件支持（以PSP、iPod和显卡DXVA为代表）和众多强大的厂商作后盾。
x264始于2003年，从当开源社区的MPEG4-ASP编码器Xvid小有所成时开始的，经过几年的开发，特别是Dark Shikari加入开发后，x264逐渐成为了最好的视频编码器。[2]
性价比
理论知识，我估计很多人也不喜欢看，直接说结论。
同样的片源、码率情况下，用x264编码出的视频(一般是mkv或者mp4格式)一定会比rmvb画质更好（264高级参数发挥的作用）。还有请扔掉“mkv版一定会很大，rmvb一定会很小”的错误观念，一般来说用于收藏的mkv版才会很大！[3]
接上补充 x264是一种编码方式 而RMVB是一种封装格式完全没有可比性 常见的编码方式和封装格式有：x264：MP4/MKV/FLV R10/R9：RMVB/RM XVID/DIVX：AVI
如果对结论有所怀疑，可以自行做实验对比，但是必须保证条件公平，即输入编码器的视频（片源）必须相同，对画面所做的处理必须相同（也就是不可以一个锐化一个不锐化这样的），输出的视频的码率必须相同或者相差极小。因为要对比的是x264与编码rmvb的软件，对照实验应该尽可能排除其他因素的干扰
特点
■ 8x8与4x4自适应空间域转换
■ 自适应B帧选择
■ B帧可作为参考帧/自由的帧顺序
■ CAVLC/CABAC熵编码
■ 自定义精确的矩阵模板
■ I帧：所有宏块格式（16x16, 8x8, 4x4, 以及有全部预测的PCM）
■ P帧：所有的分割块（从16x16到4x4）
■ B帧：分割块从16x16到8x8（包括skip/direct）
■ 隔行扫描(MBAFF)
■ 多个参考帧
■ 码率控制：固定量化，固定质量，一次或者多次编码的平均码率，可选的VBV参数
■ 场景变换检测
■ B帧时间域、空间域direct模式自适应选择
■ 可在多个CPU平行编码
■ 预测性的无损编码（x264似乎也是所有基于H.264标准的编码器中唯一实现这项的）
■ 心理视觉优化，保留更多的细节（自适应量化，psy-RD，psy-trellis）
■ 可用于手动调整码率分配的zones参数
使用介绍
命令行界面的x264我们下载到的x264.exe是一个命令行工具，不需要安装，随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么，然后就没了。x264.exe需要在命令行里输入命令，没有GUI。
不可否认有GUI的工具用来很方便，更容易上手，比如用的最广泛的MeGUI，此外还有ripbot、staxrip等GUI。doom9上有都是各种GUI，一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件，作为自动下载的工具倒是不错。本文主要讲解命令行参数，GUI也是调用同一个x264，因此都用对应的选项。[2]基本用法x264.exe的用法是，在命令行里输入形如
>x264 [--参数名 参数值 ...] --output 输出文件 输入文件
其中方括号里是可输入可不输入的，“...”是可以输很多个的意思。观察这个形式，每个参数名之前要加“--”，空格后跟此参数名的参数值；一定要有“--output”并指定输出文件；一定要指定输入文件，但前面没有“--”之类的提示符号。
此外，还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名，和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。
要查看x264的帮助，输入x264 --help。输入x264 --longhelp查看更详细的帮助，--fullhelp是查看全部帮助
实际命令实例:
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.264 ep01.avs
调用x264编码当前目录下的"ep01.avs"文件，输出"psp.264"。
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\th9\rec.avi"
这个例子中，x264.exe、和输入文件都不在当前目录下，也不输出到当前路径，就要写完整的路径，如果有空格就需要在完整的路径左右加上引号。
在Windows XP和Windows 7中，把文件拖拽到cmd里，cmd会自动把文件的完整路径写在命令行上的。[2]输入输出文件类型在加入了ffms/lavf后，x264可以直接输入几乎所有类型的片子，而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型，除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。
输入：
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由ffms或lavf打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。
输出：
x264可以输出没有封装的H.264视频流，扩展名是.264；matroska视频，扩展名是.mkv；flash视频，扩展名是.flv；mp4视频，扩展名是.mp4。mkv、mp4和flv可以是vfr的。
x264通过输出文件的扩展名判断输出文件类型。[2]preset和tune系统x264的参数繁多，开发者为了方便使用者、简化输入和提出编码建议，设计了一套快速调用参数的系统。如果没有特别的需要，请尽量使用preset和tune系统。这套开发者推荐的参数比各种道听途说的参数更合理。
在使用了preset和tune以后，依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。
--preset
通过--preset的参数调节编码速度和质量的平衡。
--preset的值有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo。从快到慢，参数越来越EP。默认是medium。
--tune
通过--tune的参数值指定片子的类型，是和视觉优化的参数，或有特别的情况。
--tune的值有
film：电影、真人类型；
animation：动画；
grain：需要保留大量的grain时用；
stillimage：静态图像编码时使用；
psnr：为提高psnr做了优化的参数；
ssim：为提高ssim做了优化的参数；
fastdecode：可以快速解码的参数；
zerolatency：零延迟，用在需要非常低的延迟的情况下，比如电视电话会议的编码。[2]码率控制视频的码率直接影响到了片子的编码质量。要想效果好，码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积（码率）之间始终是一对矛盾。这就需要我们通过实践，在强大的编码器的帮助下总结出合适的码率，实现尽量好的效果。
x264有4种码率控制方式，分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含npass bitrate。
1pass bitrate和qp（恒定量化值）一般不推荐使用。
crf
--crf 23 （默认）
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码，如果对码率没要求请尽量使用crf模式。
可用的值从1到51，越小编码质量越好，码率越高。一般使用16到24，可以为浮点。
crf并不是恒定质量的方式，同一片子同一crf值，其他参数不同可能码率和质量能差比较大，不同的片子之间就更没有可比性了。
2pass bitrate
这种方式可以精确的得到想要的平均码率，2pass代表需要做2次编码，第一遍编码x264先分析全片，得到一个stats文件和一个mbtree文件（默认使用mbtree）。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率（或文件大小）一定要用2pass（或多pass）编码。
除了2pass，还有多pass模式，在之前分析的基础上再继续分析，理论上会使码率分配更加合理，但实际上2pass已经足够了。
--bitrate 1000 （以1000kbps码率为例）
>x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs
先输入第一行，等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件，2pass需要这两个文件已完成最后的编码，最后输出文件。 
默认情况下，1pass是以“快速”参数跑的，而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL，在Windows里，这个文件名是保留的，因此不会有任何输出的已编码的文件。 
尽量让1pass和2pass的视频一致，如果改变了视频，分析的结果就会变得比较不准确。 
此外，1pass可以用crf方式跑，而且可以输出编码的结果，也就是说先跑个1pass看看，如果大小和预想的偏差太多，就再跑个2pass。但由于1pass默认用“快速”参数跑，因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。 
>x264 --crf 20 --pass 1 --slow-firstpass --tune animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs
1pass会输出3个文件：1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件，后一个是编码的结果。如果对编码结果不满意，则继续用分析的结果跑2pass。 
2pass必须用bitrate模式跑，不能用crf跑。 [2]
DXVA
DXVA（DirectX Video Accelaration）通常被称为硬解，是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面，HD2xxx以上的系列都可以DXVA；nVidia的显卡方面，GeForce8000以上的系列都可以DXVA。
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性，用比较老的CPU解码720p和1080p通常比较吃力，因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子，建议尽量使用能够DXVA的参数压制。[2]
开发者
x264 Team 成员：
Laurent Aimar
Loren Merritt
Eric Petit (OS X)
Min Chen (vfw/asm)
Justin Clay (vfw) 
M&aring;ns Rullg&aring;rd
Radek Czyz
Christian Heine (asm)
Alex Izvorski
Alex Wright
获得奖项
2005年 赢得Doom9's 2005 codec shoot-out奖项
2006年 在第3届MSU MPEG-4 AVC/H.264视频编码比赛中获奖
2007年 在第4届MSU MPEG-4 AVC/H.264视频编码比赛中获奖