H.264是视频编码标准。

X264是它的开源实现,是视频编码器。

目录

[隐藏

[编辑]编码器特性

  • 8x8 and 4x4 adaptive spatial transform
  • Adaptive B-frame placement
  • B-frames as references / arbitrary frame order
  • CAVLC/CABAC entropy coding
  • Custom quantization matrices
  • Intra: all macroblock types (16x16, 8x8, 4x4, and PCM with all predictions)
  • Inter P: all partitions (from 16x16 down to 4x4)
  • Inter B: partitions from 16x16 down to 8x8 (including skip/direct)
  • Interlacing (MBAFF)
  • Multiple reference frames
  • Ratecontrol: constant quantizer, constant quality, single or multipass ABR, optional VBV
  • Scenecut detection
  • Spatial and temporal direct mode in B-frames, adaptive mode selection
  • Parallel encoding on multiple CPUs
  • Predictive lossless mode
  • Psy optimizations for detail retention (adaptive quantization, psy-RD, psy-trellis)
  • Zones for arbitrarily adjusting bitrate distribution
  • 8x8与4x4自适应空间域转换
  • 自适应B帧选择
  • B帧可作为参考帧/自由的帧顺序
  • CAVLC/CABAC熵编码
  • 自定义精确的矩阵模板
  • I帧:所有宏块格式(16x16, 8x8, 4x4, 以及有全部预测的PCM)
  • P帧:所有的分割块(从16x16到4x4)
  • B帧:分割块从16x16到8x8(包括skip/direct)
  • 隔行扫描(MBAFF)
  • 多个参考帧
  • 码率控制:固定量化,固定质量,一次或者多次编码的平均码率,可选的VBV参数
  • 场景变换检测
  • B帧时间域、空间域direct模式自适应选择
  • 可在多个CPU平行编码
  • 预测性的无损编码
  • 心理视觉优化,保留更多的细节(自适应量化,psy-RD,psy-trellis)
  • 可用于手动调整码率分配的zones参数

在ITU的标准里称为H.264,在MPEG的标准里是MPEG-4的一个组成部分:MPEG-4 Part 10,又叫Advanced Video Codec,因此常常又称为MPEG-4 AVC或直接叫AVC。

适用于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流。

[编辑]输入输出文件类型

在加入了ffms/lavf(libavformat或ffmpegsource这两个库)后,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输入不需要指定片子的分辨率。

(注:YUV是被欧洲电视系统所采用的一种颜色编码方法)

[编辑]输出

x264可以输出没有封装的H.264视频流,扩展名是.264;matroska视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。 (VFR即Variable Frame Rate(可变帧率)的视频编码,这种VFR视频的帧率是不固定的,它可在动态画面中使用较大的帧率,而在静态画面中使用较小的帧率,这样可以有效的减少视频文件的体积,并改善动态画面的质量。它的作用比目前广泛使用的VBR(可变码率)更为明显。)

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做了优化的参数;

(structural similarity (SSIM) index measurement system一种衡量两幅图像相似度的新指标,其值越大越好,最大为1)

  • fastdecode:可以快速解码的参数;
  • zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。

[编辑]码率控制

视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。

x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含npass bitrate。

1pass bitrate和qp(恒定量化值)一般不推荐使用。

[编辑]crf

--crf 23 (默认)

一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。(VBR(Variable Bit Rate)动态比特率)

可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。

crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。

[编辑]2pass bitrate

这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。

除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。

--bitrate 1000 (以1000kbps码率为例)

>x264 --bitrate1000--pass1--tune animation --preset slower --stats"1pass.stats"-o NUL input.avs   >x264 --bitrate1000--pass2--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 --crf20--pass1--slow-firstpass--tune animation --preset slower --stats"1pass.stats"-o output1pass.264 input.avs   >x264 --bitrate1000--pass2--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。

[编辑]艺搜参考

官方网站

http://download.videolan.org/pub/videolan/x264/snapshots/

X264学习1:简介的更多相关文章

  1. 现代3D图形编程学习-基础简介(2) (译)

    本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...

  2. 现代3D图形编程学习-基础简介(1) (译)

    本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...

  3. AspectJ基础学习之一简介(转载)

    AspectJ基础学习之一简介(转载) 一.为什么写这个系列的博客   Aspectj一个易用的.功能强大的aop编程语言.其官网地址是:http://www.eclipse.org/aspectj/ ...

  4. springmvc学习笔记(简介及使用)

    springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...

  5. MXNet深度学习库简介

    MXNet深度学习库简介 摘要: MXNet是一个深度学习库, 支持C++, Python, R, Scala, Julia, Matlab以及JavaScript等语言; 支持命令和符号编程; 可以 ...

  6. Python学习--Python简介

    Python 简介 Python是一种解释型.编译性.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. P ...

  7. [原创]java WEB学习笔记96:Spring学习---Spring简介及HelloWord

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. JavaWeb学习----JSP简介及入门(含Eclipse for Java EE及Tomcat的配置)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  9. Hive入门学习--HIve简介

    现在想要应聘大数据分析或者数据挖掘岗位,很多都需要会使用Hive,Mapreduce,Hadoop等这些大数据分析技术.为了充实自己就先从简单的Hive开始吧.接下来的几篇文章是记录我如何入门学习Hi ...

随机推荐

  1. Android Developer -- Bluetooth篇 开发实例之三 管理连接

    Managing a Connection When you have successfully connected two (or more) devices, each one will have ...

  2. 细说JavaScript对象(1):对象的使用和属性

    JavaScript 中的一切都可以视为对象,除了两个特例:null 和 undefined. false.toString(); // 'false' [1, 2, 3].toString(); / ...

  3. python 人工智论

    https://www.zhihu.com/question/21395276 基于python深度学习库DeepPy的实现:GitHub - andersbll/neural_artistic_st ...

  4. BeanUtils——JavaBean相互转换及字典翻译

    JavaBean相互转换 在升级公司架构过程中,发现有大量Entity与DTO相互转换的问题,并且其中还伴随DTO中的数据字典翻译,所以特意写个工具类,主要利用spring提供的BeanUtils工具 ...

  5. JAVA实现通用日志记录

    原文:http://blog.csdn.net/jinzhencs/article/details/51882751 前言: 之前想在filter层直接过滤httpServerletRequest请求 ...

  6. win10 virtualenv

    一 创建新虚拟环境 virtualenv appiumenv 二 激活 appiumenv\Scripts\activate 注意是正斜杠,

  7. java内存溢出分析工具:jmap使用实战

    在一次解决系统tomcat老是内存撑到头,然后崩溃的问题时,使用到了jmap. 1 使用命令 在环境是linux+jdk1.5以上,这个工具是自带的,路径在JDK_HOME/bin/下 jmap -h ...

  8. ISP基础一

    1.专业术语 [ColorTemp] 色温 所谓色温,简而言之,就是定量地以开尔文温度(K)来表示色彩.英国著名物理学家开尔文认为,假定某一黑体物质,能够将落在其上的所有热量吸收,而没有损失,同时又能 ...

  9. 使用echarts简单制作中国地图,echarts中国地图

    网站需要一张中国地图,并且鼠标经过某个省份,该省份的省份名字显示,而且该省份的地区会变色显示. 第一种方法: 将每个省份的图片定位(先隐藏),拼合成一张中国地图,然后再定位省份名称,鼠标经过省份名字, ...

  10. 【Zookeeper】Zookeeper 和他的小伙伴们

    ZK实际应用场景.实例: