X264编码器参数

  摘要:x264是开源的AVC/H264编码器的实现版本,了解其参数能够更加充分的理解对应视频编码在工业应用。本文根据网络上的资料收集和整理了大部分H264编码器的参数和其作用。
  关键字:x264

1. x264简介

  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逐渐成为了最好的视频编码器。

  源代码参考X264源代码

2 X264参数

  通常安装的x264是一个可执行文件,该可执行文件可以通过命令参数来执行具体的编码。下面简单描述每个参数的具体作用。

2.1 预设参数

  • –profile:设置H264视频的配置,设置成功会覆盖所有的参数设置。可选参数有:
    • baseline:无损,非隔行扫描,–no-8x8dct --bframes 0 --no-cabac --cqm flat --weightp 0;
    • main:–no-8x8dct --cqm flat,无损;
    • high:无损;
    • high10:支持8-10bit,无损;
    • high422:支持8-10bit,YUV420和YUV422;
    • high444:支持8-10bit,YUV420、YUV422和YUV444。
  • –present:压缩效率和运算时间中平衡的预设值。如果指定了一个预设值,它会在其它选项生效前生效。可选的值有:ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow和placebo。
  • –tune:上一个选项基础上进一步优化输入。如果定义了一个tune值,它将在preset之后,其它选项之前生效。可选:film、animation、grain、stillimage、psnr、ssim、fastdecode、zerolatency和touhou。
  • –slow-firstpass:使用–pass 1会在解析命令行时增加一些设置。如果设置preset=placebo则自动关闭此特性。如果想显式关闭此特性,使用slow-firstpass。

2.2 帧类型选项

  • -I, --keyint:设置GOPSize,默认值为250;

IDR帧是视频流的“分隔符”,所有帧都不可以使用越过关键帧的帧作为参考帧。IDR帧是I帧的一种,所以它们也不参照其它帧。这意味着它们可以作为视频的搜索(seek)点。通过这个设置可以设置IDR帧的最大间隔帧数(亦称最大图像组长度)。较大的值将导致IDR帧减少(会用占用空间更少的P帧和B帧取代),也就同时减弱了参照帧选择的限制。较小的值导致减少搜索一个随机帧所需的平均时间。

  • -i, --min-keyint:最小的GPOSize,默认为auto
    • no-scenecut:完全关闭自适应I帧决策;
    • scenecut:设置决策使用I帧、IDR帧的阈值(场景变换检测);

    x264会计算每一帧与前一帧的不同程度并得出一个值。如果这个值低于scenecut,那么就算检测到一个“场景变换”。如果此时距离上一帧的距离小于 min-keyint则插入一个I帧,反之则插入一个IDR帧。较高的值会增加侦测到“场景变换”概率。

    • intra-refresh:让x264为每keyint数量的帧使用宏块内部编码取代IDR帧;

    块以水平移动列的方式更新,也叫刷新波。对于低延迟的流,这样可以让帧的尺寸比使用标准的IDR帧更加保持恒定。而且这样可以增强视频流对丢包的容错能力。这个选项会降低压缩率,所以在确实需要的时候才选择它。

  • -b, --bframes:设置x264可使用的B帧的最大连续数量,默认3;
    • –b-adapt:设置B帧决策算法,这个选项会影响到x264使用P帧或者B帧;

      • 0:关闭。总是使用B帧。和以前的 no-b-adapt选项效果相同;
      • 1:‘快速’算法。快速,–b-frames越大速度越快;
      • 2:‘最佳’算法,慢速,–b-frames越大速度越慢;
    • –b-bias:调节使用B帧的力度。越大的值越偏向B帧,可以在-100和100之间选择。100或-100不能保证完全或是全是B帧(使用 –b-adapt 0);

    • –b-pyramid:允许B帧作为参照帧。如果关闭,那么只有I帧和P帧才能作为参照帧。可以作为参照帧的B帧的量化参数会介于P帧和普通B帧之间。只在–b-frames设置大于等于2时此选项才生效。如果是在为蓝光光盘编码,请使用none或者strict。

      • none:不允许B帧作为参照帧;
      • strict:一个图像组内只允许一个B帧参照帧,这是蓝光编码强制要求的标准;
      • normal:任意使用B帧参照帧;
    • –open-gop:Open-GOP是一个提升压缩效率的编码技术,有些解码器不能完全支持open-GOP流,因此这个选项默认关闭;

      • none:关闭
      • normal:开启
      • bluray:开启。一个稍低效的open-GOP版本,因为normal模式不能用于蓝光编码。

      open and closed gops all you need to know

    • –no-cabac:关闭CABAC (Context Adaptive Binary Arithmetic Coder)压缩,使用较为低效的CAVLC (Context Adaptive Variable Length Coder)。这两者在压缩效率和解码效率上有10%-20%的差别;

  • -r --ref:控制DPB (Decoded Picture Buffer)的大小。可以在0-16之间选择。简单地说,就是设置P帧可以选择它之前的多少帧作为参照帧(B帧的值要小1-2,取决于那个B帧能不能作为参照)。最小可以选择值1,只参照自己前面的那帧。注意H.264标准限制了每个level可以参照的帧的数量。如果选择level4.1,1080p最大选4,720p最大选9;
    • no-deblock:完全关闭内置去块滤波器;
  • -f --deblock:调节H.264标准中的内置去块滤波器。这是个性价比很高的选择;
    • –slices:设置每帧的分片数,强制使用矩形分片;
    • –slice-max-size:设置每个分块包括NAL头的最大大小(bytes);
    • –slice-max-mbs:设置每个分块包含的最大宏块数量;
    • –slice-min-mbs:设置每个分块包含的最小宏块数量;
    • –tff:开启隔行编码并设置上半场在前。x264的隔行编码使用MBAFF,因此效率不如逐行扫描。所以,仅在需要在隔行显示的设备上显示时才开启这个选项;
    • –bff:开启隔行编码并设置下半场在前;
    • –constrained-intra:开启SVC编码的底层要求的强制帧内预测;
    • –pulldown:为你的输入流(逐行扫描的,固定帧率的)使用一组预设的“soft pulldown”;可选的参数有:none、22、32、64、double、triple、euro;
    • –fake-interlaced:把流标志为隔行的但不按隔行编码。用于编码25p和30p的蓝光兼容视频;
    • –frame-packing:对于立体视频,定义帧排列方式:
      • 0:棋盘格 - 像素交替来自左眼和右眼
      • 1:列交替 - 左眼和右眼通过列交替交织
      • 2:行交替 - 左眼和右眼通过行交替交织
      • 3:左右并排 - 左眼在左侧,右眼在右侧
      • 4:上下并排 - 左眼在上方,右眼在下方
      • 5:帧交替 - 每帧显示一个视图
      • 6:单眼 - 2D帧,没有任何帧包装
      • 7:平铺格式 - 左眼在左上方,右眼分割在其余区域

2.3 码率控制

  • -q, --qp:强制使用恒定的QP值(0-81,0=无损);
  • -B, --bitrate:设置比特率(kbit/s);
    • –crf:基于质量的可变比特率(-12-51)[23.0];
    • –rc-lookahead:预测帧类型的帧数 [40];
    • –vbv-maxrate:最大本地比特率(kbit/s)[0];
    • –vbv-bufsize:设置VBV缓冲区大小(kbit)[0];
    • –vbv-init:初始VBV缓冲区占用率 [0.9];
    • –crf-max:使用CRF+VBV时,限制RF到此值可能导致VBV下溢!;
    • –qpmin:设置最小QP值 [0];
    • –qpmax:设置最大QP值 [81];
    • –qpstep:设置最大QP步长 [4];
    • –ratetol:ABR速率控制和VBV的容差 [1.0];
    • –ipratio:I和P之间的QP因子 [1.40];
    • –pbratio:P和B之间的QP因子 [1.30];
    • –chroma-qp-offset:色度与亮度之间的QP差异 [0];
    • –aq-mode:AQ方法 [1];
      • 0: 禁用;
      • 1: 方差AQ(复杂度掩码);
      • 2: 自动方差AQ;
      • 3: 自动方差AQ,并偏向于暗场景;
    • –aq-strength:减少平坦和纹理区域中的块和模糊 [1.0];
  • -p, --pass:启用多通道速率控制;
    • 1: 第一遍,创建统计文件;
    • 2: 最后一遍,不覆盖统计文件;
    • 3: 第N遍,覆盖统计文件;
    • –stats:用于两遍统计的文件名 [“x264_2pass.log”];
    • –no-mbtree:禁用mb-tree速率控制;
    • –qcomp:QP曲线压缩 [0.60];
    • –cplxblur:减少QP的波动(曲线压缩之前) [20.0];
    • –qblur:减少QP的波动(曲线压缩之后) [0.5];
    • –zones:调整视频区域的比特率;每个区域的格式为<起始帧数>,<结束帧数>,<选项>,其中<选项>可以是q=<整数>(强制QP)或 b=<浮点数>(比特率倍增器);
    • –qpfile:强制一些或所有帧的帧类型和QP值;每行的格式:帧号 帧类型 QPQP是可选的(none表示由x264选择)。帧类型:I,i,K,P,B,b。K=<I或i>取决于open-gop设置QP受qpmin/qpmax的限制。

2.4 分析

  • -A,–partitions:要考虑的分区。可选值为[“p8x8, b8x8, i8x8, i4x4”],表示考虑的分区类型,包括p8x8、p4x4、b8x8、i8x8、i4x4、none和all。
    • –direct:直接运动矢量(MV)预测模式。可选值为[“spatial”],表示直接MV预测模式,包括none、spatial、temporal和auto。
    • –no-weightb:禁用B帧的加权预测。
    • –weightp:P帧的加权预测。可选值为[2],表示加权预测的类型,包括0(禁用)、1(加权参考帧)和2(加权参考帧+复制帧)。
    • –me:整数像素运动估计方法。可选值为[“hex”],表示整数像素运动估计方法,包括dia(钻石搜索,半径1,快速)、hex(六边形搜索,半径2)、umh(不均匀多六边形搜索)、esa(穷举搜索)和tesa(哈达玛穷举搜索,慢)。
    • –merange:最大运动矢量搜索范围,默认值为16。
    • –mvrange:最大运动矢量长度,默认值为-1(自动)。
    • –mvrange-thread:线程之间的最小缓冲区,默认值为-1(自动)。
  • -m, --subme:亚像素运动估计和模式决策。可选值为[7],表示亚像素运动估计和模式决策的级别,包括0(仅全像素,不推荐使用)、1(SAD模式决策,一次qpel迭代)、2(SATD模式决策)等。
    • –psy-rd:心理视觉优化的强度,默认值为"1.0:0.0"。其中,#1表示RD(需要subme>=6),#2表示Trellis(需要trellis,实验性)。
    • –no-psy:禁用所有恶化PSNR和SSIM的视觉优化。
    • –no-mixed-refs:不基于每个分区来决定引用帧。
    • –no-chroma-me:忽略运动估计中的色度。
    • –no-8x8dct:禁用自适应空间变换大小。
  • -t, --trellis:Trellis RD量化,默认值为1。可选值为0(禁用)、1(仅在MB的最终编码中启用)、2(在所有模式决策中启用)。
    • –no-fast-pskip:在P帧上禁用早期SKIP检测。
    • –no-dct-decimate:在P帧上禁用系数阈值。
    • –nr:降噪,默认值为0。
    • –deadzone-inter:设置互帧亮度量化deadzone的大小,默认值为21。
    • –deadzone-intra:设置帧内亮度量化deadzone的大小,默认值为11。deadzone的大小应在0到32之间。
    • –cqm:预设量化矩阵。可选值为[“flat”],表示预设的量化矩阵类型,包括flat和jvt。
    • –cqmfile:从与JM兼容的文件中读取自定义的量化矩阵。会覆盖其他–cqm*选项。
    • –cqm4:设置所有的4x4量化矩阵。需要提供一个由16个整数组成的逗号分隔列表。
    • –cqm8:设置所有的8x8量化矩阵。需要提供一个由64个整数组成的逗号分隔列表。
    • –cqm4i, --cqm4p, --cqm8i, --cqm8p:同时设置亮度和色度的量化矩阵。
    • –cqm4iy, --cqm4ic, --cqm4py, --cqm4pc:设置单独的亮度和色度量化矩阵。

2.5 设置视频可用性信息

  VUI设置不被编码器使用,只是对播放设备的建议。

  • –overscan:指定裁剪超扫描设置。可选值为[“undef”],表示裁剪超扫描的设置,包括undef、show和crop。
  • –videoformat:指定视频格式。可选值为[“undef”],表示视频格式,包括component、pal、ntsc、secam、mac和undef。
  • –range:指定颜色范围。可选值为[“auto”],表示颜色范围,包括auto、tv和pc。
  • –colorprim:指定颜色原色。可选值为[“undef”],表示颜色原色,包括undef、bt709、bt470m、bt470bg、smpte170m、smpte240m、film、bt2020、smpte428、smpte431和smpte432。
  • –transfer:指定传输特性。可选值为[“undef”],表示传输特性,包括undef、bt709、bt470m、bt470bg、smpte170m、smpte240m、linear、log100、log316、iec61966-2-4、bt1361e、iec61966-2-1、bt2020-10、bt2020-12、smpte2084、smpte428和arib-std-b67。
  • –colormatrix:指定颜色矩阵设置。可选值为[“???”],表示颜色矩阵设置,包括undef、bt709、fcc、bt470bg、smpte170m、smpte240m、GBR、YCgCo、bt2020nc、bt2020c、smpte2085、chroma-derived-nc、chroma-derived-c和ICtCp。
  • –chromaloc:指定色度采样位置(0到5)。默认值为0。
  • **–mastering-display :指定主显示器的亮度、白点和显示亮度。格式为’G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min)'。
  • –cll:指定内容光亮度的最大值和最大帧平均值。格式为’max_content,max_frame_average’。
  • –alternative-transfer:指定备用传输特性。可选值与–transfer相同。
  • –nal-hrd:信号HRD信息(需要vbv-bufsize)。可选值为none、vbr、cbr(.mp4中不允许使用cbr)。
  • –filler:强制使用硬CBR并生成填充数据(隐含–nal-hrd cbr)。
  • –pic-struct:强制在图像定时SEI中使用pic_struct。
  • –crop-rect:将’left,top,right,bottom’添加到比特流级别的裁剪矩形。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/589580.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[1678]旅游景点信息Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 旅游景点信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

在idea中连接mysql

IDE&#xff08;集成开发环境&#xff09;是一种软件应用程序&#xff0c;它为开发者提供编程语言的开发环境&#xff0c;通常集成了编码、编译、调试和运行程序的多种功能。一个好的IDE可以大幅提高开发效率&#xff0c;尤其是在进行大型项目开发时。IDE通常包括以下几个核心组…

酒水门店私域流量运营搭建执行规划方案

【干货资料持续更新&#xff0c;以防走丢】 酒水门店私域流量运营搭建执行规划方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT可编辑&#xff08;完整资料包含以下内容&#xff09; 目录 精酿啤酒品牌私域执行运营的内容策划&#xff0c;涉及以下几个…

在做题中学习(48):朴素的二分查找

. - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a; 暴力求解 for循环中&#xff0c;从nums[0]枚举到nums[n-1]&#xff0c;依次判断&#xff0c;返回 target的值。 时间复杂度 : O(N) :因为要遍历一遍数组 解法二&#xff1a;二分查找 因为此数组为有序的…

利用Github发现优质的学习项目网址

1. 直接搜索&#xff0c;star的数量越多的项目质量越高 2.Github Trending 地址: https://github.com/trending 3. Gitstar Ranking 地址: https://gistar-ranking.com/ 4. Awesome Topic 地址: https://github.com/topics/awesome

FIFO Generate IP核使用——Data Counts页详解

在Vivado IDE中&#xff0c;当看到一个用于设置数据计数选项的选项卡时&#xff0c;需要注意的是&#xff0c;尽管某些选项值可能因为当前的配置而显示为灰色&#xff08;即不可选或已禁用&#xff09;&#xff0c;但IDE中显示的有效范围值实际上是你可以选择的真实值。即使某些…

静态库、动态库回顾

回顾一下库相关的知识点&#xff0c;总结备忘一下。在某种情况下&#xff0c;你有了如下的代码&#xff0c;结构如下 //pra.h #include <stdio.h> void test_01(); //pra.c #include "pra.h" void test_01() {printf("xxxxxxx----->%s %s()\n",…

莫比乌斯变换的数学原理

一、说明 关于莫比乌斯变换&#xff0c;是一个代数几何变换的重要概念。也是双曲几何的重要理论&#xff0c;比如庞加莱盘就是建立在这个理论上&#xff0c;那么这个变换到底有哪些内容&#xff1f;本文将做出详细的解读。 二、线性变换和逆变换 在本节中&#xff0c;我们研…

# notepad++ 编辑器英文版,如何打开自动换行

notepad 编辑器英文版&#xff0c;如何打开自动换行 在Notepad中&#xff0c;如果你想要开启自动换行功能&#xff0c;可以按照以下步骤操作&#xff1a; 1、打开 Notepad 编辑器。 1.1. 依次点击菜单栏中的【视图】&#xff0c;英文版对应【View】。1.2. 在【视图】下拉菜单…

css---浮动知识点精炼汇总

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 浮动简单理解与介绍 这是我们普通的页面标签效果。 每个标签从上到下依次排列。 浮动顾名思义就是让这个标签飞翔起来。 他飞起来后&#xff0c;后面的标签来到他的位置上。 而浮动的标签就会显示在标签的上面。…

【译】Celery文档1:First Steps with Celery——安装和配置Celery

https://docs.celeryq.dev/en/stable/getting-started/first-steps-with-celery.html#first-steps Celery的第一步 Celery时一个自带电池的任务队列。 本教程内容&#xff1a; 安装消息传输代理(broker)安装Celery并创建第一个任务(task)启动Celery工作进程(worker)并执行任务…

2021-10-21 51单片机两位数码管显示0-99循环

缘由单片机两位数码管显示0-99循环-编程语言-CSDN问答 #include "REG52.h" #include<intrins.h> sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; sbit bpP3^4; bit k1,wk10,wk20; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,1…

Java高阶私房菜:JVM分代收集算法介绍和各垃圾收集器原理分解

目录 什么是分代收集算法 GC的分类和专业术语 什么是垃圾收集器 垃圾收集器的分类及组合 ​编辑 应关注的核心指标 Serial和ParNew收集器原理 Serial收集器 ParNew收集器 Parallel和CMS收集器原理 Parallel 收集器 CMS收集器 新一代垃圾收集器G1和ZGC G1垃圾收集器…

设计模式之MVC模式

在编程江湖闯荡多年&#xff0c;我手中打磨过的设计模式多如繁星&#xff0c;但论及经典与实用&#xff0c; MVC&#xff08;Model-View-Controller&#xff09;模式 绝对是个中翘楚&#xff01;它不仅是Web应用的骨架&#xff0c;更是软件架构的智慧结晶。今天&#xff0c;咱们…

DRF解析器源码分析

DRF解析器源码分析 1 解析器 解析请求者发来的数据&#xff08;JSON&#xff09; 使用 request.data 获取请求体中的数据。 这个 reqeust.data 的数据怎么来的呢&#xff1f;其实在drf内部是由解析器&#xff0c;根据请求者传入的数据格式 请求头来进行处理。 drf默认的解…

leetcode刷题记录—回溯

目录 22. 括号生成 39. 组合总和 46. 全排列 77. 组合 79. 单次搜索 回溯全集 22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[&qu…

三维坐标点按剖面分类

一、写在前面 ①配套文件&#xff1a;根据剖面对三维坐标点&#xff08;X,Y,Z&#xff09;分类资源-CSDN文库 ②脱敏处理&#xff1a;蚀变数据已采用随机数生成覆盖 ③剖面坐标按顺序排列在“剖面坐标点.xlsx”文件中 二、3点确定空间中平面方程 原理&#xff1a; 设3点A&…

达梦(DM) SQL聚集函数及日期运算操作

达梦DM SQL聚集函数及日期运算操作 聚集函数MAX、MIN、SUM、AVG、COUNT使用分析函数 sum (…) over (order by…) 可以生成累计和更改累计和的值计算出现次数最多的值 日期运算加减日、月、年加减时、分、秒日期间隔之时、分、秒日期间隔之日、月、年求两个日期间的工作天数确定…

uniapp 异步加载级联选择器(Cascader,data-picke)

目录 Props 事件方法 inputChange事件回调参数说明&#xff1a; completeChange事件回调参数说明&#xff1a; temList 属性Object参数说明 defaultItemList 属性Object参数说明 在template中使用 由于uniapp uni-ui的data-picke 不支持异步作者自己写了一个 插件市场下…

VBA技术资料MF147:从Excel运行PowerPoint演示文稿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…
最新文章