x264是一个开源的H.264视频编码器库。是目前最好的有损视频编码器。php
基本用法是html
x264 [options]-o outfile infile
主页: http://www.videolan.org/developers/x264.htmllinux
目录[隐藏] |
H.264是ITU(International Telecommunication Unite 国际通讯联盟)和MPEG(Motion Picture Experts Group 运动图像专家组)联合制定的视频编码标准。在ITU的标准里称为H.264,在MPEG的标准里是MPEG-4的一个组成部分:MPEG-4 Part 10,又叫Advanced Video Codec,所以经常称为MPEG-4 AVC或直接叫AVC。ide
H.264编码能实现很是好的压缩比,有普遍的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为表明)和众多强大的厂商做后盾。工具
有不少人在编译x264,特别是Win32平台的编译版。编码
咱们下载到的x264.exe是一个命令行工具,不须要安装,x264.exe须要在命令行里输入命令,没有GUI。spa
不能否认有GUI的工具用来很方便,更容易上手,好比用的最普遍的MeGUI,此外还有ripbot、staxrip等GUI。MeGUI能够自动更新编码经常使用的软件,做为自动下载的工具却是不错。本教程主要讲解命令行参数,GUI也是调用同一个x264,所以都用对应的选项。.net
输入“x264 --help”会显示帮助信息。命令行
输入“--longhelp”或“--fullhelp”查看详细选项或全部的选项。设计
x264.exe的用法是,在命令行里输入形如
>x264 [--参数名 参数值 ...] --output 输出文件 输入文件
其中方括号里是可选的,“...”是能够输不少个的意思。每一个参数名以前要加“--”,空格后跟此参数名的参数值;必定要有“--output”指定输出文件;必定要指定输入文件,但前面没有“--”之类的提示符号。
此外,还有短参数模式。这是为了简化某些经常使用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果同样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数其相应的短参数都列在此参数的前面。
实际命令实例:
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o output.mp4 input.avs
调用x264编码当前目录下的"input.avs"文件,输出"output.264"。
若是文件路径有空格须要加上引号。
在Windows XP和Windows 7中,能够直接把输入文件拖拽到cmd里。
若是用了64位的Windows Vista或Windows 7,就能够用64位的x264。64位的x264大约能比32位的x264快上10%左右。可是用AviSynth输入时,64位的x264只接受64位的AviSynth输入,32位的x264只接受32位的AviSynth。虽然如今有64位的AviSynth和很多经常使用的滤镜,可是大多数人仍是愿意用32位的AviSynth。如何让64位的x264配合32位的AviSynth呢?
方法是用pipe。用命令行工具(如ffmpeg、mencoder或avs2yuv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操做也是在命令行里实现的。
先下载ffmpeg的Windows编译版(参见FFmpeg(Windows版)),能够用static link版本。目前ffmpeg在Windows上只有32位的编译版。和x264同样,ffmpeg放在任何目录里都能运行,假设和x26四、要进行编码的input.avs放在一个目录里。
>ffmpeg -i input.avs -f yuv4mpegpipe -an -v 0 - | x264 [options] --demuxer y4m -o output.264 -
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,可是输入文件写“-”。
mencoder有不少有价值的滤镜,用起来也很方便。libx264能够编译进mencoder自己,和单独的x264效果同样。mencoder也能够打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里就带有mencoder。
一样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。
>mencoder input.avs -vf format=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -
mencoder部分不一样,x264部分和用ffmpeg时同样。
avs2yuv原本是为了给linux上wine来用的,由于AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。固然也能够用来pipe给64位的x264。
一样假设avs2yuv、x264和要编码的的input.avs在一个目录里。
>avs2yuv input.avs - | x264 [options] --demuxer y4m -o output.264 -
avs2yuv的输出格式默认是yuv4mpeg,x264用y4m格式解码便可从中读取分辨率,因此无须再用--input-res指定分辨率。
以上介绍了3种方法,我的比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法同样。