查看“X264使用介绍”的源代码
←
X264使用介绍
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于这些用户组的用户执行:ninja、
机器人
、
管理员
您可以查看和复制此页面的源代码。
x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。 主页: http://www.videolan.org/developers/x264.html x264.nl当前版本信息:{{X264ver}} == H.264和x264 == H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。 H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。 x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。 == 获取x264 == x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。 *http://x264.nl 的编译版没有任何patch,即所谓纯净版。 *[http://x264.fushizen.eu/ jeeb编译版] *[http://komisar.gin.by/ komisar编译版] *rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖 *[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版] *[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版] *[http://www.nmm-hd.org/x264/ MythCreator的编译版] *[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。 *还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版 我们一般选择32位的最新版。 此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。 == 命令行界面的x264 == 我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。 不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。 == 命令行的操作 == 按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。 图 假设x264.exe在E:\Encoder\文件夹,输入 >cd /D E:\Encoder 回车 图 改变当前目录到E:\Encoder了。接下来,输入 >x264 回车 图 接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。 我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。 >x264 --help 返回 x264 core:104 r1688M 0b36c6d Syntax: x264 [options] -o outfile infile Infile can be raw (in which case resolution is required), or YUV4MPEG (*.y4m), or Avisynth if compiled with support (no). or libav* formats if compiled with lavf support (no) or ffms support (yes). Outfile type is selected by filename: .264 -> Raw bytestream .mkv -> Matroska .flv -> Flash Video .mp4 -> MP4 Output bit depth: 8 (configured at compile time) Options: -h, --help List basic options --longhelp List more options --fullhelp List all options Example usage: Constant quality mode: x264 --crf 24 -o <output> <input> '''中间略...''' Input/Output: -o, --output Specify output file --sar width:height Specify Sample Aspect Ratio --fps <float|rational> Specify framerate --seek <integer> First frame to encode --frames <integer> Maximum number of frames to encode --level <string> Specify level (as defined by Annex A) --quiet Quiet Mode Filtering: Filter options may be specified in the name=value format --vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the input file Available filters: crop:left,top,right,bottom resize:[width,height][,sar][,fittobox][,csp][,method] select_every:step,offset1[,...] 这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 [options] -o outfile infile”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。 接着输入 >x264 --fullhelp 列出了所有选项。 x264.exe的用法是,在命令行里输入形如 >x264 [--参数名 参数值 ...] --output 输出文件 输入文件 :其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号。 此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。 实际命令实例: >x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 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会自动把文件的完整路径写在命令行上的。 == x264的输入输出文件类型 == 在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。 *输入: x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|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通过输出文件的扩展名判断输出文件类型。''' == x264的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:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。 == 码率控制 == 视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。 x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass 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跑。 == 64bit的x264 == 如果用了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输入 === 先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs放在一个目录里。 >ffmpeg -i input.avs -f yuv4mpegpipe -an -v 0 - | x264 [options] --demuxer y4m -o output.264 - 先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”。 === 用mencoder输入 === 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输入 === 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可以从中读取分辨率,所以无须再用--input-res指定分辨率。 以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。 == DXVA == 参考主条目: [[DXVA和psp]] 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的参数压制。 [[分类:视频编码器]] [[分类:x264]]
返回至“
X264使用介绍
”。
导航菜单
个人工具
登录
名字空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
社区门户
新闻动态
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息
其他资源
AviSynthWiki(英语)
avisynth.info(日语)
NMM论坛(讨论区)