FFmpeg 参数

下划线

PDF 可点击跳转 例: 高级选项

typora Ctrl+点击 跳转

参数

通用

简单参数

指令 描述
-L 显示许可证信息.
-version 显示版本信息.
-buildconf 显示构建配置, 每行一个选项.
-formats 显示可用格式(包括设备).
-demuxers 显示可用的分离器.
-muxers 显示可用的复用器.
-devices 显示可用的设备.
-codecs 显示所有已知的libavcodec编解码器.
请注意, 本文档中一直使用术语“编解码器”作为多媒体比特流格式的简称.
-decoders 显示可用的解码器.
-encoders 显示所有可用的编码器.
-bsfs 显示可用的比特流过滤器.
-protocols 显示可用的协议.
-filters 显示可用的libavfilter过滤器.
-pix_fmts 显示可用的像素格式. 3
-sample_fmts 显示可用的采样格式.
-layouts 显示通道名称和标准通道布局.
-dispositions 显示流的属性.
-colors 显示识别的颜色名称.

-h, -?, -help, --help [arg]

显示帮助信息. 可以指定一个可选参数来打印有关特定项的帮助信息.

如果未指定参数, 将仅显示基本(非高级)工具选项.

参数 arg 的可能取值为:

参数 描述
long 除了基本工具选项外, 还打印高级工具选项.
full 打印完整的选项列表, 包括编码器, 解码器, 分离器, 复用器, 过滤器等的共享和私有选项.
decoder=decoder_name 打印有关名为 decoder_name 的解码器的详细信息.
使用 -decoders 选项获取所有解码器的列表.
encoder=encoder_name 打印有关名为 encoder_name 的编码器的详细信息.
使用 -encoders 选项获取所有编码器的列表.
demuxer=demuxer_name 打印有关名为 demuxer_name 的分离器的详细信息.
使用 -formats 选项获取所有分离器和复用器的列表.
muxer=muxer_name 打印有关名为 muxer_name 的复用器的详细信息.
使用 -formats 选项获取所有复用器和分离器的列表.
filter=filter_name 打印有关名为 filter_name 的过滤器的详细信息.
使用 -filters 选项获取所有过滤器的列表.
bsf=bitstream_filter_name 打印有关名为 bitstream_filter_name 的比特流过滤器的详细信息.
使用 -bsfs 选项获取所有比特流过滤器的列表.
protocol=protocol_name 打印有关名为 protocol_name 的协议的详细信息.
使用 -protocols 选项获取所有协议的列表.

-sources device

-sources device[,opt1=val1[,opt2=val2]…]

显示输入设备的自动检测源. 某些设备可能提供系统相关的源名称, 无法自动检测到.
返回的列表不能始终完整.

例如:

ffmpeg -sources pulse,server=192.168.0.4

-sinks device

-sinks device[,opt1=val1[,opt2=val2]…]

显示输出设备的自动检测接收端. 某些设备可能提供系统相关的接收端名称, 无法自动检测到.

返回的列表不能始终完整.

例如:

ffmpeg -sinks pulse,server=192.168.0.4

-loglevel | -v

-loglevel[flags+]loglevel

-v[flags+]loglevel

设置日志级别和库使用的标志.

可选的标志前缀可以包括以下值:

参数 描述
‘repeat’ 指示不将重复的日志输出压缩到第一行, 并省略"上次消息重复n次"的行
‘level’ 指示日志输出应在每个消息行上添加[level]前缀.
这可用作日志着色的替代方法, 例如在将日志转储到文件时使用.

标志也可以单独使用, 通过添加’+‘/’-'前缀来设置/重置单个标志, 而不影响其他标志或更改日志级别.

在设置标志和日志级别时, 最后一个标志值和日志级别之间应使用’+'分隔符.

loglevel可以是包含以下值的字符串或数字之一:

参数 描述
‘quiet, -8’ 完全不显示任何内容; 保持静默.
‘panic, 0’ 仅显示可能导致进程崩溃的致命错误, 如断言失败. 目前未用于任何功能.
‘fatal, 8’ 仅显示致命错误. 这些是绝对不能继续进行的错误.
‘error, 16’ 显示所有错误, 包括可恢复的错误.
‘warning, 24’ 显示所有警告和错误. 将显示与可能不正确或意外事件有关的任何消息.
‘info, 32’ 在处理过程中显示信息性消息. 这是在警告和错误之外的默认值.
‘verbose, 40’ 与info相同, 只是更详细.
‘debug, 48’ 显示所有内容, 包括调试信息.
‘trace, 56’

例如, 要启用重复的日志输出, 添加级别前缀并将loglevel设置为verbose:

ffmpeg -loglevel repeat+level+verbose -i input output

另一个示例, 启用重复的日志output, 而不影响当前级别前缀标志或loglevel:

ffmpeg [...] -loglevel +repeat

默认情况下, 程序将日志记录到stderr.

如果终端支持着色, 将使用颜色标记错误和警告.

可以通过设置环境变量AV_LOG_FORCE_NOCOLOR来禁用日志着色,

或者通过设置环境变量AV_LOG_FORCE_COLOR来强制启用.

-report

将完整的命令行和日志输出转储到当前目录中以程序-YYYYMMDD-HHMMSS.log命名的文件中.

此文件对于错误报告可能很有用. 它还意味着[-loglevel debug](#-loglevel | -v).

设置环境变量FFREPORT为任何值具有相同的效果.

如果值是以’:'分隔的key=value序列, 这些选项将影响报告;

如果它们包含特殊字符或选项分隔符’:', 则必须对选项值进行转义

以下选项被识别:

参数 描述
file 设置报告的文件名;
%p 会扩展为程序的名称
%t会扩展为时间戳
%%会扩展为普通%
level 使用数字值设置日志详细程度
(参见-loglevel)

例如, 要将报告输出到名为ffreport.log的文件中, 并使用级别32(别名为日志级别info):

FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

解析环境变量时的错误不是致命的, 并且不会出现在报告中.

-hide_banner

抑制打印横幅.

所有FFmpeg工具通常会显示版权声明, 构建选项和库版本.

此选项可用于禁止打印这些信息.

-cpuflags flags

(global)

允许设置和清除CPU标志. 此选项旨在用于测试.

除非您知道自己在做什么, 请不要使用它.

例如:

ffmpeg -cpuflags -sse+mmx ...
ffmpeg -cpuflags mmx ...
ffmpeg -cpuflags 0 ...

此选项的可能标志包括:

‘x86’ ‘mmx’ ‘mmxext’ ‘sse’
‘sse2’ ‘sse2slow’ ‘sse3’ ‘sse3slow’
‘ssse3’ ‘atom’ ‘sse4.1’ ‘sse4.2’
‘avx’ ‘avx2’ ‘xop’ ‘fma3’
‘fma4’ ‘3dnow’ ‘3dnowext’ ‘bmi1’
‘bmi2’ ‘cmov’ ‘ARM’ ‘armv5te’
‘armv6’ ‘armv6t2’ ‘vfp’ ‘vfpv3’
‘neon’ ‘setend’ ‘AArch64’ ‘armv8’
‘vfp’ ‘neon’ ‘PowerPC’ ‘altivec’
‘k8’ ‘athlonxp’ ‘athlon’ ‘k62’
‘k6’ ‘pentium4’ ‘pentium3’ ‘pentium2’
‘Specific Processors’

-cpucount count

(global)

覆盖检测到的CPU计数. 此选项旨在用于测试. 除非您知道自己在做什么, 请不要使用它.

例如:

ffmpeg -cpucount 2

-max_alloc bytes

设置由FFmpeg的malloc函数族在堆上分配块的最大大小限制.

在使用此选项时要非常小心, 如果不完全了解这样做的全部后果, 请不要使用.

默认值是INT_MAX.

主要选项

-f fmt

(input/output)

强制指定输入或输出文件格式. 通常情况下, 对于输入文件, 格式会自动检测, 对于输出文件, 会根据文件扩展名猜测, 因此在大多数情况下不需要使用此选项.

参数 描述
ac3 Raw AC3
avi AVI
dv DV
gxf GXF ( General eXchange Format )
h264 Raw H.264
m2v MPEG-2 Video Elemetary Stream
m4v MPEG-4 Video Elemetary Stream
mov QuickTime
mp2 MPEG Audio Layer II
mp3 MPEG Audio Layer III
mp4 MP4
mpeg MPEG-1 System Stream
mpegts MPEG-2 Transport Stream
rawvideo RAW Video
vob MPEG-2 Program Stream
wav WAV

-i

-i url

(input)

输入文件的URL.

-y

(global)

覆盖输出文件而不询问.

-n

(global)

不覆盖输出文件, 如果指定的输出文件已经存在, 则立即退出.

-stream_loop

-stream_loop number

(input)

设置输入流应循环播放的次数.

循环0表示不循环, 循环-1表示无限循环.

-recast_media

(global)

允许强制解码器与检测到的或由解封装器指定的不同媒体类型.

用于解码作为数据流混合的媒体数据时非常有用.

-c | -codec

-c[:stream_specifier] codec

-codec[:stream_specifier] codec

(input/output, per-stream)

选择一个编码器(当用于输出文件之前)或一个解码器(当用于输入文件之前)用于一个或多个流.

codec是解码器/编码器的名称, 或者是一个特殊值copy(仅用于output)表示不重新编码该流.

例如:

ffmpeg -i 输入文件 -map 0 -c:v libx264 -c:a copy 输出文件

上述命令将使用libx264编码所有视频流并复制所有音频流.

对于每个流, 将应用最后匹配的c选项, 因此:

ffmpeg -i 输入文件 -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis 输出文件

上述命令将复制所有流, 除了第二个视频流, 该流将使用libx264编码, 以及第138个音频流, 该流将使用libvorbis编码.

-t

-t duration

(input/output)

当用作输入选项(在 -i 之前)时, 限制从输入文件读取的数据的持续时间.

当用作输出选项(在输出URL之前)时, 当输出的持续时间达到指定的持续时间后停止写入输出.

duration必须是时间持续时间规范, 请参阅ffmpeg-utils手册中的“时间持续时间”部分.

-to 和 -t 选项是互斥的, -t 具有优先级.

-to

-to position

(input/output)

在位置处停止写入输出或读取输入.

position必须是时间持续时间规范, 请参阅ffmpeg-utils手册中的“时间持续时间”部分.

-to 和 -t 选项是互斥的, -t 具有优先级.

-fs

-fs limit_size

(output)

设置文件大小限制, 以字节表示. 一旦超过限制, 将不再写入更多字节的数据.

输出文件的大小略大于所请求的文件大小.

-ss

-ss position

(input/output)

当用作输入选项(在 -i 之前)时, 将在输入文件中寻找到位置.

请注意, 在大多数格式中, 不可能精确地定位, 因此ffmpeg会在位置之前寻找最接近的定位点.

当进行转码并启用 -accurate_seek(默认情况下)时, 将解码并丢弃在定位点和位置之间的额外段.

当进行流复制或使用 -noaccurate_seek 时, 它将被保留.

当用作输出选项(在输出URL之前)时, 解码但丢弃输入数据, 直到时间戳达到位置.

position必须是时间持续时间规范, 请参阅ffmpeg-utils手册中的“时间持续时间”部分.

-sseof

-sseof position

(input)

类似于-ss 选项, 但相对于“文件的末尾”.

也就是说, 负值在文件中更早, 0在EOF处.

-isync

-isync input_index

(input)

将一个输入分配为同步源.

这将获取目标输入和参考输入的开始时间之间的差异, 并将目标文件的时间戳偏移该差异.

两个输入的源时间戳应来自相同的时钟源以获得预期的结果.

如果设置了 copyts, 则还必须设置 start_at_zero. 如果任一输入没有起始时间戳, 则不会进行同步调整.

可接受的值是指有效的ffmpeg输入索引的那些值.

如果同步参考是目标索引本身或-1, 则不会对目标时间戳进行调整.

同步参考本身不能同步到任何其他输入.

默认值是-1.

-itsoffset

-itsoffset offset

(input)

设置输入时间偏移.

offset必须是时间持续时间规范, 请参阅ffmpeg-utils手册中的“时间持续时间”部分.

该偏移值将添加到输入文件的时间戳. 指定正偏移意味着相应的流将被延迟指定偏移时间.

-itsscale

-itsscale scale

(input, per-stream)

重新调整输入时间戳. scale应该是一个浮点数.

-timestamp

-timestamp date

(output)

在容器中设置记录时间戳.

date必须是日期规范, 请参阅ffmpeg-utils手册中的“日期”部分.

-metadata

-metadata[:metadata_specifier] key=value

(output, per-metadata)

设置元数据键/值对.

可以提供一个可选的metadata_specifier来设置流, 章节或程序的元数据.

有关详细信息, 请参阅 -map_metadata 文档.

此选项会覆盖使用 -map_metadata 设置的元数据. 也可以通过使用空值来删除元数据.

例如, 要在输出文件中设置标题:

ffmpeg -i in.avi -metadata title="my title" out.flv

要设置第一个音频流的语言:

ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT

-disposition

-disposition[:stream_specifier] value

(output, per-stream)

设置流的disposition.

默认情况下, disposition从输入流复制,

除非此选项适用于的输出流由复杂的滤波图提供 - 在这种情况下, 默认情况下不设置disposition.

value是由’+‘或’-'分隔的项目序列.

第一个项目也可以带有’+‘或’-'前缀, 在这种情况下, 此选项会修改默认值.

否则(第一个项目没有前缀), 此选项会覆盖默认值.

前缀’+'会添加给定的disposition, '-'会删除它.

还可以通过将其设置为0来清除disposition.

如果没有为输出文件指定-disposition选项,

ffmpeg将自动在每种类型的第一个流上设置’default’ disposition,

当输出文件中存在多个此类型的流且没有流已标记为默认流时.

-dispositions选项列出了已知的disposition.

例如, 要将第二个音频流设置为默认流:

ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv

要将第二个字幕流设置为默认流并从第一个字幕流中删除默认disposition:

ffmpeg -i in.mkv -c copy -disposition:s:0 0 -disposition:s:1 default out.mkv

要添加嵌入式封面/缩略图:

ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4

并非所有的复用器都支持嵌入式缩略图, 而且只支持少数格式, 如JPEG或PNG.

-program

-program [title=title:][program_num=program_num:]st=stream[:st=stream…]

(output)

创建具有指定标题, program_num 的节目, 并将指定的流添加到其中.

-target

-target type

(output)

指定目标文件类型(vcd, svcd, dvd, dv, dv50). type可以以pal-, ntsc-或film-为前缀, 以使用相应的标准.

然后所有格式选项(比特率, 编解码器, 缓冲区大小)会自动设置.

您可以直接输入:

ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

尽管如此, 您可以指定其他选项, 只要您知道它们不会与标准冲突, 例如:

ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg

为每个目标设置的参数如下.

dv50目标与-dv目标相同, 只是设置了所有三种标准的像素格式为yuv422p.

上述任何用户设置的参数值将覆盖目标预设值. 在这种情况下, 输出可能不符合目标标准.

-dn

(input/output)

作为输入选项, 阻止对文件的所有数据流进行过滤或自动选择或映射到任何输出. 请参见-discard选项以逐个禁用流.

作为输出选项, 禁用数据记录, 即不自动选择或映射任何数据流. 要完全手动控制, 请使用-map选项.

-dframes

-dframes number

(output)

设置要输出的数据帧数. 这是一个已弃用的别名, 应改用-frames:d

-frames

-frames[:stream_specifier] framecount

(output, per-stream)

在framecount帧后停止写入流.

-q | -qscale

-q[:stream_specifier] q

-qscale[:stream_specifier] q

(output, per-stream)

使用固定的质量比例(VBR). q/qscale的含义依赖于编解码器.

如果qscale在没有stream_specifier的情况下使用, 则仅适用于视频流,

这是为了保持与以前的行为的兼容性,

并且在没有使用stream_specifier的情况下指定相同的编解码器特定值通常不是预期的行为.

-filter

-filter[:stream_specifier] filtergraph

(output, per-stream)

创建由filtergraph指定的滤镜图, 并将其用于过滤流.

filtergraph是要应用于流的滤镜图的描述, 必须具有与流相同类型的单个输入和单个输出.

在filtergraph中, 输入与标签in关联, 输出与标签out关联.

有关filtergraph语法的更多信息, 请参阅ffmpeg-filters手册.

如果要创建具有多个输入和/或输出的滤镜图, 请参阅-filter_complex选项.

-filter_script

-filter_script[:stream_specifier] filename

(output, per-stream)

此选项与 -filter 类似, 唯一的区别是其参数是要从中读取滤镜图描述的文件的名称.

-reinit_filter

-reinit_filter[:stream_specifier] integer

(input, per-stream)

此布尔选项确定在流中途更改输入帧参数时是否重新初始化供此流供应的滤镜图.

此选项默认启用, 因为大多数视频和所有音频滤镜无法处理输入帧属性的偏差.

重新初始化时, 现有的滤镜状态会丢失, 例如某些滤镜中可用的帧计数n参考.

在重新初始化时, 缓冲的任何帧都将丢失.

触发重新初始化的属性是对于视频, 帧分辨率或像素格式; 对于音频, 样本格式, 样本率, 通道数或通道布局的更改.

-filter_threads

-filter_threads nb_threads

(global)

定义用于处理滤镜管道的线程数.

每个管道将生成一个线程池, 其中有nb_threads个线程可用于并行处理.

默认值是可用CPU的数量.

-pre

-pre[:stream_specifier] preset_name

(output, per-stream)

指定匹配流的预设.

-stats

(global)

打印编码进度/统计信息. 默认情况下打开, 要明确禁用它, 您需要指定-nostats.

-stats_period

-stats_period time

(global)

设置编码进度/统计信息更新的周期.

默认值为0.5秒.

-progress

-progress url

(global)

将程序友好的进度信息发送到URL.

进度信息会定期写入, 并在编码过程结束时写入. 它由“key=value”行组成.

键仅由字母数字字符组成. 一系列进度信息的最后一个键始终为“progress”.

使用-stats_period设置更新周期.

-stdin

启用标准输入的交互. 默认情况下启用, 除非标准输入用作输入.

要明确禁用标准输入上的交互, 您需要指定-nostdin.

在后台进程组中使用ffmpeg时, 禁用标准输入上的交互很有用.

大致相同的结果可以通过ffmpeg … < /dev/null实现, 但需要一个shell.

-debug_ts

(global)

打印时间戳信息. 默认情况下关闭.

此选项主要用于测试和调试目的, 输出格式可能会从一个版本更改为另一个版本, 因此不应在可移植脚本中使用它.

还请参阅选项-fdebug ts.

-attach

-attach filename

(output)

将附件添加到输出文件.

这受支持的格式有一些, 如Matroska, 例如用于呈现字幕的字体.

附件被实现为一种特定类型的流, 因此此选项将在文件中添加一个新流.

然后可以以通常的方式在此流上使用每个流选项.

使用此选项创建的附件流将在所有其他流(即使用 -map 或自动映射创建的流)之后创建.

请注意, 对于Matroska, 您还必须设置mimetype元数据标签:

ffmpeg -i 输入文件 -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

(假设附件流将位于输出文件的第三个位置).

-dump_attachment

-dump_attachment[:stream_specifier] filename

(input, per-stream)

将匹配的附件流提取到名为filename的文件中. 如果filename为空, 则将使用filename元数据标签的值.

例如, 要提取第一个附件到名为’out.ttf’的文件中:

ffmpeg -dump_attachment:t:0 out.ttf -i INPUT

要提取由filename标签确定的所有附件到文件中:

ffmpeg -dump_attachment:t "" -i INPUT

技术说明 - 附件被实现为编解码器附加数据(extradata),

因此此选项实际上可以用于提取任何流的extradata, 而不仅仅是附件.

视频选项

-vframes

-vframes number

(output)

设置要输出的视频帧数. 这是 -frames:v 的已弃用别名, 应改用后者.

-r

-r[:stream_specifier] fps

(input/output,per-stream)

设置帧率(Hz 值, 分数或缩写).

作为输入选项时, 忽略文件中存储的任何时间戳, 并生成假定恒定帧率 fps 的时间戳.

这与用于某些输入格式(如 image2 或 v4l2)的 -framerate 选项不同(在较早版本的 FFmpeg 中曾相同).

如果不确定, 请使用 -framerate 而不是输入选项 -r.

作为输出选项: 视频编码会在编码之前复制或丢弃帧以实现恒定的输出帧率 fps.

对于流复制, 指示复用器 fps 是流帧率. 在这种情况下, 不会丢弃或复制任何数据.

如果 fps 与由包时间戳确定的实际流帧率不匹配, 这可能会生成无效文件. 还请参阅setts比特流过滤器.

-fpsmax

-fpsmax[:stream_specifier] fps

(output,per-stream)

设置最大帧率(Hz 值, 分数或缩写).

当输出帧率自动设置并且高于此值时, 会限制输出帧率.

在批处理处理或输入帧率错误检测为非常高时非常有用. 不能与 -r 一起设置. 在流复制期间会被忽略.

-s

-s[:stream_specifier] size

(input/output,per-stream)

设置帧大小.

作为输入选项, 这是 video_size 私有选项的快捷方式,

某些解复用器识别该选项, 其中帧大小要么不存储在文件中, 要么是可配置的, 例如原始视频或视频捕获设备.

作为输出选项, 这会将 scale 视频滤镜插入到相应的滤镜图的末尾.

请直接使用 scale 滤镜将其插入到开头或其他位置. 格式为 ‘wxh’(默认值与源相同)

-aspect

-aspect[:stream_specifier] aspect

(output,per-stream)

设置由 aspect 指定的视频显示宽高比.

aspect 可以是浮点数字符串, 也可以是 num:den 形式的字符串,

其中 num 和 den 是宽高比的分子和分母.

例如, “4:3”, “16:9”, “1.3333” 和 “1.7777” 都是有效的参数值.

如果与 -vcodec copy 一起使用, 它将影响容器级别存储的宽高比, 但不会影响编码帧中存储的宽高比(如果存在).

-display_rotation

-display_rotation[:stream_specifier] rotation

(input,per-stream)

设置视频旋转元数据.

rotation 是一个以度为单位指定的十进制数, 表示在显示之前应将视频逆时针旋转的角度.

此选项会覆盖文件中存储的旋转/显示转换元数据(如果有的话).

当对视频进行转码(而不是复制)并启用 -autorotate 时, 在过滤阶段将旋转视频.

否则, 如果复用器支持, 元数据将写入输出文件.

如果给出了 -display_hflip 或 -display_vflip 选项, 则它们将在此选项指定的旋转之后应用.

-display_hflip

-display_hflip[:stream_specifier]

(input,per-stream)

设置图像在显示时是否应水平翻转. 有关更多详情, 请参阅 -display_rotation 选项.

-display_vflip

-display_vflip[:stream_specifier]

(input,per-stream)

设置图像在显示时是否应垂直翻转. 有关更多详情, 请参阅 -display_rotation 选项.

-vn

(input/output)

作为输入选项, 阻止文件中的所有视频流被过滤或自动选择或映射到任何输出.

请参见 -discard 选项以单独禁用流. 作为输出选项, 禁用视频录制, 即自动选择或映射任何视频流.

要进行完全手动控制, 请使用 -map 选项.

-vcodec

-vcodec codec

(output)

设置视频编解码器. 这是 [-codec:v](#-c | -codec) 的别名.

-pass

-pass[:stream_specifier] n

(output,per-stream)

选择传递号码(1 或 2). 用于进行两次传递的视频编码.

视频的统计信息会在第一次传递中记录到日志文件中(也可以参见选项 -passlogfile

在第二次传递中, 该日志文件用于以精确的请求比特率生成视频.

在第一次传递中, 您可以只停用音频并将输出设置为 null,

以下是 Windows 和 Unix 的示例:

ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null

-passlogfile

-passlogfile[:stream_specifier] prefix

(output,per-stream)

将两次传递的日志文件名前缀设置为 prefix, 默认文件名前缀为“ffmpeg2pass”.

完整的文件名将是 PREFIX-N.log, 其中 N 是特定于输出流的数字.

-vf

-vf filtergraph

(output)

创建由 filtergraph 指定的滤镜图并使用它来过滤流. 这是 -filter:v 的别名

-autorotate

根据文件元数据自动旋转视频. 默认启用, 使用 -noautorotate 来禁用它.

-autoscale

根据第一帧的分辨率自动缩放视频.

默认启用, 使用 -noautoscale 来禁用它.

当禁用 autoscale 时, 滤镜图的所有输出帧可能不具有相同的分辨率, 并且可能不适合某些编码器/复用器.

因此, 不建议禁用它, 除非您真的知道自己在做什么. 请自行承担禁用 autoscale 的风险.

高级视频选项

-pix_fmt

-pix_fmt[:stream_specifier] format

(input/output,per-stream)

设置像素格式. 使用 -pix_fmts 来显示所有支持的像素格式. 如果所选的像素格式无法选择, ffmpeg 将打印警告并选择编码器支持的最佳像素格式. 如果 pix_fmt 前面有一个 +, 如果无法选择所请求的像素格式, ffmpeg 将出错, 并且在滤镜图内部禁用自动转换. 如果 pix_fmt 是单个 +, ffmpeg 将选择与输入(或图形输出)相同的像素格式, 并禁用自动转换.

-sws_flags

-sws_flags flags

(input/output)

设置 libswscale 库的默认标志.

这些标志由自动插入的 scale 滤镜以及在简单滤镜图内部使用, 如果在滤镜图定义中没有被覆盖的话.

请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册 以查看缩放器选项的列表.

-rc_override

-rc_override[:stream_specifier] override

(output,per-stream)

用于特定时间间隔的速率控制覆盖, 格式为以斜杠分隔的 “int,int,int” 列表.

前两个值是开始和结束帧编号, 最后一个是正值时使用的量化器, 负值时是质量因子.

-psnr

计算压缩帧的 PSNR. 此选项已过时, 应该将 PSNR 标志传递给编码器, 使用 -flags +psnr.

-vstats

将视频编码统计信息转储到 vstats_HHMMSS.log 文件中. 请参阅 vstats 文件格式 部分以获取格式描述.

-vstats_file file

将视频编码统计信息转储到文件中. 请参阅 vstats 文件格式 部分以获取格式描述.

-vstats_version file

指定要使用的 vstats 格式的版本. 默认值是 2. 请参阅 vstats 文件格式 部分以获取格式描述.

-top

-top[:stream_specifier] n

(output,per-stream)

top=1/bottom=0/auto=-1 首先的场

-vtag

-vtag fourcc/tag

(output)

强制视频标签/fourcc. 这是 -tag:v 的别名.

-vbsf

-vbsf bitstream_filter

已弃用, 参见 -bsf


-force_key_frames

-force_key_frames[:stream_specifier] time[,time…]
-force_key_frames[:stream_specifier] expr:expr
-force_key_frames[:stream_specifier] source
-force_key_frames[:stream_specifier] source_no_drop

(output,per-stream)

force_key_frames 可以采用以下形式的参数: time[,time…] 如果参数由时间戳组成,

ffmpeg 将会将指定的时间舍入到最接近的输出时间戳, 按照编码器时间基准,

并在具有时间戳等于或大于计算时间戳的第一帧上强制关键帧.

请注意, 如果编码器的时间基准太粗糙, 那么关键帧可能会在低于指定时间的时间戳上被强制.

默认编码器时间基准是输出帧速率的倒数, 但可以通过 -enc_time_base 设置为其他值.

如果其中一个时间是 “chapters[delta]”,

它会扩展为文件中所有章节的开始时间, 以秒为单位, 由 delta 偏移, 表达为时间.

此选项可用于确保输出文件的章节标记或其他指定位置处存在搜索点.

例如, 要在 5 分钟处插入一个关键帧, 以及每个章节开始之前 0.1 秒处插入关键帧:

-force_key_frames 0:05:00,chapters-0.1

expr:expr

如果参数以 expr: 开头, 字符串 expr 将被解释为表达式, 并针对每一帧进行评估.

如果评估结果非零, 则强制生成关键帧.

expr 中的表达式可以包含以下常数:

  • n 当前处理的帧数, 从 0 开始

  • n_forced 已强制帧的数量

  • prev_forced_n 上一帧的强制帧数量, 如果尚未强制关键帧, 则为“NAN”

  • prev_forced_t 上一帧的强制帧时间, 如果尚未强制关键帧, 则为“NAN”

  • t 当前处理帧的时间

    例如, 要每隔 5 秒强制一个关键帧, 可以指定:

    -force_key_frames expr:gte(t,n_forced*5) 
    

    要在上一帧强制关键帧后的 5 秒后强制关键帧, 从第 13 秒开始:

    -force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5)) 
    

source

如果参数是 source, ffmpeg 将在当前正在编码的帧标记为关键帧的情况下强制生成关键帧.

source_no_drop

如果参数是 source_no_drop, ffmpeg 将在当前正在编码的帧标记为关键帧的情况下强制生成关键帧.

在必须丢弃这个特定源帧的情况下, 将强制下一个可用帧成为关键帧.

请注意, 强制生成太多关键帧对某些编码器的前瞻算法非常有害: 使用固定 GOP 选项或类似选项可能更高效.

-copyinkf

-copyinkf[:stream_specifier]

(output,per-stream)

在进行流复制时, 也复制找到的起始非关键帧.

-init_hw_device

-init_hw_device type[=name][:device[,key=value…]]

初始化一个名为 name 的新硬件设备, 类型为 type, 使用给定的设备参数.

如果没有指定名称, 它将接收一个默认名称, 形式为 “type%d”.

设备和以下参数的含义取决于设备类型:

  • cuda

    设备是 CUDA 设备的编号.

    识别以下选项: primary_ctx 如果设置为 1, 使用主设备上下文而不是创建一个新的设备上下文.

    示例:

    选择系统上的第二个设备.

    -init_hw_device cuda:1
    

    选择第一个设备并使用主设备上下文

    -init_hw_device cuda:0,primary_ctx=1
    
  • dxva2

    设备是 Direct3D 9 显示适配器的编号.

  • d3d11va

    设备是 Direct3D 11 显示适配器的编号.

  • vaapi

    设备是 X11 显示名称, DRM 渲染节点或 DirectX 适配器索引.

    如果未指定, 它将尝试打开默认的 X11 显示($DISPLAY),

    然后是第一个 DRM 渲染节点(/dev/dri/renderD128), 或者在 Windows 上是默认的 DirectX 适配器.

  • vdpau

    设备是 X11 显示名称. 如果未指定, 它将尝试打开默认的 X11 显示($DISPLAY).

  • qsv

    设备选择 ‘MFX_IMPL_*’ 中的一个值.

    允许的值有: autosw, hw, auto_any, hw_any, hw2, hw3, hw4.

    如果未指定, 将使用 ‘auto_any’.

    注意, 通过创建适用于 QSV 的平台特定的子设备(‘dxva2’ 或 ‘d3d11va’ 或 ‘vaapi’)

    然后从中派生 QSV 设备可能更容易实现所需的结果.

    另外, ‘child_device_type’ 有助于选择适用于平台的子设备类型.

    在 Windows 上, 默认子设备类型为 ‘d3d11va’.

    示例:

    选择具有 ‘d3d11va’ 类型的 GPU 子设备, 并创建具有 ‘MFX_IMPL_HARDWARE’ 的 QSV 设备.

    -init_hw_device qsv:hw,child_device_type=d3d11va
    

    选择具有 ‘dxva2’ 类型的 GPU 子设备, 并创建具有 ‘MFX_IMPL_HARDWARE’ 的 QSV 设备.

    -init_hw_device qsv:hw,child_device_type=dxva2
    
  • opencl

    设备选择 platform_index.device_index.

    可以使用键值对来过滤一组设备, 以仅查找与特定平台或设备字符串匹配的设备.

    可用作过滤器的字符串有:

    platform_profile platform_version platform_name platform_vendor
    platform_extensions device_name device_vendor driver_version
    device_version device_profile device_extensions device_type

    索引和过滤器必须共同唯一选择一个设备.

    示例:

    选择第一个平台上的第二个设备.

    -init_hw_device opencl:0.1
    

    选择包含字符串 Foo9000 的名称的设备.

    -init_hw_device opencl:,device_name=Foo9000
    

    选择第二个平台上支持 cl_khr_fp16 扩展的 GPU 设备

    -init_hw_device opencl:1,device_type=gpu,device_extensions=cl_khr_fp16
    
  • vulkan

    如果设备是整数, 则它根据系统相关设备列表中的索引选择设备.

    如果设备是任何其他字符串, 则它选择第一个包含该字符串作为子字符串的设备名称.

    以下选项可识别:

    debug 如果设置为 1, 启用验证层(如果已安装).

    linear_images 如果设置为 1, 由 hwcontext 分配的图像将是线性的且可在本地映射.

    instance_extensions 附加实例扩展的加号分隔列表, 以启用.

    device_extensions 附加设备扩展的加号分隔列表, 以启用.

    示例:

    选择系统上的第二个设备.

    -init_hw_device vulkan:1
    

    选择第一个包含字符串 RADV 的名称的设备.

    -init_hw_device vulkan:RADV
    

    选择第一个设备并启用 Wayland 和 XCB 实例扩展

    -init_hw_device vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface
    

-init_hw_device type[=name]@source

类型列表

初始化一个名为 name 的新硬件设备, 类型为 type, 从名为 source 的现有设备派生.

-init_hw_device list

列出此版本的 ffmpeg 支持的所有硬件设备类型.

-filter_hw_device

-filter_hw_device name

将名为 name 的硬件设备传递给滤镜图中的所有滤镜.

这可以用于设置要使用 hwupload 滤镜上传到的设备, 或者要使用 hwmap 滤镜映射到的设备.

其他滤镜在需要硬件设备时也可以使用此参数.

请注意, 通常只有在输入不已经处于硬件帧时才需要这样设置 - 当输入处于硬件帧时,

滤镜将从它们作为输入接收的帧的上下文中派生它们所需的设备.

这是一个全局设置, 因此所有滤镜都将接收相同的设备.

-hwaccel

-hwaccel[:stream_specifier] hwaccel

(input,per-stream)

使用硬件加速来解码匹配的流. hwaccel 允许的值包括:

参数 描述
none 不使用任何硬件加速(默认值)
auto 自动选择硬件加速方法
vdpau 使用 VDPAU(Unix 的视频解码和显示 API)硬件加速
dxva2 使用 DXVA2(DirectX 视频加速)硬件加速
d3d11va 使用 D3D11VA(DirectX 视频加速)硬件加速
vaapi 使用 VAAPI(视频加速 API)硬件加速
qsv 使用英特尔 QuickSync Video 加速进行视频转码

请注意, 大多数加速方法用于播放, 对于现代 CPU 来说, 不会比软件解码更快.

此外, ffmpeg 通常需要将从 GPU 内存解码的帧复制到系统内存, 导致进一步的性能损失.

因此, 此选项主要用于测试.

-hwaccel_device

-hwaccel_device[:stream_specifier] hwaccel_device

(input,per-stream)

选择用于硬件加速的设备. 此选项仅在指定 -hwaccel 选项时才有意义.

它可以引用使用 -init_hw_device 按名称创建的现有设备

或者可以创建一个新设备, 就好像在之前立即调用了 -init_hw_device type:hwaccel_device 一样.

-hwaccels

列出此版本的 ffmpeg 中启用的所有硬件加速组件.

实际运行时的可用性取决于硬件及其适用的驱动程序是否已安装.

-fix_sub_duration_heartbeat

-fix_sub_duration_heartbeat[:stream_specifier]

将特定的输出视频流设置为心跳流, 根据它来分割和传送当前正在进行的字幕, 以便在接收随机访问包时降低字幕的延迟.

这会导致字幕事件的重复以覆盖全时长, 因此在处理不关注字幕事件何时传递给输出的用例时, 不应使用此选项.

要使此选项生效, 需要为相关输入字幕流设置 -fix_sub_duration, 同时输入字幕流必须直接映射到包含心跳流的相同输出中.

音频选项

-aframes

-aframes number

(output)

设置要输出的音频帧数. 这是 -frames:a 的一个已过时的别名, 你应该使用后者.

-ar

-ar[:stream_specifier] freq

(input/output,per-stream)

设置音频采样频率. 对于输出流, 默认情况下设置为与相应输入流的频率相同. 对于输入流, 此选项仅对音频抓取设备和原始解复用器有意义, 并映射到相应的解复用器选项.

-aq

-aq q

(output)

设置音频质量(特定于编解码器, VBR). 这是 -q:a 的别名.

-ac

-ac[:stream_specifier] channels

(input/output,per-stream)

设置音频通道数. 对于输出流, 默认情况下设置为输入音频通道数.

对于输入流, 此选项仅对音频抓取设备和原始解复用器有意义, 并映射到相应的解复用器选项.

-an

(input/output)

作为输入选项, 阻止从文件中的所有音频流进行过滤或自动选择或映射到任何输出.

请参阅 -discard 选项以单独禁用流.

-acodec

-acodec codec

(input/output)

设置音频编解码器. 这是 [-codec:a](#-c | -codec) 的别名.

-sample_fmt

-sample_fmt[:stream_specifier] sample_fmt

(output,per-stream)

设置音频采样格式. 使用 -sample_fmts 来获取支持的采样格式列表.

-af

-af filtergraph

(output)

创建由 filtergraph 指定的滤镜图, 并用它来过滤流. 这是 -filter:a 的别名.

高级音频选项

-atag

-atag fourcc/tag

(output)

强制音频标签/四字符代码. 这是 -tag:a 的别名.

-absf

-absf bitstream_filter

已弃用, 参见 -bsf.

-guess_layout_max

-guess_layout_max channels

(input,per-stream)

如果某些输入通道布局未知, 尝试猜测是否与指定数量的通道最多相对应.

例如, 设置为 2 表示要识别 1 个通道为单声道, 2 个通道为立体声, 但不识别 6 个通道为 5.1.

默认情况下始终尝试猜测. 使用 0 禁用所有猜测. ffmpeg

字幕选项

-scodec

-scodec codec

(input/output)

设置字幕编解码器. 这是 -codec:s 的别名.

-sn

(input/output)

作为输入选项, 阻止从文件中的所有字幕流进行过滤或自动选择或映射到任何输出. 请参阅 -discard 选项以单独禁用流.

-sbsf

-sbsf bitstream_filter

已弃用, 参见 -bsf.

高级字幕选项

-fix_sub_duration

修复字幕持续时间. 对于每个字幕, 等待同一流中的下一个数据包, 并调整第一个字幕的持续时间, 以避免重叠.

这在某些字幕编解码器中是必需的, 特别是 DVB 字幕,

因为原始数据包中的持续时间只是一个粗略的估计, 实际的结束由一个空的字幕帧标记.

在必要时未使用此选项可能导致夸张的持续时间或由于非单调时间戳而导致的复用失败.

请注意, 此选项会延迟所有数据的输出, 直到下一个字幕数据包被解码:它可能会显著增加内存消耗和延迟.

-canvas_size size

设置用于呈现字幕的画布大小.

高级选项

-map

-map [-]input_file_id[:stream_specifier][?] | [linklabel]

(output)

在流标识符之前加上 - 字符会创建一个“负面”映射. 它会禁用已创建映射的匹配流

在流索引之后加上 ? 将允许映射是可选的: 如果映射不匹配任何流, 则将忽略映射而不会导致失败. 请注意, 如果使用了无效的输入文件索引, 例如映射引用了不存在的输入, 则映射仍然会失败.

示例:

  1. 映射所有流

将第一个输入文件的所有流映射到输出:

ffmpeg -i INPUT -map 0 output 
  1. 选择特定流

如果第一个输入文件中有两个音频流, 这些流分别标识为 0:0 和 0:1. 您可以使用 -map 选择要放入输出文件的哪些流.

ffmpeg -i INPUT -map 0:1 out.wav 

将第一个输入中的第二个流映射到 out.wav 中的(单个)输出流.

  1. 创建多个流

选择输入文件 a.mov 中索引为 2 的流(由标识符 0:2 指定), 以及输入文件 b.mov 中索引为 6 的流(由标识符 1:6 指定), 并将它们复制到输出文件 out.mov:

ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov 

选择来自输入文件的所有视频和第三个音频流:

ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
  1. 负面映射

若要映射除第二个音频流之外的所有流, 请使用负面映射

ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
  1. 可选映射

将第一个输入的视频和音频流映射, 并使用末尾的 ?, 如果第一个输入中不存在音频流, 则忽略音频映射而不是失败:

ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT 
  1. 按语言映射

选择英语音频流:

ffmpeg -i INPUT -map 0:m:language:eng OUTPUT

-ignore_unknown

忽略未知类型的输入流, 而不是在尝试复制这些流时失败

-copy_unknown

允许复制未知类型的输入流, 而不是在尝试复制这些流时失败.

-map_channel

-map_channel [input_file_id.stream_specifier.channel_id|-1][?][:output_file_id.stream_specifier]

此选项 已被弃用并将被移除. 它可以被 pan 滤镜替代. 在某些情况下, 使用 channelsplit, channelmap 或 amerge 滤镜的某种组合可能更容易.

从给定的输入中映射音频通道到输出. 如果未设置 output_file_id.stream_specifier, 则音频通道将映射到所有音频流上.

使用 “-1” 代替 input_file_id.stream_specifier.channel_id 将映射一个静音通道.

在 map_channel 之后加上 ? 将允许 map_channel 是可选的: 如果 map_channel 不匹配任何通道, 则将忽略 map_channel 而不会导致失败. 例如, 假设 INPUT 是立体声音频文件, 您可以使用以下命令交换两个音频通道:

ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT

如果您想要将第一个通道静音并保留第二个通道:

ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT

“-map_channel” 选项的顺序指定输出流中通道的顺序. 输出通道布局是从映射的通道数中猜测出来的(如果一个 “-map_channel”, 则为单声道;

如果两个, 则为立体声, 依此类推). 在 “-map_channel” 和 “-ac” 结合使用时,

如果输入和输出通道布局不匹配(例如两个 “-map_channel” 选项和 “-ac 6”), 通道增益级别将被更新.

您还可以将输入的每个通道提取到特定的输出中;

以下命令从 INPUT 音频流(文件 0, 流 0)中提取两个通道到各自的 OUTPUT_CH0 和 OUTPUT_CH1 输出中:

ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1

以下示例将立体声输入的通道拆分为两个单独的流, 这些流放入同一个输出文件中:

ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg

请注意, 目前每个输出流只能包含来自单个输入流的通道;

例如, 不能使用 “-map_channel” 从不同流中(来自同一文件或不同文件)选择多个输入音频通道并将它们合并为单个输出流.

因此, 目前无法将两个单独的单声道流合并为单个立体声流. 但是, 将立体声流拆分为两个单声道流是可能的.

如果需要此功能, 可能的解决方法是使用 amerge 滤镜.

例如, 如果需要将具有两个单声道音频流的媒体(此处为 input.mkv)合并为一个单声道立体声音频流(并保留视频流), 可以使用以下命令:

ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv

要映射来自第一个输入的前两个音频通道, 并使用末尾的 ?, 如果第一个输入是单声道而不是立体声, 则忽略音频通道映射:

ffmpeg -i INPUT -map_channel 0.0.0 -map_channel 0.0.1? OUTPUT

-map_metadata

-map_metadata[:metadata_spec_out] infile[:metadata_spec_in]

(output,per-metadata)

从 infile 中设置下一个输出文件的元数据信息. 请注意, 这些是文件索引(从零开始), 而不是文件名.

可选的 metadata_spec_in/out 参数指定要复制的元数据. 元数据说明符可以采用以下形式:

  • g

    全局元数据, 即适用于整个文件的元数据

  • s[:stream_spec]

    每个流的元数据. stream_spec 是流说明符.

    在输入元数据说明符中, 会从第一个匹配的流中复制. 在输出元数据说明符中, 会将所有匹配的流都复制到其中.

  • c:chapter_index

    每章元数据. chapter_index 是基于零的章节索引.

  • p:program_index

    每个程序的元数据. program_index 是基于零的程序索引.

如果省略了元数据说明符, 则默认为全局.

默认情况下, 全局元数据从第一个输入文件复制, 每个流和每个章节的元数据会与流/章节一起复制.

通过创建相应类型的任何映射来禁用这些默认映射. 可以使用负文件索引来创建一个仅禁用自动复制的虚拟映射.

例如, 将输入文件的第一个流的元数据复制到输出文件的全局元数据中:

ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3

要执行相反操作, 即将全局元数据复制到所有音频流中:

ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv

请注意, 在此示例中, 简单的 0 也可以使用, 因为默认情况下会假定全局元数据.

-map_chapters

-map_chapters input_file_index

(output)

从输入文件索引 input_file_index 复制章节到下一个输出文件.

如果未指定章节映射, 则从至少具有一个章节的第一个输入文件复制章节. 使用负文件索引来禁用任何章节复制.

-benchmark

(global)

在编码结束时显示基准信息. 显示使用的实际时间, 系统时间, 用户时间以及最大内存消耗.

不是所有系统都支持最大内存消耗, 如果不支持, 通常会显示为 0.

-benchmark_all

(global)

在编码过程中显示基准信息.

显示各个步骤(音频/视频编码/解码)中使用的实际时间, 系统时间和用户时间.

-timelimit duration

(global)

在ffmpeg运行的CPU用户时间达到 duration 秒后退出.

-dump

(global)

将每个输入数据包转储到标准错误流.

-hex

(global)

在转储数据包时, 同时转储数据负载.

-readrate

-readrate speed

(input)

限制输入读取速度.

其值是一个正浮点数, 表示在一秒钟的挂钟时间中应该摄入的媒体最长持续时间, 以秒为单位.

默认值为零, 表示没有对摄入速度施加的限制.

1 表示实时速度, 等效于 -re.

主要用于模拟捕获设备或实时输入流(例如, 从文件读取).

当输入是实际捕获设备或实时流时, 不应使用低值, 因为它可能导致数据包丢失.

当输出数据包的流速度很重要时, 比如实时流媒体.

-re

(input)

以原生帧率读取输入. 这等同于设置 -readrate 1

-readrate_initial_burst

-readrate_initial_burst seconds

设置初始读取突发时间, 以秒为单位,

之后将强制执行 -re/-readrate.

-vsync

-vsync parameter

(global)

vsync 应用于所有输出视频流; vsync 已弃用, 并将在将来删除

参数列表查看-fps_mode

-fps_mode

-fps_mode [:stream_specifier] parameter

(output,per-stream)

设置视频同步方法 / 帧率模式.

由于兼容性原因, 某些值可以作为数字指定(在下表中用括号表示)

参数 描述
passthrough (0) 每帧都会带有其来自解复用器到复用器的时间戳.
cfr (1) 帧将被复制和丢弃, 以实现精确的请求的恒定帧速率.
vfr (2) 框通过带有其时间戳或丢弃以防止两个框具有相同的时间戳.
drop 与透传相同, 但销毁所有时间戳, 使复用器基于帧速率生成新的时间戳.
auto (-1) 根据复用器的能力在 CFR 和 VFR 之间进行选择. 这是默认方法.

请注意, 时间戳可能会在此之后由复用器进一步修改. 例如, 在启用格式选项 avoid_negative_ts 的情况下.

使用 -map 可以选择从哪个流中获取时间戳. 您可以保持视频或音频不变, 并将其余流同步到未更改的流.

-frame_drop_threshold

-frame_drop_threshold parameter

帧丢弃阈值, 指定视频帧可以滞后多少帧后才会被丢弃. 以帧速率单位表示, 因此 1.0 表示一帧.

默认值为 -1.1.

一个可能的用例是, 在存在嘈杂的时间戳情况下避免帧丢失, 或者在存在精确时间戳的情况下增加帧丢失的精度.

-apad

-apad parameters

(output,per-stream)

填充输出音频流. 这与应用 -af apad 相同. 参数是一个由与 apad 滤镜相同的方式组成的滤镜参数字符串.

必须为此输出设置 -shortest 选项, 以使该选项生效.

-copyts

不处理输入时间戳, 而保留其值, 而不尝试清理它们.

特别是, 不会删除初始的起始时间偏移值.

请注意, 根据 vsync 选项或特定的复用器处理

(例如启用了格式选项 avoid_negative_ts 的情况下),

即使选择了此选项, 输出时间戳与输入时间戳可能不匹配.

-start_at_zero

在与 copyts 一起使用时, 将输入时间戳移动, 使其从零开始.

这意味着使用例如 -ss 50 将使输出时间戳从 50 秒开始, 而不管输入文件从何时开始.

-copytb mode

在流复制时指定如何设置编码器时间基准. mode 是一个整数数值, 可以具有以下值之一:

参数 描述
1 使用解复用器时间基准.
时间基准从相应的输入解复用器复制到输出编码器.
这有时需要避免在复制具有可变帧率的视频流时出现非单调递增的时间戳.
0 使用解码器时间基准.
时间基准从相应的输入解码器复制到输出编码器.
-1 尝试自动选择, 以生成合理的输出.
默认值为 -1.

-enc_time_base

-enc_time_base[:stream_specifier] timebase

(output,per-stream)

设置编码器时间基准. timebase 可以具有以下值之一:

参数 描述
0 根据媒体类型分配默认值.
对于视频 - 使用 1/framerate, 对于音频 - 使用 1/samplerate.
demux 使用解复用器的时间基准.
filter 使用滤镜图的时间基准.
正数 使用提供的数字作为时间基准.
此字段可以作为两个整数的比例(例如 1:24, 1:48000)或
小数(例如 0.04166, 2.0833e-5)提供.
默认值为 0.

-bitexact

(input/output)

启用(解)复用器和(解/编)码器的位精确模式

-shortest

(output)

当最短的输出流结束时完成编码.

请注意, 此选项可能需要缓冲帧, 这会引入额外的延迟.
此延迟的最大量可以通过 -shortest_buf_duration 选项进行控制.

-shortest_buf_duration

-shortest_buf_duration duration

(output)

当至少有一个流是“稀疏”的(即在帧之间有大间隔的情况

通常对于字幕来说是这种情况)时, -shortest 选项可能需要缓冲潜在大量的数据.

此选项控制缓冲帧的最大持续时间(以秒为单位).

较大的值可以使 -shortest 选项产生更准确的结果, 但会增加内存使用和延迟.

默认值为 10 秒.

-dts_delta_threshold

-dts_delta_threshold threshold

时间戳不连续的差值阈值, 以秒为小数表示.

此选项启用的时间戳不连续性校正仅适用于接受时间戳不连续性的输入格式(启用了 AV_FMT_DISCONT 标志的格式)

例如 MPEG-TS 和 HLS, 并且在使用 -copy_ts 选项时会自动禁用(除非检测到包装).

如果检测到时间戳不连续性, 其绝对值大于 threshold,

则ffmpeg将通过减少/增加当前DTS和PTS的相应增量值来删除不连续性.

默认值为 10.

-dts_error_threshold

-dts_error_threshold threshold

时间戳错误差值阈值, 以秒为小数表示.

此选项启用的时间戳纠正仅适用于不接受时间戳不连续性的输入格式(未启用 AV_FMT_DISCONT 标志的格式).

如果检测到时间戳不连续性, 其绝对值大于 threshold, 则ffmpeg将丢弃PTS/DTS时间戳值.

默认值为3600*30(30小时), 这是任意选择的且相当保守的值.

-muxdelay

-muxdelay seconds

(output)

设置最大的解复用-解码延迟.

-muxpreload

-muxpreload seconds

(output)

设置初始的解复用-解码延迟.

-streamid

-streamid output-stream-index:new-value

(output)

为输出流分配新的流ID值. 此选项应在适用的输出文件名之前指定. 对于存在多个输出文件的情况, 可以将流ID重新分配为不同的值.

例如, 要将流0的PID设置为33, 并将流1的PID设置为36, 可以使用以下命令将输出文件设置为mpegts文件:

ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts

-bsf

-bsf[:stream_specifier] bitstream_filters

(output,per-stream)

为匹配的流设置比特流过滤器. bitstream_filters 是一个以逗号分隔的比特流过滤器列表.

使用 -bsfs 选项获取比特流过滤器的列表.

ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt

-tag

-tag[:stream_specifier] codec_tag

(input/output,per-stream)

为匹配的流强制设置标签/四字符码.

-timecode

-timecode hh:mm:ssSEPff

为写入指定时间码. SEP 是非降低时间码的’:‘, 降低时间码的’;‘(或’.').

ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg

-filter_complex

-filter_complex filtergraph

(global)

定义复杂的滤镜图, 即带有任意数量输入和/或输出的滤镜图.

输入链接标签必须使用 [file_index:stream_specifier] 语法引用输入流(与 -map 使用相同).

如果 stream_specifier 匹配多个流, 则将使用第一个流.

未标记的输入将连接到匹配类型的第一个未使用的输入流.

输出链接标签使用 -map 引用. 未标记的输出将自动添加到第一个输出文件.

请注意, 使用此选项, 可以仅使用 lavfi 源, 而不使用正常的输入文件.

例如, 要在视频上叠加图像:

ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map '[out]' out.mkv

这里 [0:v] 指的是第一个输入文件中的第一个视频流, 它连接到叠加滤镜的第一个(主要)输入. 同样, 第二个输入中的第一个视频流与叠加的第二个(叠加)输入连接.

假设每个输入文件中只有一个视频流, 我们可以省略输入标签, 因此上述命令等同于:

ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map '[out]' out.mkv

此外, 我们可以省略输出标签, 并且滤镜图中的单个输出将自动添加到输出文件中, 因此我们可以简单地写成:

ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv

作为特殊例外, 您可以使用位图字幕流作为输入:

它将转换为与文件中最大的视频大小相同的视频, 如果没有视频, 则为720x576.

请注意, 这是一种实验性和临时的解决方案. 一旦libavfilter对字幕有了适当的支持, 它将被删除.

例如, 要在存储为MPEG-TS格式的DVB-T录制上硬编码字幕, 将字幕延迟1秒:

ffmpeg -i input.ts -filter_complex \
'[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
-sn -map '#0x2dc' output.mkv

(0x2d0, 0x2dc和0x2ef分别是MPEG-TS的视频, 音频和字幕流的PID; 0:0, 0:3和0:7也可以工作)

要使用lavfi颜色源生成5秒纯红色视频:

ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv

-filter_complex_threads

-filter_complex_threads nb_threads

(global)

定义用于处理 filter_complex 图的线程数.

类似于 filter_threads, 但仅用于 -filter_complex 图.

默认值为可用CPU的数量.

-lavfi

-lavfi filtergraph

(global)

定义复杂的滤镜图, 即带有任意数量输入和/或输出的滤镜图. 等同于 -filter_complex.

-filter_complex_script

-filter_complex_script filename

(global)

此选项与 -filter_complex 相似, 唯一的区别是其参数是要从中读取复杂滤镜图描述的文件的名称.

-accurate_seek

(input)

此选项启用或禁用使用 -ss 选项在输入文件中进行准确的寻找.

默认情况下启用, 因此在转码时寻找是准确的.

使用 -noaccurate_seek 来禁用它, 这在复制某些流并转码其他流时可能很有用.

-seek_timestamp

(input)

此选项启用或禁用在输入文件中使用 -ss 选项时按时间戳寻找.

默认情况下禁用. 如果启用, -ss 选项的参数将被视为实际时间戳,

不会受文件的开始时间偏移影响.

这仅适用于不从时间戳0开始的文件, 例如传输流.

-thread_queue_size

-thread_queue_size size

(input/output)

对于输入, 此选项设置从文件或设备读取时的最大排队数据包数.

对于低延迟/高速率的实时流, 如果不及时读取数据包, 可能会丢弃数据包;

设置此值可以强制ffmpeg使用单独的输入线程并在数据包到达时立即读取.

默认情况下, 仅在指定多个输入时才执行此操作.

对于output, 此选项指定了每个复用线程可以排队的最大数据包数.

-sdp_file

-sdp_file file

(global)

将输出流的sdp信息打印到文件. 这允许在至少有一个输出不是rtp流时转储sdp信息. (至少需要一个输出格式为rtp).

-discard

-discard[:stream_specifier]

(input)

允许丢弃特定的流或流的帧.

可以完全丢弃任何输入流, 使用值all, 而从流中选择性地丢弃帧发生在解复用器中, 不受所有解复用器的支持.

参数 描述
none 不丢弃帧.
default 默认, 不丢弃帧.
noref 丢弃所有非参考帧.
bidir 丢弃所有双向帧.
nokey 丢弃除关键帧以外的所有帧.
all 丢弃所有帧.

-abort_on

-abort_on flags

(global)

在各种条件下停止和中止操作. 以下标志可用:

参数 描述
empty_output 没有数据包传递给复用器, 输出为空.
empty_output_stream 在某些输出流中没有数据包传递给复用器.

-max_error_rate

(global)

设置跨越所有输入的解码帧失败的分数, 当跨越此阈值时, ffmpeg将返回退出码69.

跨越此阈值不会终止处理. 范围是0到1之间的浮点数. 默认值为2/3.

-xerror

(global)

在错误时停止并退出.

-max_muxing_queue_size

-max_muxing_queue_size packets

(output,per-stream)

在转码音频和/或视频流时, ffmpeg在每个这样的流中有一个数据包之前不会开始写入输出.

在等待这种情况发生时, 将缓冲其他流的数据包. 此选项设置匹配输出流的此缓冲区的大小, 以数据包为单位.

此选项的默认值对于大多数用途来说应该足够高, 因此只有在确定需要时才触及此选项.

-muxing_queue_data_threshold

-muxing_queue_data_threshold bytes

(output,per-stream)

这是一个最小阈值, 低于该阈值时不考虑复用队列大小.

默认值为每个流50兆字节, 并基于传递给复用器的数据包的总大小.

-auto_conversion_filters

(global)

启用在所有滤镜图中(包括由 -vf, -af, -filter_complex 和 -lavfi 定义的滤镜图)自动插入格式转换滤镜.

如果滤镜格式协商需要转换, 滤镜的初始化将失败.

仍然可以通过在图中插入相关的转换滤镜(scale, aresample)来执行转换.

默认情况下启用, 要明确禁用它, 您需要指定 -noauto_conversion_filters

-bits_per_raw_sample

-bits_per_raw_sample[:stream_specifier] value

(output,per-stream)

声明给定输出流中每个原始样本的位数为 value.

请注意, 此选项设置提供给编码器/复用器的信息, 而不会更改流以符合此值. 设置不符合流属性的值可能会导致编码失败或无效的输出文件.


-stats_enc_pre | -stats_enc_post | -stats_mux_pre

-stats_enc_pre[:stream_specifier] path

-stats_enc_post[:stream_specifier] path

-stats_mux_pre[:stream_specifier] path

(output,per-stream)

将有关匹配流的每帧编码信息写入由路径指定的文件.

-stats_enc_pre 在送到编码之前写入有关原始视频或音频帧的信息

-stats_enc_post 在从编码器接收到编码数据包时写入有关编码数据包的信息

-stats_mux_pre 在数据包即将发送到复用器时写入有关数据包的信息.

每个帧或数据包在指定的文件中产生一行.

此行的格式由 -stats_enc_pre_fmt / -stats_enc_post_fmt / -stats_mux_pre_fmt 控制.

当将多个流的统计信息写入单个文件时, 对应于不同流的行将交错显示.

此交错的精确顺序未指定, 不保证在不同程序调用之间保持稳定, 即使使用相同的选项.


-stats_enc_pre_fmt | -stats_enc_post_fmt | -stats_mux_pre_fmt

-stats_enc_pre_fmt[:stream_specifier] format_spec

-stats_enc_post_fmt[:stream_specifier] format_spec

-stats_mux_pre_fmt[:stream_specifier] format_spec

(output,per-stream)

指定使用 -stats_enc_pre / -stats_enc_post / -stats_mux_pre 写入的行的格式.

format_spec 是一个字符串, 可以包含形式为 {fmt} 的指令.

format_spec 用反斜杠转义 — 用 {, }, 和 \ 来将文字的 {, }, 或 \ 分别写入输出.

使用 fmt 给出的指令可以是以下之一:

参数 描述
fidx 输出文件的索引.
sidx 文件中输出流的索引.
n 帧编号.
预编码: 到目前为止发送到编码器的帧数.
后编码: 从编码器接收到的数据包数.
复用: 到目前为止提交给此流的复用器的数据包数.
ni 输入帧编号.
与此输出帧或数据包对应的输入帧(即解码器输出的帧)的索引.
如果不可用, 则为 -1.
tb 此帧/数据包时间戳所表示的时间基, 作为一个有理数 num/den.
请注意, 编码器和复用器可能使用不同的时间基.
tbi ptsi 的时间基, 作为一个有理数 num/den.
当ptsi可用时, 为可用; 否则为0/1.
pts 帧或数据包的呈现时间戳, 作为整数. 应乘以时间基以计算呈现时间.
ptsi 输入帧(参见 ni)的呈现时间戳, 作为整数.
如果不可用, 则打印为(263 - 1 = 9223372036854775807)
t 帧或数据包的呈现时间, 作为小数. 等于 pts 乘以 tb.
ti 输入帧(参见 ni)的呈现时间, 作为小数.
等于 ptsi 乘以 tbi.
如果不可用, 则打印为inf.
dts (packet) 数据包的解码时间戳, 作为整数. 应乘以时间基以计算呈现时间.
dt (packet) 帧或数据包的解码时间, 作为小数. 等于 dts 乘以 tb.
sn (frame,audio) 到目前为止发送到编码器的音频样本数.
samp (frame,audio) 帧中的音频样本数.
size (packet) 数据包的编码大小(字节).
br (packet) 当前比特率, 以每秒位数为单位. 仅适用于后编码.
abr (packet) 到目前为止整个流的平均比特率, 以位每秒为单位
如果此时无法确定, 则为-1. 仅适用于后编码.

带有 packet 标签的指令只能与 -stats_enc_post_fmt 和 -stats_mux_pre_fmt 一起使用

带有 frame 标签的指令只能与 -stats_enc_pre_fmt 一起使用

带有 audio 标签的指令只能与音频流一起使用

默认的格式字符串为:

预编码
{fidx} {sidx} {n} {t}

后编码
{fidx} {sidx} {n} {t}

将来可能会向默认格式字符串的末尾添加新的项目. 依赖格式保持完全相同的用户应手动指定它.

请注意, 写入同一文件的不同流的统计信息可能具有不同的格式.

不常见

-async

-async parameter

用于控制音频和视频同步的方式。它允许您指定音频和视频之间的最大时间偏移(以毫秒为单位),以确保它们之间的同步。

这个选项通常用于处理那些由于录制或编码问题而导致音频和视频不同步的媒体文件。

建议首先尝试不使用它,因为正常情况下音频和视频应该是同步的。只有在确实存在同步问题时才使用 -async 进行调整。

-ab

-ab : Set audio bitrate in bit/s ( default = 64k ).

-b

-b : Set video bitrate in bit/s ( default = 200k ).

-bf

-bf : Set number of B-frames ( supported for MPEG-1, MPEG-2 and MPEG-4 ).

-b_strategy

-b_strategy : Strategy to choose between I/P/B-frames ( 0 = off / 1 = on ).

-bufsize

-bufsize : Set rate control buffer size ( in bits ).

-cmp

-cmp : Full pel motion estimation compare function.

参数 描述
sad ( 0 ) Sum of absolute differences, fast ( default ).
sse ( 1 ) Sum of squared errors.
satd ( 2 ) Sum of absolute Hadamard transformed differences.
dct ( 3 ) Sum of absolute DCT transformed differences.
psnr ( 4 ) Sum of squared quantization errors ( avoid, low quality ).
bit ( 5 ) Number of bits needed for the block.
rd ( 6 ) Rate distortion optimal, slow.
zero ( 7 ) 0.
vsad ( 8 ) Sum of absolute vertical differences.
vsse ( 9 ) Sum of squared vertical differences.
nsse ( 10 ) Noise preserving sum of squared differences.
w53 ( 11 ) 5/3 wavelet ( only used in Snow ).
w97 ( 12 ) 9/7 wavelet ( only used in Snow ).
dctmax ( 13 )
chroma ( 14 )

-coder

-coder :

参数 描述
vlc ( 0 ) Variable length coder / huffman coder.
ac ( 1 ) Arithmetic coder.
raw ( 2 ) Raw ( no encoding ).
rle ( 3 ) Run-length coder.
deflate ( 4 ) Deflate-based coder.

-cropbottom

-cropbottom : Set bottom crop band size ( in pixels ).

-cropleft

-cropleft : Set left crop band size ( in pixels ).

-cropright

-cropright : Set right crop band size ( in pixels ).

-croptop

-croptop : Set top crop band size ( in pixels ).

-deinterlace

-deinterlace : Deinterlace pictures.

-dc

-dc : Intra DC precision.

-flags

-flags :

参数 描述
aic H.263 advanced intra coding / MPEG-4 ac prediction.
aiv H.263 alternative inter VLC.
alt Enable alternate scantable ( MPEG-2/MPEG-4 ).
bitexact Use only bitexact stuff ( except (i)dct ).
cbp Use rate distortion optimization for cbp.
cgop Closed GOP.
gmc Use global motion compensation.
gray Only decode/encode grayscale.
ildct Use interlaced DCT.
ilme Interlaced motion estimation.
loop Use loop filter.
low_delay Force low delay.
mv0 Always try a mb with mv=<0,0>.
mv4 Use four motion vector by macroblock ( MPEG-4 ).
naq Normalize adaptive quantization.
obmc Use overlapped block motion compensation ( H.263+ ).
part Use data partitioning.
psnr Error variables will be set during encoding.
qpel Use 1/4 pel motion compensation.
qprd Use rate distortion optimization for qp selection.
scan_offset Will reserve space for svcd scan offset user data.
slice
trell Use trellis quantization.
umv Use unlimited motion vectors.

-flags2

-flags2 :

参数 描述
aud Access unit delimiters ( H.264 ).
bpyramid Allows B-frames to be used as references for predicting.
brdo B-frame rate-distortion optimization.
dct8x8 High profile 8x8 transform ( H.264 ).
drop_frame_timecode
fast Allow non spec compliant speedup tricks.
fastpskip Fast pskip ( H.264 ).
ivlc Intra VLC table.
local_header Place global headers at every keyframe instead of in extradata.
mixed_refs One reference per partition, as opposed to one reference per macroblock.
non_linear_q Use non linear quantizer.
noout Skip bitstream encoding.
sgop Strictly enforce GOP size.
skiprd RD optimal macroblock level residual skipping.
wpred Weighted biprediction for B-frames ( H.264 ).

-g

-g : Set the group of pictures ( GOP ) size.

-genpts

-genpts : Generate PTS ( 0 = off / 1 = on ).

-intra

-intra : Use only intra frames ( I-frames ).

-loop_input

-loop_input : Loop ( only works with still images ).

-maxrate

-maxrate : Set maximum video bitrate tolerance ( in bit/s ).

-me

-me : Set motion estimation method.

参数 描述
dia ( 1 ) Diamond search, radius 1 ( fast ).
hex ( 2 ) Hexagonal search, radius 2 ( default ).
umh ( 3 ) Uneven multi-hexagon search.
esa ( 4 ) Exhaustive search ( slow ).

-mbd

-mbd : Macroblock decision algorithm ( high quality mode ).

参数 描述
simple Use mbcmp ( default ).
bits Use fewest bits.
rd Use best rate distortion.

-minrate

-minrate : Set minimum video bitrate tolerance ( in bit/s ).

-padbottom

-padbottom : Set bottom pad band size (in pixels).

-padcolor

-padcolor : Set color of pad bands (Hex 000000 to FFFFFF).

-padleft

-padleft : Set left pad band size (in pixels).

-padright

-padright : Set right pad band size (in pixels).

-padtop

-padtop : Set top pad band size (in pixels).

-ps

-ps : Set packet size in bits.

-qmax

-qmax : Maximum video quantizer scale (VBR).

-qmin

-qmin : Minimum video quantizer scale (VBR).

-rc_init_occupancy

-rc_init_occupancy : Number of bits which should be loaded into the rate control buffer before decoding starts.

-subcmp

-subcmp : Sub-pel motion estimation compare function.

参数 描述
sad (0) Sum of absolute differences, fast (default).
sse (1) Sum of squared errors.
satd (2) Sum of absolute Hadamard transformed differences.
dct (3) Sum of absolute DCT transformed differences.
psnr (4) Sum of squared quantization errors (avoid, low quality).
bit (5) Number of bits needed for the block.
rd (6) Rate distortion optimal, slow.
zero (7) 0.
vsad (8) Sum of absolute vertical differences.
vsse (9) Sum of squared vertical differences.
nsse (10) Noise preserving sum of squared differences.
w53 (11) 5/3 wavelet (only used in Snow).
w97 (12) 9/7 wavelet (only used in Snow).
dctmax (13)
chroma (14)

-timecode_frame_start

-timecode_frame_start : Set GOP start timecode value in the number of frames (e.g., 1282748 for 14:15:09:23). Drop Frame mode is not supported.

-trellis

-trellis : Rate-distortion optimal quantization.

-vol

-vol : Modify audio volume (256=normal).

你可能感兴趣的:(ffmpeg)