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
