【FFmpeg】命令参数

1,318 阅读11分钟
  • -f fmt (input/output)

输入或者输出文件格式,这个格式会根据输出文件来猜测,一般不需要指明什么这个参数

  • -i url (input) 输入文件url

  • -- y (global) 强制覆盖文件无须咨询

  • -n (global) 不会覆盖文件,如果已经指定文件已经存在则立马退出

  • -stream_loop number (input) 设置输入流应循环的次数。 循环0表示无循环,循环-1表示无限循环。

  • -c[:stream_specifier] codec (input/output,per-stream)

  • -codec[:stream_specifier] codec (input/output,per-stream)

为一个或多个流选择编码器(在输出文件之前使用)或解码器(在输入文件之前使用)。 编解码器是解码器/编码器的名称,或者是直接进行复制(仅输出),不对流进行重新编码。

比如

ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

对视频流用libx264进行编码和复制所有的音频流

For each stream, the last matching c option is applied, so

ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT

除了第2个用libx264进行编码之外复制所有的视频流,对第138个音频流进行libvorbis编码

  • -t duration (input/output)

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

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

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

-to和-t是互斥的,并且-t具有优先级。

  • -to position (input/output) 在该位置停止写入输出或读取输入。 position必须是持续时间规范,请参阅(ffmpeg-utils)ffmpeg-utils(1)手册中的“持续时间”部分

-to和-t是互斥的,并且-t具有优先级。

  • -fs limit_size (output)

设置文件大小限制,以字节为单位。 超出限制后,不再写入更多字节字节。 输出文件的大小略大于请求的文件大小。

  • -ss position (input/output)

当用作输入选项时(在-i之前),在此输入文件中查找位置。 请注意,在大多数格式中,无法精确搜索,因此ffmpeg将搜索到位置之前最接近的搜索点。 启用转码和-accurate_seek时(默认设置),在搜索点和位置之间的此额外片段将被解码并丢弃。 在执行流复制或使用-noaccurate_seek时,将保留它。

当用作输出选项时(在输出URL之前),解码但放弃输入,直到时间戳到达位置为止。

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

  • -sseof position (input) 类似于-ss选项,但相对于“文件结尾”。 这是负值在文件中较早的位置,0表示EOF。

  • -itsoffset offset (input) 设置输入时间偏移

offset必须是一个持续时间规范,请参阅(ffmpeg-utils)ffmpeg-utils(1)手册中的“持续时间”部分。

偏移量将添加到输入文件的时间戳中。 指定正偏移量意味着相应的流将延迟偏移量中指定的持续时间。在容器中设置记录时间戳。

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

  • -itsscale scale (input,per-stream) Rescale input timestamps. scale should be a floating point number.

  • -timestamp date (output) 在容器中设置记录时间戳。

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

  • -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[:stream_specifier] value (output,per-stream) 设置流的处置。

此选项将覆盖从输入流复制的处置。 通过将其设置为0,也可以删除该处置。

可以识别以下配置:

default dub original comment lyrics karaoke forced hearing_impaired visual_impaired clean_effects attached_pic captions descriptions dependent metadata 例如,将第二个音频流设置为默认流:

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

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

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 [title=title:][program_num=program_num:]st=stream[:st=stream...] (output) 创建具有指定标题program_num的程序,并将指定的流添加到其中。

  • -target type (output) 指定目标文件类型(vcd,svcd,dvd,dv,dv50)。 type可以使用pal-,ntsc-或film-作为前缀以使用相应的标准。 然后自动设置所有格式选项(比特率,编解码器,缓冲区大小)。 您可以输入:

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

Nevertheless you can specify additional options as long as you know they do not conflict with the standard, as in:

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

-dn (input/output) 作为输入选项,阻止文件的所有数据流被过滤或为任何输出自动选择或映射。 请参阅-discard选项以分别禁用流。

作为输出选项,禁用数据记录,即自动选择或映射任何数据流。 有关完整的手动控制,请参见-map选项。

  • -dframes number (output) 设置要输出的数据帧数。 这是-frames:d的过时别名,应改为使用。

  • -frames[:stream_specifier] framecount (output,per-stream) 在帧计数帧之后停止写入流。

  • -q[:stream_specifier] q (output,per-stream)

  • -qscale[:stream_specifier] q (output,per-stream) 使用固定质量量表(VBR)。 q / qscale的含义取决于编解码器。 如果在不使用stream_specifier的情况下使用qscale,则它仅适用于视频流,这是为了保持与以前的行为的兼容性,并且当没有stream_specifier时,为2个不同的音频和视频编解码器指定相同的编解码器特定值通常不是目的。 用来。

  • -filter[:stream_specifier] filtergraph (output,per-stream) 创建filtergraph指定的filtergraph并使用它过滤流。

filtergraph是要应用于流的filtergraph的描述,并且必须具有相同类型的流的单个输入和单个输出。 在过滤图中,输入与标签输入关联,输出与标签输出关联。 有关filtergraph语法的更多信息,请参见ffmpeg-filters手册。

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

  • -filter_script[:stream_specifier] filename (output,per-stream) 此选项类似于-filter,唯一的区别是其参数是要从中读取过滤器描述的文件名。

  • -filter_threads nb_threads (global) 定义用于处理过滤器管道的线程数。 每个管道将产生一个线程池,其中有许多线程可用于并行处理。 默认值为可用的CPU数量。

  • -pre[:stream_specifier] preset_name (output,per-stream) 指定匹配流的预设。

  • -stats (global) 打印编码进度/统计信息。 默认情况下它是打开的,要显式禁用它,您需要指定-nostats。

  • -progress url (global) 将程序友好的进度信息发送到url。

进度信息大约每秒钟写入一次,并在编码过程结束时写入。 它由“键=值”行组成。 键仅包含字母数字字符。 进度信息序列的最后一个关键字始终是“进度”。

  • -stdin 在标准输入上启用交互。 默认情况下为开,除非使用标准输入作为输入。 要显式禁用交互,您需要指定-nostdin。

例如,如果ffmpeg在后台进程组中,则禁用标准输入上的交互非常有用。 使用ffmpeg ... </ dev / null可以大致达到相同的结果,但是它需要一个shell。

  • -debug_ts (global) 打印时间戳信息。 默认情况下它是关闭的。 此选项对于测试和调试目的最有用,并且输出格式可能会从一个版本更改为另一个版本,因此可移植脚本不应使用此选项。

另请参阅选项-fdebug ts。

  • -attach filename (output)

将附件添加到输出文件。 某些格式(例如Matroska)对此提供了支持。 用于呈现字幕的字体。 附件被实现为特定类型的流,因此此选项会将新的流添加到文件中。 然后可以按通常方式在此流上使用每流选项。 使用此选项创建的附件流将在所有其他流(即使用-map或自动映射创建的附件流)之后创建。

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

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

(假设附件流在输出文件中排在第三位)。

  • -dump_attachment[:stream_specifier] filename (input,per-stream)

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

例如。 提取第一个附件到名为“ out.ttf”的文件中:

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

提取文件名标记确定的文件的所有附件:

ffmpeg -dump_attachment:t“” -i INPUT

技术说明–附件被实现为编解码器额外数据,因此此选项实际上可用于从任何流中提取额外数据,而不仅仅是附件。

  • -vframes number (output) 设置输出的视频帧数。 这是-frames:v的过时别名,应改为使用

  • -r[:stream_specifier] fps (input/output,per-stream) 设置帧频(Hz值,分数或缩写)。

作为输入选项,请忽略文件中存储的所有时间戳,而是假设帧速率fps恒定,则生成时间戳。 这与用于某些输入格式(如image2或v4l2)的-framerate选项不同(以前与FFmpeg的较早版本相同)。 如有疑问,请使用-framerate而不是输入选项-r。

作为输出选项,复制或删除输入帧以获得恒定的输出帧速率fps

  • -s[:stream_specifier] size (input/output,per-stream) 设置框架尺寸。

作为输入选项,这是video_size专用选项的快捷方式,已被某些多路分配器识别,其帧大小未存储在文件中或可配置,例如。 原始视频或视频采集卡。

作为输出选项,这会将比例视频滤镜插入到相应滤镜图的末尾。 请直接使用刻度过滤器将其插入开头或其他位置。

格式为“ wxh”(默认-与源相同)

  • -aspect[:stream_specifier] aspect (output,per-stream) 设置纵横比指定的视频显示纵横比。

Aspect可以是浮点数字符串,也可以是num:den形式的字符串,其中num和den是纵横比的分子和分母。 例如,“ 4:3”,“ 16:9”,“ 1.3333”和“ 1.7777”是有效的参数值。

如果与-vcodec复制一起使用,它将影响存储在容器级别的纵横比,但不会影响存储在编码帧中的纵横比(如果存在)。

  • -vn (input/output) 作为输入选项,阻止文件的所有视频流被过滤或为任何输出自动选择或映射。 请参阅-discard选项以分别禁用流。

作为输出选项,禁用视频录制,即自动设置

  • -vcodec codec (output) 设置视频编解码器。 这是-codec:v的别名。

  • -pass[:stream_specifier] n (output,per-stream) 选择密码(1或2)。 它用于进行两遍视频编码。 视频的统计信息在第一遍中记录到日志文件中(另请参见选项-passlogfile),在第二遍中,该日志文件用于以请求的确切比特率生成视频。 在第1遍中,您可以仅停用音频并将输出设置为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 [:stream_specifier]前缀(每个流输出) 将两次通过的日志文件名前缀设置为前缀,默认文件名前缀为“ ffmpeg2pass”。 完整的文件名将为PREFIX-N.log,其中N是特定于输出流的数字

  • -vf filtergraph (output) 创建filtergraph指定的filtergraph并使用它过滤流。

这是-filter:v的别名,请参见-filter选项。

  • -autorotate 根据文件元数据自动旋转视频。 默认情况下启用,请使用-noautorotate禁用它。

  • -autoscale 根据第一帧的分辨率自动缩放视频。 默认情况下启用,请使用-noautoscale禁用它。 禁用自动缩放后,过滤器图形的所有输出帧可能不会具有相同的分辨率,并且可能不足以支持某些编码器/复用器。 因此,除非您真的知道自己在做什么,否则不建议禁用它。 禁用自动缩放功能后果自负。

ffmpeg.org/ffmpeg.html 官方文档