other-doc-cn-ffmpeg

10 编码选项

libavcodec提供一些通用的全局选项设置,可在所有的编码器和解码器起效。另外每个编解码器可以支持所谓的私有化设置,以满足特定的编解码要求。

有时,一个全局选项会影响到特定的编解码器,而对其它编解码产生不良影响或者会不被识别,所以你需要了解这些影响编解码选项的具体意义,了解那些只对特定编码或者解码有效的选项。

这些选项大多可以-option value的格式在ffmpeg工具中指定,其中-option是选项名,value是要设置的选项参数值,个别是利用AVCodecContext选项进行额外配置,还有极个别的使用定义在libavutil/opt.h中的API在程序过程中配置使用。

下面是这些选项的列表(括号中表示选项有效的状态,可能是decoding-解码时,encoding—编码时,audio-音频,video-视频,subtitles-字幕 以及特定的编码名称,如果mpeg4):

b integer (encoding,audio,video)

设置码率,单位为bits/s。默认200K。

ab integer (encoding,audio)

设置音频码率,单位bits/s。默认128K。

bt integer (encoding,video)

设置视频码率偏离公差(video bitrate tolerance),单位bits/s。对于1次编码模式中码率控制公差指愿意偏离目标(码率)的平均码率值,故不能由此确定最小/最大码率,即不能假定最小/最大码率是目标码率+-码率偏离公差。太低的偏离公差影响编码后的质量。

flags flags (decoding/encoding,audio,video,subtitles)

设置常见的标志

可能值有:

‘mv4’

    使用4路监控宏块运动矢量 (mpeg4). 
‘qpel’

    使用1/4像素补偿 
‘loop’

    使用循环过滤 
‘qscale’

    使用固定放缩qscale 
‘gmc’

    使用gmc. 
‘mv0’

    一直假定mb中mv=<0,0>。
‘input_preserved’
‘pass1’

    在第1次编码中使用内部控制段模式。 
‘pass2’

    在第2次编码中使用内部控制段
‘gray’

    只有decode/encode灰度 
‘emu_edge’

    不描绘边缘 
‘psnr’

    在设置了错误变量时仍然继续编码
‘truncated’
‘naq’

    规范的自适应量化 
‘ildct’

    使用交错DCT. 
‘low_delay’

    强制减少延迟
‘global_header’

    在每个关键帧的扩展数据中添加全局头 
‘bitexact’

    只写的关于平台、编译创建以及时间无关(platform-, build- 和time-independent) 的数据 (除了(I)DCT)。这确保了文件和数据校验和平台之间的可重复性和匹配,它主要用于回归测试。 
‘aic’

    H263高级帧内编码/mpeg4打开ac预测 
‘cbp’

    已失效/过期,使用mpegvideo提供的私有选项 
‘qprd’

    已失效/过期,使用mpegvideo提供的私有选项  
‘ilme’

    交错运动估计。
‘cgop’

    关闭gop 

me_method integer (encoding,video)

设置运动估计方法

可能值有:

‘zero’

    0运动估计,即不进行估计 (最快) 
‘full’

    full运动估计 (最慢) 
‘epzs’

    EPZS运动估计 (默认) 
‘esa’

    esa运动估计 (full的别名) 
‘tesa’

    tesa运动估计 
‘dia’

    dia运动估计(epzs的别名) 
‘log’

    log运动估计 
‘phods’

    phods运动估计
‘x1’

    X1运动估计 
‘hex’

    hex运动估计 
‘umh’

    umh运动估计
‘iter’

    iter运动估计 

extradata_size integer

设置扩展数据尺寸

time_base rational number

设置编码的时间基础计量

它是时间的基本单位(秒)的帧时间戳表示。对于固定FPS内容,这个值应该是`1/frame_rate`,每次时间戳都增加1个单位的时间量。

g integer (encoding,video)

设置一组图片的数量,默认是12

ar integer (decoding/encoding,audio)

设置音频采样率(单位Hz)

ac integer (decoding/encoding,audio)

设置音频通道数

cutoff integer (encoding,audio)

设置截止带宽

frame_size integer (encoding,audio)

设置音频帧尺寸

除了最后一帧音频数据,否则每个音频数据帧都包含`frame_size`设定大小的数据。当编码中`CODEC_CAP_VARIABLE_FRAME_SIZE`设置了,则这个值可能是0,在这种情况下帧的大小是没有限制的。它在一些解码器中显示固定帧大小。

frame_number integer

设置帧数量

delay integer qcomp float (encoding,video)

设置视频量化压缩规模(VBR)。这里用在控制方程的常数。默认rc_eq推荐范围是: 0.0-1.0.

qblur float (encoding,video)

设置视频量化尺度模糊(VBR).

qmin integer (encoding,video)

设置最小视频量化尺度(VBR)。 取值范围是-1-69,默认为2

qmax integer (encoding,video)

设置最大视频量化尺度(VBR)。 取值范围是-1-1024,默认为31

qdiff integer (encoding,video)

设置量化级之间最大的差异(VBR).

bf integer (encoding,video)

设置最大B帧间隔

必须是-1 -16间的数。0表示禁止B帧,如果为-1表示依据编码器进行指定,默认值是0

b_qfactor float (encoding,video)

设置P帧和B帧之间的qp因子

rc_strategy integer (encoding,video)

设置码率控制方法

b_strategy integer (encoding,video)

设置I/P/B帧选择策略.

ps integer (encoding,video)

设置RTP播放加载数据量(缓冲),单位是字节(bytes)

mv_bits integer
header_bits integer
i_tex_bits integer
p_tex_bits integer
i_count integer
p_count integer
skip_count integer
misc_bits integer
frame_bits integer
codec_tag integer
bug flags (decoding,video)

解决不能自动检测/识别编码的错误(bug)

可能值:

‘autodetect’
‘old_msmpeg4’

    一些旧lavc处理的msmpeg4v3文件(不能自动检测) 
‘xvid_ilace’

    Xvid交错错误 (如果强制为fourcc==XVIX则可自动检测) 
‘ump4’

    (fourcc==UMP4可自动检测) 
‘no_padding’

    填充错误(自动检测) 
‘amv’
‘ac_vlc’

    非法vlc错误 (对每个fourcc自动检测) 
‘qpel_chroma’
‘std_qpel’

    老标准的qpel (对每个fourcc/version自动检测) 
‘qpel_chroma2’
‘direct_blocksize’

    direct-qpel-blocksize错误 (对每个fourcc/version自动检测) 
‘edge’

    edge填充bug (对每个fourcc/version自动检测) 
‘hpel_chroma’
‘dc_clip’
‘ms’

    微软破解解码器上的各种缺陷 
‘trunc’

    截断帧

lelim integer (encoding,video)

设置亮度单系数消除阈值(负值也考虑直流系数)。 celim integer (encoding,video)

设置消除色度单系数阈值(负值也考虑直流系数)

strict integer (decoding/encoding,audio,video)

指定如何遵守标准(严格程度)

可能的值:

‘very’

    严格模式,遵守过时的版本规格或者依软件需求的版本规格进行处理
‘strict’

    严格模式,无论如何都严格按照规格处理 
‘normal’
‘unofficial’

    允许非官方扩展
‘experimental’

    允许非标准的实验性质解码/编码器(未完成/未测试/不工作)**注意**实验性质的解码工具可能带来安全风险,不要用这类解码器解码不可信输入 

b_qoffset float (encoding,video)

在P帧和B帧间设置QP(帧间偏移)

err_detect flags (decoding,audio,video)

设置错误检测标志

可能值:

‘crccheck’

    嵌入CRC验证 
‘bitstream’

    比特流规范偏差检测 
‘buffer’

    不当码流长度检测 
‘explode’

    在出现错误时中止解码 
‘ignore_err’

    忽略解码错误继续解码。则对于分析视频内容是十分有用的,这时希望无论如何解码都继续工作。
‘careful’


    考虑环境支持,一个正确的编码器不能被错误停止

has_b_frames integer block_align integer mpeg_quant integer (encoding,video)

使用MPEG量化代替H.263。

qsquish float (encoding,video)

保持Qmin和Qmax之间量化器。(0 = clip, 1 = use 还可以利用函数进行微调)。 rc_qmod_amp float (encoding,video)

设置实验/量化 

rc_qmod_freq integer (encoding,video)

设置实验/量化调制

rc_override_count integer rc_eq string (encoding,video)

速率控制方程组。除了内部标准定义外,可以有以下选择:bits2qp(bits), qp2bits(qp)。还可以利用下面介绍的常数: iTex、pTex、tex ,mv fCode iCount mcVar var isl isB avgQP qComp avgIITex avgPITx avgPPTex avgBPText。

maxrate integer (encoding,audio,video)

设置最大比特率容差(单位 比特/秒)。要求的缓冲大小被设置。

minrate integer (encoding,audio,video)

设置最小比特率容差(单位 比特/秒)。通常用于CBR编码,否则无意义

bufsize integer (encoding,audio,video)

设置控制缓冲区大小(单位bits)

rc_buf_aggressivity float (encoding,video)

目前无效

i_qfactor float (encoding,video)

设置P帧和I帧间的QP因子

i_qoffset float (encoding,video)

设置P帧和I帧间的QP偏移

rc_init_cplx float (encoding,video)

设置1次编码的初始复杂性

dct integer (encoding,video)

设置DCT(数字转换)算法

可能值:

‘auto’

    自动选择一个优化质量算法(默认值) 
‘fastint’

    偏重速度 
‘int’

    精准整数 
‘mmx’
‘altivec’
‘faan’

    浮点AAN DCT 

lumi_mask float (encoding,video)

压缩高亮

tcplx_mask float (encoding,video)

设置临时/时间复杂遮蔽/蒙版

scplx_mask float (encoding,video)

设置空间复杂遮蔽/蒙版

p_mask float (encoding,video)

设置组间遮蔽

dark_mask float (encoding,video)

压缩暗区

idct integer (decoding/encoding,video)

选择实施的IDCT

可能值:

‘auto’
‘int’
‘simple’
‘simplemmx’
‘simpleauto’

    自动应用一个兼容的IDCT
‘arm’
‘altivec’
‘sh4’
‘simplearm’
‘simplearmv5te’
‘simplearmv6’
‘simpleneon’
‘simplealpha’
‘ipp’
‘xvidmmx’
‘faani’

    浮点AAN IDCT 

slice_count integer
ec flags (decoding,video)

设置错误隐藏策略

可能值:

‘guess_mvs’

    运动矢量迭代 (MV)搜索(慢/slow) 
‘deblock’

    对损坏的MBs使用强壮的去块滤波
‘favor_inter’

    有利用从前帧预测而不是当前帧预测 

bits_per_coded_sample integer
pred integer (encoding,video)

设置预测方法

可能值:

‘left’
‘plane’
‘median’

aspect rational number (encoding,video)

设置样本纵横比

debug flags (decoding/encoding,audio,video,subtitles)

输出特定调试信息.

可能值:

‘pict’

    图片相关信息 
‘rc’

    码率控制 
‘bitstream’
‘mb_type’

    宏块 (MB)类型 
‘qp’

    每个块的量化参数(QP) 
‘mv’

    运动矢量 
‘dct_coeff’
‘skip’
‘startcode’
‘pts’
‘er’

    错误识别 
‘mmco’

    内存管理控制操作(H.264) 
‘bugs’
‘vis_qp’

    量化参数可视化 (QP),即低的QP显示为绿色 
‘vis_mb_type’

    块类型可视化 
‘buffers’

    图像缓冲区分配 
‘thread_ops’

    线程操作 
‘nomc’

    跳跃运动补偿 

vismv integer (decoding,video)

运动矢量可视化 (MVs).

这个选项是过时的,参考`codecview`滤镜.

可能值:

‘pf’

    p帧前测MVs 
‘bf’

    B帧前测MVs 
‘bb’

    B帧后测MVs 

cmp integer (encoding,video)

设置完整图元me压缩功能

可能值:

‘sad’

    绝对差异总和, 最快(默认) 
‘sse’

    误差平方和 
‘satd’

    绝对Hadamard转换差异总和
‘dct’

    绝对DCT转换差异总和 
‘psnr’

    量化误差平方和 (avoid, 低品质) 
‘bit’

    对特定块需要的比特数 
‘rd’

    动态失真优化, 最慢
‘zero’

    0 
‘vsad’

    绝对垂直差异总和 
‘vsse’

    垂直差异平方和 
‘nsse’

    噪声保护的差的平方和
‘w53’

    5/3 小波(变换), 只用于下雪场景 
‘w97’

    9/7 小波(变换), 只用于下雪场景 
‘dctmax’
‘chroma’

subcmp integer (encoding,video)

设置局部图元me压缩功能

可能值:

‘sad’

    绝对差异总和, 最快(默认) 
‘sse’

    误差平方和 
‘satd’

    绝对Hadamard转换差异总和
‘dct’

    绝对DCT转换差异总和 
‘psnr’

    量化误差平方和 (avoid, 低品质) 
‘bit’

    对特定块需要的比特数 
‘rd’

    动态失真优化, 最慢
‘zero’

    0 
‘vsad’

    绝对垂直差异总和 
‘vsse’

    垂直差异平方和 
‘nsse’

    噪声保护的差的平方和
‘w53’

    5/3 小波(变换), 只用于下雪场景 
‘w97’

    9/7 小波(变换), 只用于下雪场景 
‘dctmax’
‘chroma’

mbcmp integer (encoding,video)

设置宏块压缩功能

可能值:

‘sad’

    绝对差异总和, 最快(默认) 
‘sse’

    误差平方和 
‘satd’

    绝对Hadamard转换差异总和
‘dct’

    绝对DCT转换差异总和 
‘psnr’

    量化误差平方和 (avoid, 低品质) 
‘bit’

    对特定块需要的比特数 
‘rd’

    动态失真优化, 最慢
‘zero’

    0 
‘vsad’

    绝对垂直差异总和 
‘vsse’

    垂直差异平方和 
‘nsse’

    噪声保护的差的平方和
‘w53’

    5/3 小波(变换), 只用于下雪场景 
‘w97’

    9/7 小波(变换), 只用于下雪场景 
‘dctmax’
‘chroma’

ildctcmp integer (encoding,video)

设置隔行dct压缩功能

可能值:

‘sad’

    绝对差异总和, 最快(默认) 
‘sse’

    误差平方和 
‘satd’

    绝对Hadamard转换差异总和
‘dct’

    绝对DCT转换差异总和 
‘psnr’

    量化误差平方和 (avoid, 低品质) 
‘bit’

    对特定块需要的比特数 
‘rd’

    动态失真优化, 最慢
‘zero’

    0 
‘vsad’

    绝对垂直差异总和 
‘vsse’

    垂直差异平方和 
‘nsse’

    噪声保护的差的平方和
‘w53’

    5/3 小波(变换), 只用于下雪场景 
‘w97’

    9/7 小波(变换), 只用于下雪场景 
‘dctmax’
‘chroma’

dia_size integer (encoding,video)

设置运动估计区域类型和尺寸

last_pred integer (encoding,video)

设置从前帧预测运动量

preme integer (encoding,video)

设置预运动估计

precmp integer (encoding,video)

设置预运动估计压缩功能

可能值:

‘sad’

    绝对差异总和, 最快(默认) 
‘sse’

    误差平方和 
‘satd’

    绝对Hadamard转换差异总和
‘dct’

    绝对DCT转换差异总和 
‘psnr’

    量化误差平方和 (avoid, 低品质) 
‘bit’

    对特定块需要的比特数 
‘rd’

    动态失真优化, 最慢
‘zero’

    0 
‘vsad’

    绝对垂直差异总和 
‘vsse’

    垂直差异平方和 
‘nsse’

    噪声保护的差的平方和
‘w53’

    5/3 小波(变换), 只用于下雪场景 
‘w97’

    9/7 小波(变换), 只用于下雪场景 
‘dctmax’
‘chroma’

pre_dia_size integer (encoding,video)

设置运动估计预测的区域类型和尺寸

subq integer (encoding,video)

设置子图元运动估计质量

dtg_active_format integer me_range integer (encoding,video)

设置运动矢量极限范围 (DivX是1023).

ibias integer (encoding,video)

设置组内量化偏差

pbias integer (encoding,video)

设置集间量化偏差

color_table_id integer global_quality integer (encoding,audio,video) coder integer (encoding,video)

可能值:

‘vlc’

    可变长编码 / huffman编码 
‘ac’

    算术编码 
‘raw’

    raw (不进行编码) 
‘rle’

    游程长度编码 
‘deflate’

    紧缩编码 

context integer (encoding,video)

设置上下文模型

slice_flags integer xvmc_acceleration integer mbd integer (encoding,video)

设置宏块选择算法 (高质量模式).

可能值:

‘simple’

    使用mbcmp,宏块比较 (默认) 
‘bits’

    减少数据量
‘rd’

    失真率优化 

stream_codec_tag integer sc_threshold integer (encoding,video)

设置场景变化阀值

lmin integer (encoding,video)

设置最小拉格朗日(lagrange)因子(VBR).

lmax integer (encoding,video)

设置最大拉格朗日(lagrange)因子 (VBR).

nr integer (encoding,video)

设置降噪

rc_init_occupancy integer (encoding,video)

设置解码开始前需加载到RC缓冲区的数据量

flags2 flags (decoding/encoding,audio,video)

可能值:

‘fast’

    允许不符合规范的加速技巧。
‘sgop’

    失效, 使用mpegvideo私有选项 
‘noout’

    跳过比特流编码 
‘ignorecrop’

    忽略sps传来的遮蔽信息 
‘local_header’

    在全局头而不是每个关键帧放置扩展数据 
‘chunks’

    帧数据可被分割成多个块
‘showall’

    显示第一个关键帧前的所有帧(一般用于跳跃定位后的播放,默认是从最近关键帧开始显示,因为之前的帧不一定能够正确构建) 
‘skiprd’

    失效,使用了mpegvideo私有选项. 
‘export_mvs’

    支持它的编码中运动矢量导出给帧间数据(见`AV_FRAME_DATA_MOTION_VECTORS`) 。参考` doc/examples/export_mvs.c` 

error integer (encoding,video) qns integer (encoding,video)

失效, 使用了mpegvideo私有选项

threads integer (decoding/encoding,video)

可能值:

‘auto’

    检测使用一个合适的线程数 

me_threshold integer (encoding,video)

设置运动估计的阀值

mb_threshold integer (encoding,video)

设置宏块阀值

dc integer (encoding,video)

设置intra_dc_precision.

nssew integer (encoding,video)

设置nsse权重.

skip_top integer (decoding,video)

跳过顶部设置多个宏块行

skip_bottom integer (decoding,video)

跳过底部设置多个宏块行

profile integer (encoding,audio,video)

可能值:

‘unknown’
‘aac_main’
‘aac_low’
‘aac_ssr’
‘aac_ltp’
‘aac_he’
‘aac_he_v2’
‘aac_ld’
‘aac_eld’
‘mpeg2_aac_low’
‘mpeg2_aac_he’
‘mpeg4_sp’
‘mpeg4_core’
‘mpeg4_main’
‘mpeg4_asp’
‘dts’
‘dts_es’
‘dts_96_24’
‘dts_hd_hra’
‘dts_hd_ma’

level integer (encoding,audio,video)

可能值:

‘unknown’

lowres integer (decoding,audio,video)

在 1= 1/2, 2=1/4, 3=1/8 解码.

skip_threshold integer (encoding,video)

设置跳帧阀值

skip_factor integer (encoding,video)

设置跳帧因子

skip_exp integer (encoding,video)

设置跳帧指数。 负值和正值除了归一化原因以外表现相同。正值存在的原因主要是兼容性,所以并不常见

skipcmp integer (encoding,video)

设置跳帧压缩功能

可能值:

‘sad’

    绝对差异总和, 最快(默认) 
‘sse’

    误差平方和 
‘satd’

    绝对Hadamard转换差异总和
‘dct’

    绝对DCT转换差异总和 
‘psnr’

    量化误差平方和 (avoid, 低品质) 
‘bit’

    对特定块需要的比特数 
‘rd’

    动态失真优化, 最慢
‘zero’

    0 
‘vsad’

    绝对垂直差异总和 
‘vsse’

    垂直差异平方和 
‘nsse’

    噪声保护的差的平方和
‘w53’

    5/3 小波(变换), 只用于下雪场景 
‘w97’

    9/7 小波(变换), 只用于下雪场景 
‘dctmax’
‘chroma’

border_mask float (encoding,video)

增加接近边界宏块量化。

mblmin integer (encoding,video)

设置最小的宏块的拉格朗日(lagrange)因子(VBR).

mblmax integer (encoding,video)

设置最大的宏块的拉格朗日(lagrange)因子 (VBR).

mepc integer (encoding,video)

设置运动估计比特率损失补偿(1.0 = 256).

skip_loop_filter integer (decoding,video) skip_idct integer (decoding,video) skip_frame integer (decoding,video)

让解码器丢弃处理由选项值指定的帧类型

skip_loop_filter 跳过循环帧   
skip_idct 跳过IDCT/量化(dequantization)帧   
skip_frame 跳过解码

可能值:

‘none’

    不抛弃帧
‘default’

    抛弃无用帧,例如尺寸为0的帧
‘noref’

    抛弃所有非参考帧
‘bidir’

    抛弃所有双向(预测)帧
‘nokey’

    除了关键帧外都抛弃
‘all’

    抛弃所有帧 

默认值就是‘default’.

bidir_refine integer (encoding,video)

细化两个运动矢量用于双向宏块

brd_scale integer (encoding,video)

对动态B帧判定是否下变换

keyint_min integer (encoding,video)

设置IDR帧集的最小间隔

refs integer (encoding,video)

为运动补偿设置参考帧 compensation.

chromaoffset integer (encoding,video)

设置色度中qp对亮度的抵消

trellis integer (encoding,audio,video)

设置比率失真优化

sc_factor integer (encoding,video)

设置一个值(一个补偿因子)乘以`qscale`添加到每一帧的`scene_change_score`

mv0_threshold integer (encoding,video) b_sensitivity integer (encoding,video)

调整`b_frame_strategy`敏感性为1.

compression_level integer (encoding,audio,video) min_prediction_order integer (encoding,audio) max_prediction_order integer (encoding,audio) timecode_frame_start integer (encoding,video)

设置GOP时间码帧开始数,非丢帧格式

request_channels integer (decoding,audio)

设置所需数字音频轨道/通道

bits_per_raw_sample integer channel_layout integer (decoding/encoding,audio)

可能值: 

request_channel_layout integer (decoding,audio)

可能值: 

rc_max_vbv_use float (encoding,video)
rc_min_vbv_use float (encoding,video)
ticks_per_frame integer (decoding/encoding,audio,video)
color_primaries integer (decoding/encoding,video)
color_trc integer (decoding/encoding,video)
colorspace integer (decoding/encoding,video)
color_range integer (decoding/encoding,video)
chroma_sample_location integer (decoding/encoding,video)
log_level_offset integer

设置日志层次

slices integer (encoding,video)

设置划片数,用于并行编码

thread_type flags (decoding/encoding,video)

选择多线程方式

使用‘frame’会导致每个线程解码延迟,所以如果客户端不提供未来帧状况就不应该使用

可能值:

‘slice’

    每次解码不超过一个帧的多块数据

    划片多线程只用于视频划片编码工作
‘frame’

    一次解码多个帧 

默认值是 ‘slice+frame’.

audio_service_type integer (encoding,audio)

设置音频服务类型。

可能值:

‘ma’

    主要音频服务 
‘ef’

    特效 
‘vi’

    视障 
‘hi’

    听障 
‘di’

    对话 
‘co’

    评论 
‘em’

    紧急情况 
‘vo’

    画外音 
‘ka’

    卡拉OK 

request_sample_fmt sample_fmt (decoding,audio)

设置音频解码偏好。默认是none

pkt_timebase rational number sub_charenc encoding (decoding,subtitles)

设置输入的字幕字符编码

field_order field_order (video)

设置/覆盖场序。可能值是:

‘progressive’

    逐行 
‘tt’

    隔行,顶场优先编码/显示
‘bb’

    隔行,底场优先编码/显示
‘tb’

    隔行,顶场优先编码,低场优先显示
‘bt’

    隔行,底场优先编码,低场优先显示

skip_alpha integer (decoding,video)

设置为1来禁止处理透明度。不同的值可以类似一个‘灰色(gray)’蒙在画面上。默认值是0。

codec_whitelist list (input)

"," 分隔的允许的解码器列表。 默认是都允许

dump_separator string (input)

指定用于在命令行分隔参数、选项域的字符串。例如可以设置一个回车换行作为分隔:

ffprobe -dump_separator "
                          "  -i ~/videos/matrixbench_mpeg2.mpg