除非一个参数被标记为 CLI ONLY,否则该参数也被x265_param_parse() 支持。CLI使用getopt 函数来解释命令行参数,长短版本的参数都可以使用,长参数在不引起歧义的情况下可以截断成短参数。API用户必须把完整的参数名传递给 x265_param_parse()。
Preset和tune 有特殊的含义,API用户需要在调用x265_param_parse()设置其他参数之前使用期望的preset 和tune 值来调用x265_param_default_preset()。 CLI 已经隐式地为用户做了这件事情,因此CLI 的各选项是在用户的preset 和tune 之后才应用的,与命令行参数的顺序无关。
如果命令行中有一个额外的参数(非选项参数或参数属性值),则CLI 将其视为输入文件名,这就使得选项 –input 成为可选。如果有两个额外的参数,那么第二个参数就被视为输出流文件名,这使得 –output 是可选的(如果输入文件名已经隐含了)。这就使得 x265 in.y4m out.hevc 是一个有效的命令行。如果有超过两个额外的参数,CLI 会认为有错就会放弃该参数。
参数解释:
Logging/Statistic Options
--help, -h: 显示帮助信息
--version, -V:显示版本信息
--log-level
--no-progress :取消掉周期性的编码进度汇报。
CLI ONLY
--csv
CLI ONLY
--csv-log-level
CLI ONLY
--ssim, --no-ssim :计算和汇报SSIM(结构相似度)值。如果要测量ssim,建议使用 –tune,否则结果不能用于比较。缺省是disable
--psnr, --no-psnr :计算和汇报PSNR(峰值信噪比)值。如果要测量psnr,建议使用 –tune,否则结果不能用于比较。缺省是disable
Performance Options
--asm
注意:如果指定该参数选项,就覆盖了x265 的自动检测,就有可能导致错误。如果指定了一个CPU不支持的SIMD 架构值就可能导致编码奔溃。
缺省:自动检测 SIMD 架构
--frame-threads, -F
过多的帧线程不会提高性能,反而会增加内存的开销。
Values:0 – 16 之间的任何数。缺省:0,自动检测.
--pools
--wpp, --no-wpp : 波前编码。编码器可能开始编码一行只要当前行上方至少有个 CTU(编码树单元)处于编码过程中。这会带来3-5倍的并行化和提高大约1%的压缩率。如果线程池不可用,这个特性会被隐式地关闭掉。缺省:开启
--pmode, --no-pmode : 并行模式或分布式模式。如果开启,编码器会将每个CU(merge、inter、intra)的分析工作部署到多个工作线程。只有当x265没有使得CPU核饱和才推荐使用该模式。如果-rect开启,RD level处于3或4,此时是最有效的。RD level处于5或6时,通常会部署足够多的工作来保证CPU过头,假定你的CPU还没有饱和。
--pmode 会增加利用率而不会降低压缩效果。事实上,因为这个模式是在并行模式下测量,这使得一些不切实际的模式过早退出,从而使得你通常会得到稍微好一点的压缩率当开启的时候(是以不跳过不太可能的模式为代价)。pmode绕过提前退出会降低编码速度,尤其是preset为faster的时候。
当不存在线程池的时候,这个特征被隐式地关闭了。
--pme, --no-pme : 并行运动估计。当开启的时候,如果对于一个给定的CU有多余两个的参考需要运动搜索,编码器会将运动估计部署到多个工作线程进行工作。只有当x265没有使得CPU核饱和才推荐使用该模式。--pmode比这个选项更有效,因为它所分发的工作量更高。开启--pme选项,分发的工作过量超过并行带来的好处一般不常见。
当不存在线程池的时候,这个特征被隐式地关闭了。
--preset, -p
--tune, -t
Values :psnr、ssim、grain、zero-latency、fast-decode
Input/Output File Options
这些选项用于描述输入视频序列或,在--dither情况下,编码前的序列要执行的操作。用于处理文件(名字、格式、偏移、帧数)的所有选项都只应用在命令行接口中(即CLI)。
CLI ONLY
--y4m : 无视文件的后缀名,将输入流解释为YUV4MPEG2。这个选项会被隐含如果输入文件名含有".y4m"后缀。
CLI ONLY
--input-depth
CLI ONLY
--frames
--dither :允许高质量缩小到编码器的位深度。抖动是基于一行像素的错误扩散到该图片的下一行像素,只有当输入的位深度大于8位才有必要应用该选项。缺省是关闭的。
CLI ONLY
--input-res
CLI ONLY
--input-csp
0. i400(4:0:0 单色)- Main和Main 10档次不支持
1. i420(4:2:0 缺省)- 所有的HEVC档次支持
2. i422(4:2:2 ) - Main、Main 10和Main 12档次不支持
3. i444(4:4:4)- Main、Main 10、Main 12、Main 16支持
4. nv12
5. nv16
--fps
值的范围:正整数、浮点数、或 分子/分母
--interlace
0. 逐行图像(缺省)
1. 先顶场
2. 先底场
HEVC将交错的内容作为一场进行编码。提供正确的场的顺序给编码器。源尺寸必须是场的尺寸,FPS必须是每秒以场为单位。解码器必须要根据场的定向重新组合以用于显示。
--seek
--frames, -f
CLI ONLY
--output, -o
CLI ONLY
--output-depth, -D 8|10|12 :输出HEVC比特流的位深度,也是编码器内部的位深度。如果所要求的位深度与所连接的libx265位深度不一样,它就会尝试去为8位编码器绑定libx265_main,为10位编码器绑定libx265_main10,为12位编码器绑定libx265_main12,使用与连接的libx265版本相同的API。
如果输出的位深度没有指定,但是--profile有指定,则输出位深度由profile的名字来获取。
Profile, Level, Tier
--profile,
-P
:强制指定档次的需求,确保解码器的输出流可修饰以支持指定的档次。如果指定的档次不被编码器的编译选项所支持(高比特位深度的编码器不能输出与Main或MainStillPicture兼容的比特流),则有可能放弃该编码器。
x265支持一下的档次:
- 8bits 档次:
* main, main-intra, mainstillpicture (or msp for short)
* main444-8, main444-intra, main444-stillpicture
- 10bits 档次:
* main10, main10-intra
* main422-10, main422-10-intra
* main444-10, main444-10-intra
- 12bits 档次:
* main12, main12-intra
* main422-12, main422-12-intra
* main444-12, main444-12-intra
CLI ONLY
API 用户在配置好参数结构之后必须要调用 x265_param_apply_profile() ,调用之后对参数结构的任何改变都有可能使得编码器不兼容。
如果没有指定 --output-depth,那么CLI应用会从profile的名字来获取输出位深度。
--level-idc
:最低的解码需求级别。缺省值0,意味着由编码器自动检测。如果指定了值,编码器就会在指定级别内赋予编码一些指定规则。如果编码器不能达到这个级别,就会给出警告并放弃这个编码器。如果所要求的级别比实际级别高,则发送实际的需求级别。
注意,指定解码界别会强制编码器开启 VBV 用于常码率因子编码,可能会导致不确定性。
值被指定为浮点数或一个整数(级别乘以10),例如:级别 5.1 可以被指定为 “5.1” 或 “51”,级别 5.0 被指定为 “5.0”或“50”。
附录 A 级别: 1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2, 8.5
--high-tier,
--no-high-tier
:如果 --level-idc 被指定,--high-tier允许支持那个级别的高等级。编码器首先会在指定的级别和主等级下编码,仅当有必要且那个级别的高等级可用的情况下才开启高等级。如果你所要求的级别不支持高等级,那么高等级不会被支持。如果 --no-high-tier 被指定,则编码器只会在主等级下编码。
缺省:开启
--ref
<1..16>
:L0 参考序列所允许的最大数目。这个数对运动搜索的工作量有线性乘子效应,但是通常在压缩和失真率上有有益的效果。
--allow-non-conformance,
--no-allow-non-conformance
:允许libx265指定profile和无级别的情况下生成比特流。如果不满足严格的级别条件,缺省是放弃任何编码。两种最有可能的原因就是:--ctu太小,--ref太大,或者码率或者分辨率超出了指定条件。
缺省:关闭
--uhd-bd
:允许支持HD蓝光碟格式,如果指定了与编码选项不兼容,则编码器会尝试着去修正或设置正确的编码配置。如果编码器不能这么做,则这个选项就会被关闭。高度实验性。
缺省:关闭
注意:
--profile, --level-idc 和 --high-tier 仅当你在有限的资源限制下想要构建一个特定的解码器以及在这些限制下含有比特流的情况下才设计使用。指定一个档次或水平可能会降低编码质量参数来满足这些需求,但是永远不会提升它们。它可能会开启VBV约束当处于CRF编码时。
也要注意 x265用三个步骤来确定解码器的档次和水平。首先,使用所建议的编码选项来配置 x265_param结构体,然后调用 x265_param_apply_profile() 来强制一个特定档次(main、main10等)。第二,通过 x265_param 的实例来创建一个编码器,--level-idc 和 --high-tier 参数用来降低码流或其他特征以达到给定的目标水平。最后,编码器再次检查最终的参数集和检查最低解码需求水平,这些信息会被发送到比特流的头部里。只有当用户指定了高等级水平,检测到的解码水平才会使用高等级水平。
待发送的档次由编码器内部位深度和输入颜色空间来决定。
如果 --keyint 为0或1,一个帧内档次变量被发送。
如果 --total-frames 为1,一个静态图像变量被发送,但是这个参数并不总是由应用来设定,尤其是当CLI使用标准输入流或libx265被第三方应用使用。
Mode decision / Analysis
--rd
<1..6>
:
模式决策中RDO水平。这个值越大,模式分析越耗时,使用更多的率失真优化。值越小编码速度越快,通常值越大比特流越小。缺省:3
注意:下面这个表是为准确起见,但并不一定是每个模式的最终行为。
选项会影响编码单元四叉树,有时候也被引用为预测四叉树。
--ctu,
-s
<64|32|16>
:最大CU尺寸(宽和高)。该值越大,x265编码图像平坦区域的效率就越高,码流降低的就越厉害。然而这会带来并行化的损失,更少的CU行并行编码,同样更少的帧并行编码。因为这个原因,preset选择faster的话,CU的尺寸就设置为32。缺省:64
--min-cu-size
<64|32|16|8>
:
--limit-refs
<0|1|2|3>
:
--limit-modes,
--no-limit-modes
:
--rect,
--no-rect
:
--amp,
--no-amp
:
--early-skip,
--no-early-skip
:
--rskip,
--no-rskip
:
--fast-intra,
--no-fast-intra
:
--b-intra,
--no-b-intra
:
--cu-lossless,
--no-cu-lossless
:
--tskip-fast,
--no-tskip-fast
:
--rd-refine,
--no-rd-refine
:
--analysis-mode
:
--analysis-file
:
--rdoq-level
<0|1|2>,
--no-rdoq-level
:
--tu-intra-depth
<1..4>
:
--tu-inter-depth
<1..4>
:
--nr-intra
--nr-inter
:
--tskip,
--no-tskip
:
--rdpenalty
<0..2> :
--max-tu-size
<32|16|8|4> :
Temporal / motion search options
--max-merge
<1..5> :
--me
--subme,
-m
<0..7> :
--merange
--temporal-mvp,
--no-temporal-mvp :
--weightp,
-w,
--no-weightp :
--weightb,
--no-weightb :
Spatial / intra options
--strong-intra-smoothing,
--no-strong-intra-smoothing :
--constrained-intra,
--no-constrained-intra :
Psycho-visual options
--psy-rd
--psy-rdoq
:
Slice decision options
--open-gop,
--no-open-gop :
--keyint,
-I
--min-keyint,
-i
--scenecut
--no-scenecut :
--intra-refresh :
--rc-lookahead
--lookahead-slices
<0..16> :
--b-adapt
--bframes,
-b
<0..16> :
--bframe-bias
--b-pyramid,
--no-b-pyramid :
待续!