前言
Github
地址:Github
地址:
专辑地址:FFplay专辑
12.格式选项
libavformat
库提供了一些通用的全局选项,可以在所有复用器和解复用器上设置。 此外,每个复用器或解复用器可以支持所谓的私有选项,这些选项特定于该组件。
可以通过在FFmpeg
工具中指定-option
值,或通过在AVFormatContext
选项中显式设置值或使用libavutil / opt.h``API
进行编程来设置选项。
支持的选项列表如下:
avioflags flags (input/output)
可能的取值如下:
值 | 解释 |
---|---|
direct | 减少缓冲 |
probesize integer (input)
设置探测大小(以字节为单位),即要分析的数据大小以获取流信息。 较高的值将允许在分散到流中时检测更多信息,但会增加延迟。 必须是不小于32
的整数。默认情况下为5000000
。
packetsize integer (output)
设置数据包大小。
fflags flags (input/output)
设置格式标志。
可能的取值如下:
值 | 解释 |
---|---|
ignidx | 忽略索引 |
fastseek | 对某些格式启用快速但不准确的搜索 |
genpt | 生成PTS |
nofillin | 不要填写可以精确计算的缺失值 |
noparse | 禁用AVParsers ,这也需要+ nofillin |
igndts | 忽略DTS |
discardcorrupt | 丢弃损坏的帧 |
sortdts | 尝试通过DTS 交错输出数据包 |
keepside | 不要合并边数据 |
latm | 启用RTP MP4A-LATM 有效负载 |
nobuffer | 减少可选缓冲引入的延迟 |
bitexact | 仅编写平台,构建和时间无关的数据。 这可确保文件和数据校验和可重现并在平台之间匹配。 它的主要用途是进行回归测试 |
shortest | 在最短流的末尾停止复用。 可能需要增加max_interleave_delta 以避免在EOF 之前刷新较长的流 |
seek2any integer (input)
如果设置为1,则允许在受支持者级别上寻找非关键帧。默认值为0。
analyzeduration integer (input)
指定分析多少微秒来探测输入。 较高的值可以检测更准确的信息,但会增加延迟。 默认为5,000,000
微秒= 5
秒。
cryptokey hexadecimal string (input)
设置解密密钥。
indexmem integer (input)
设置用于时间戳索引的最大内存(每个流)。
rtbufsize integer (input)
设置用于缓冲实时帧的最大内存。
fdebug flags (input/output)
打印特定的调试信息。
可能的取值如下:
ts
max_delay integer (input/output)
设置最大复用或解复用延迟(以微秒为单位)。
fpsprobesize integer (input)
设置用于探测fps的帧数。
audio_preload integer (output)
设置音频数据包之前应交错的微秒。
chunk_duration integer (output)
设置每个块的微秒。
chunk_size integer (output)
为每个块设置大小(以字节为单位)。
err_detect, f_err_detect flags (input)
设置错误检测标志。 f_err_detect
已弃用,只能通过ffmpeg
工具使用。
可能的取值如下:
值 | 解释 |
---|---|
crccheck | 验证嵌入式CRC |
bitstream | 检测比特流规范偏差 |
buffer | 检测不正确的比特流长度 |
explode | 在轻微错误检测时中止解码 |
careful | 考虑违反规范的事情,并且没有在野外看到错误 |
compliant | 将所有规范不合规视为错误 |
aggressive | 考虑一个理智的编码器不应该做的错误 |
max_interleave_delta integer (output)
设置交错的最大缓冲持续时间。 持续时间以微秒表示,默认为1000000
(1秒)。
为确保所有流都正确交错,libavformat
将等到每个流至少有一个数据包,然后才能将任何数据包实际写入输出文件。 当一些流sparse
时(即,连续分组之间存在大的间隙),这可能导致过度缓冲。
此字段指定多路复用队列中第一个和最后一个数据包的时间戳之间的最大差异,高于该时间段,无论是否已为所有流排队数据包,libavformat
都将输出数据包。
如果设置为0
,则libavformat
将继续缓冲数据包,直到它为每个流分配一个数据包,而不管缓冲数据包之间的最大时间戳差异。
use_wallclock_as_timestamps integer (input)
如果设置为1
,请使用wallclock
作为时间戳。默认值为0
。
avoid_negative_ts integer (output)
可能的取值如下:
值 | 解释 |
---|---|
make_non_negative | 移动时间戳使它们成为非负数。 另请注意,这仅影响前导负时间戳,而不影响非单调负时间戳 |
make_zero | 移动时间戳,以便第一个时间戳为0 |
auto (default) | 在目标格式需要时启用移位 |
disabled | 禁用时间戳的移位 |
启用移位后,所有输出时间戳都会移动相同的量。 音频,视频和字幕desynching
和相对时间戳差异与没有移动时的情况相比得以保留。
skip_initial_bytes integer (input)
如果设置为1,则设置在读取标题和帧之前要跳过的字节数。默认值为0。
correct_ts_overflow integer (input)
如果设置为1,则更正单个时间戳溢出。默认值为1。
flush_packets integer (output)
在每个数据包之后刷新基础I / O
流。 默认值为-1
(自动),这意味着底层协议将决定,1
启用它,并具有减少延迟的效果,0
禁用它并在某些情况下可能增加IO
吞吐量。
output_ts_offset offset (output)
设置输出时间偏移。
offset必须是持续时间规范,请参阅(ffmpeg-utils)time duration syntax
。
复用器将偏移量添加到输出时间戳。
指定正偏移意味着相应的流在偏移量中指定的持续时间内延迟。 默认值为0
(表示未应用偏移)。
format_whitelist list (input)
,
允许的分离器列表。 默认情况下都允许。
dump_separator string (input)
Separator
用于分隔关于Stream
参数的命令行上打印的字段。 例如,使用换行符和缩进来分隔字段:
ffprobe -dump_separator "
" -i ~/videos/matrixbench_mpeg2.mpg
max_streams integer (input)
指定最大流数。 这可用于拒绝由于大量流而需要太多资源的文件。
12.1格式流说明符
格式流说明符允许选择与特定属性匹配的一个或多个流。
流说明符的可能形式是:
stream_index
使用此索引匹配流。
stream_type[:stream_index]
stream_type
是以下之一:视频v
,音频a
,副标题s
,数据d
和附件t
。 如果给出stream_index
,则它匹配此类型的流编号stream_index
。 否则,它匹配此类型的所有流。
p:program_id[:stream_index]
如果给出了stream_index
,那么它将使用id
为program_id
的程序中的数字stream_index
匹配流。 否则,它匹配程序中的所有流。
#stream_id
通过特定于格式的ID
匹配流。
流说明符的确切语义由libavformat / avformat.h
头中声明的avformat_match_stream_specifier()
函数定义。