资讯详情

ffmpeg中文文档

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

ffmpeg它是一个非常快速的视频和音频转换器,也可以从现场音频/视频源中获得。它还可以在任何采样率之间转换,并使用高质量的多相滤波器动态调整视频大小。

ffmpeg从-i输入文件(可以是常规文件、管道、网络流、抓取设备等)。)读取选项指定的任何数量,并写入任何数量的输出文件URL指定。任何不能解释为命令行中选项的内容都被视为输出URL。

原则上,每个输入或输出URL它可以包含任何不同类型的流量(视频/音频/字幕/附件/数据)。允许的流量和/或类型可以受容器格式的限制。选择哪些输入将自动完成或使用-map输出选项(请参阅流选章节)。

为了在选项中引用输入文件,必须使用它们的索引(从0开始)。例如。第一个输入文件是0,第二个是1,等等。类似地,文件中的流通被它们的索引引用。 2:3是指第三个输入文件中的第四个流。Stream说明符章。

作为一般规则,选项将应用于下一个指定的文件。因此,顺序非常重要,您可以在命令行上多次使用相同的选项。然后每次应用于下一个输入或输出文件。本规则的例外是全球选项(如详细级别),应首先指定。

不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有输出文件。不要混合不同文件的选项。所有选项仅适用于下一个输入或输出文件,并在文件之间重置。

将输出文件的视频比特率设置为64 kbit / s:

ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi

强制输出文件的帧速率为24 fps:

ffmpeg -i input.avi -r 24 output.avi

强制输入文件的帧速率(仅对原始格式有效)为1 fps,输出文件的帧速率为24 fps:

ffmpeg -r 1 -i input.m2v -r 24 output.avi

可能需要原始输入文件format选项。

ffmpeg下图可以描述每个输出的转码过程:

 _______              ______________ |       |            |              | | input |  demuxer   | encoded data |   decoder | file  | ---------> | packets      | -----  |_______|            |______________|      |                                            v                                        _________                                       |         |                                       | decoded |                                       | frames  |                                       |_________|  ________             ______________       | |        |           |              |      | | output | <-------- | encoded data | <----  | file   |   muxer   | packets      |   encoder |________|           |______________| 

ffmpeg调用libavformat图书馆(包括解复用器)读取输入文件并获取包含编码数据的数据包。 当有多个输入文件时,ffmpeg通过跟踪任何活动输入流上的最低时间戳来保持同步。

然后将编码的数据包传输给解码器(除非选择流复制进一步参考说明)。 解码器生成未压缩帧(原始视频/ PCM音频/ ...),可通过过滤进一步处理(见下一节)。 过滤后,帧传输到编码器编码器编码并输出编码分组。 最后,将这些传输给复用器,复用器将编码数据包写入输出文件。

编码前,ffmpeg可以使用libavfilter库中的过滤器处理原始音频和视频帧。 几个链式过滤器形成过滤图。 ffmpeg区分两种类型filtergraph:简单复杂。

简单的过滤图是那些只有一个输入和输出的过滤图,它们是相同的类型。 在上图中,只需在解码和编码之间插入一个额外的步骤:

 _________                        ______________ |         |                      |              | | decoded |                      | encoded data | | frames  |\                   _ | packets      | |_________| \                  /||______________|              \   __________   /   simple     _\||          | /  encoder   filtergraph   | filtered |/                 | frames   |                 |__________|

简单的过滤器图使用per-stream -filter选项配置(分别使用)-vf和-af视频和音频的别名)。 一个简单的视频过滤器图可以看起来像这样:

 _______        _____________        _______        ________ |       |      |             |      |       |      |        | | input | ---> | deinterlace | ---> | scale | ---> | output | |_______|      |_____________|      |_______|      |________|

请注意,有些过滤器会更改帧属性,但不会更改帧内容。 例如。 上例中的fps过滤器会改变帧数,但不会触及帧内容。 另一个例子是setpts过滤器只设置时间戳,否则帧不会改变。

复杂滤波器图是那些不能简单地描述为应用于一个流的线性处理链的图。 例如,当图形有多个输入和/或输出时,或者输出流类型与输入不同。 它们可以用下图表示:

 _________ |         | | input 0 |\                    __________ |_________| \                  |          |              \   _________    /| output 0 |               \ |         |  / |__________|  _________     \| complex | / |         |     |         |/ | input 1 |---->| filter  |\ |_________|     |         | \   __________                /| graph   |  \ |          |               / |         |   \| output 1 |  _________   /  |_________|    |__________| |         | / | input 2 |/ |_________|

使用复杂滤波器图-filter_complex选项配置。 请注意,这个选项是全局的,因为复杂的过滤器图本质上不能与单流或文件清晰相关。

-lavfi选项相当于-filter_complex。

复杂滤波器图的一个简单例子是覆盖滤波器,它有两个视频输入和一个视频输出,一个视频覆盖另一个。 它的音频对应物是amix过滤器。

流复制通过提供复制参数-codec选选模式。 它使ffmpeg省略了指定流的解码和编码步骤,因此只进行解复用和多路复用。 它对改变容器格式或修改容器级元数据非常有用。 在这种情况下,上图将简化为:

 _______              ______________            ________ |       |            |              |          |        | | input |  demuxer   | encoded data |  muxer   | output | | file  | ---------> | packets      | -------> | file   | |_______|            |______________|          |________| 

由于没有解码或编码,速度非常快,没有质量损失。然而,由于许多因素,它可以在某些情况下不起作用。应用过滤器显然也是不可能的,因为过滤器可以处理未压缩的数据。

ffmpeg提供-map选项,用于手动控制每个输出文件中的流选择。用户可以跳过-map并让ffmpeg执行自动流选择,如下所述。 -vn / -an / -sn / -dn选项可用于分别跳过包含视频,音频,字幕和数据流,无论是手动映射还是自动选择,除了作为复杂滤波器图形输出的那些流。

以下子部分描述了流选择中涉及的各种规则。接下来的示例显示了这些规则在实践中的应用方式。

虽然我们尽一切努力准确地反映程序的行为,但FFmpeg正在不断发展,自撰写本文之后,代码可能已经发生了变化。

在没有特定输出文件的任何映射选项的情况下,ffmpeg检查输出格式以检查可以包含哪种类型的流,即。视频,音频和/或字幕。对于每个可接受的流类型,ffmpeg将从所有输入中选择一个流(如果可用)。

它将根据以下标准选择该流:

对于视频,它是具有最高分辨率的流, 对于音频,它是具有最多频道的流, 对于字幕,它是第一个找到的字幕流,但有一个警告。输出格式的默认字幕编码器可以是基于文本的,也可以是基于图像的,并且仅选择相同类型的字幕流。 在几个相同类型的流速率相等的情况下,选择具有最低索引的流。

数据或附件流不会自动选择,只能使用-map包含在内。

使用-map时,只有用户映射的流包含在该输出文件中,下面描述了filtergraph输出的一个可能的例外。

如果有任何带有未标记焊盘的复杂滤波器输出流,它们将被添加到第一个输出文件中。如果输出格式不支持流类型,则会导致致命错误。如果没有map选项,则包含这些流会导致跳过其类型的自动流选择。如果存在地图选项,则除了映射的流之外还包括这些滤波器流。

带有标记焊盘的复杂滤波器输出流必须一次映射一次。

流处理与流选择无关,下面描述的字幕除外。流处理通过-codec选项设置,该选项针对特定输出文件中的流。特别是,在流选择过程之后,ffmpeg应用编解码器选项,因此不影响后者。如果没有为流类型指定-codec选项,ffmpeg将选择输出文件muxer注册的默认编码器。

字幕存在例外。如果为输出文件指定了字幕编码器,则将包括找到任何类型,文本或图像的第一个字幕流。 ffmpeg不验证指定的编码器是否可以转换所选的流,或者转换的流是否在输出格式中是可接受的。这通常也适用:当用户手动设置编码器时,流选择过程不能检查编码流是否可以复用到输出文件中。如果不能,则ffmpeg将中止,并且所有输出文件都将无法处理。

以下示例说明了ffmpeg的流选择方法的行为,怪癖和限制。

他们假设以下三个输入文件。

input file 'A.avi'
      stream 0: video 640x360
      stream 1: audio 2 channels

input file 'B.mp4'
      stream 0: video 1920x1080
      stream 1: audio 2 channels
      stream 2: subtitles (text)
      stream 3: audio 5.1 channels
      stream 4: subtitles (text)

input file 'C.mkv'
      stream 0: video 1280x720
      stream 1: audio 2 channels
      stream 2: subtitles (image)

示例:自动流选择

ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov

指定了三个输出文件,对于前两个,未设置-map选项,因此ffm​​peg将自动为这两个文件选择流。

out1.mkv是一个Matroska容器文件,接受视频,音频和字幕流,因此ffm​​peg将尝试选择每种类型中的一种。 对于视频,它将从B.mp4中选择stream 0,其在所有输入视频流中具有最高分辨率。 对于音频,它将从B.mp4中选择流stream 3,因为它具有最多的通道。 对于字幕,它将从B.mp4中选择流stream 2,这是A.avi和B.mp4中的第一个字幕流。

out2.wav只接受音频流,因此只选择来自B.mp4的stream 3。

对于out3.mov,由于设置了-map选项,因此不会进行自动流选择。 -map 1:一个选项将从第二个输入B.mp4中选择所有音频流。此输出文件中不包含其他流。

对于前两个输出,将对所有包含的流进行转码。选择的编码器将是每种输出格式注册的默认编码器,可能与所选输入流的编解码器不匹配。

对于第三个输出,音频流的编解码器选项已设置为复制,因此不会发生或可能发生解码 - 过滤 - 编码操作。所选流的数据包应从输入文件传送,并在输出文件中复用。

示例:自动字幕选择

ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv

尽管out1.mkv是Matroska容器文件,它接受字幕流,但只能选择视频和音频流。 C.mkv的字幕流是基于图像的,并且Matroska复用器的默认字幕编码器是基于文本的,因此字幕的转码操作预计会失败,因此不选择该流。 然而,在out2.mkv中,在命令中指定字幕编码器,因此,除了视频流之外,还选择字幕流。 -an的存在禁用out2.mkv的音频流选择。

示例:未标记的滤波器图输出

ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt

此处使用-filter_complex选项设置过滤器图,该过滤器图由单个视频过滤器组成。 叠加滤波器只需要两个视频输入,但没有指定,因此使用前两个可用视频流,即A.avi和C.mkv。 过滤器的输出板没有标签,因此被发送到第一个输出文件out1.mp4。 因此,跳过自动选择视频流,这将选择B.mp4中的流。 大多数频道的音频流即。 自动选择B.mp4中的流3。 然而,没有选择字幕流,因为MP4格式没有注册默认字幕编码器,并且用户没有指定字幕编码器。

第二个输出文件out2.srt仅接受基于文本的字幕流。 因此,即使可用的第一个字幕流属于C.mkv,它也是基于图像的,因此被跳过。 所选择的流,B.mp4中的流2,是第一个基于文本的字幕流。

示例:标记的filtergraph输出

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
       -map '[outv]' -an        out1.mp4 \
                                out2.mkv \
       -map '[outv]' -map 1:a:0 out3.mkv

上面的命令将失败,因为标记为[outv]的输出焊盘已被映射两次。 不应处理任何输出文件。

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
       -an        out1.mp4 \
                  out2.mkv \
       -map 1:a:0 out3.mkv

上面的命令也会失败,因为色调过滤器输出有一个标签[out],并且没有被映射到任何地方。 该命令应修改如下,

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \
        -map '[outv1]' -an        out1.mp4 \
                                  out2.mkv \
        -map '[outv2]' -map 1:a:0 out3.mkv

来自B.mp4的视频流被发送到色调过滤器,其输出使用分割滤波器克隆一次,并且两个输出都标记为。然后将每个副本映射到第一个和第三个输出文件。

需要两个视频输入的覆盖滤波器使用前两个未使用的视频流。这些是来自A.avi和C.mkv的流。叠加输出未标记,因此无论是否存在-map选项,它都会被发送到第一个输出文件out1.mp4。

aresample过滤器发送第一个未使用的音频流,即A.avi的音频流。由于此过滤器输出也未标记,因此它也映射到第一个输出文件。 -an的存在仅抑制音频流的自动或手动流选择,而不抑制从滤波器图发送的输出。这两个映射流都应在out1.mp4中的映射流之前进行排序。

映射到out2.mkv的视频,音频和字幕流完全由自动流选择确定。

out3.mkv包含来自色调过滤器的克隆视频输出和来自B.mp4的第一个音频流。

如果没有另外指定,所有数字选项接受表示数字作为输入的字符串,其后可以跟随SI单位前缀之一,例如:'K','M'或'G'。

如果将“i”附加到SI单位前缀,则完整前缀将被解释为二进制倍数的单位前缀,其基于1024的幂而不是1000的幂。将“B”附加到SI单位前缀乘以这允许使用例如:'KB','MiB','G'和'B'作为数字后缀。

不带参数的选项是布尔选项,并将相应的值设置为true。可以通过在选项名称前加上“no”来将它们设置为false。例如,使用“-nofoo”将名称为“foo”的布尔选项设置为false。

每个流应用一些选项,例如比特率或编解码器。流指定符用于精确指定给定选项所属的流。

流说明符是通常附加到选项名称并通过冒号与其分隔的字符串。例如。 -codec:a:1 ac3包含a:1流说明符,匹配第二个音频流。因此,它将为第二音频流选择ac3编解码器。

流说明符可以匹配多个流,以便将选项应用于所有流。例如。 -b:a 128k匹配所有音频流。

空流说明符匹配所有流。例如,-codec copy或-codec: copy将复制所有流而无需重新编码。

流说明符的可能形式是:

stream_index 使用此索引匹配流。例如。 -threads:1 4将第二个流的线程数设置为4.如果stream_index用作附加流说明符(见下文),则它从匹配流中选择流编号stream_index。流编号基于libavformat检测到的流的顺序,除非还指定了程序ID。在这种情况下,它基于程序中流的排序。

stream_type[:additional_stream_specifier] stream_type是以下之一:视频为“v”或“V”,音频为“a”,副标题为“s”,数据为“d”,附件为“t”。 'v'匹配所有视频流,'V'仅匹配未附加图片,视频缩略图或封面艺术的视频流。如果使用additional_stream_specifier,则它匹配具有此类型并与additional_stream_specifier匹配的流。否则,它匹配指定类型的所有流。

p:program_id[:additional_stream_specifier] 使用id program_id匹配程序中的流。如果使用additional_stream_specifier,则它匹配两个都是程序一部分并与additional_stream_specifier匹配的流。

#stream_id or i:stream_id 通过流id匹配流(例如,MPEG-TS容器中的PID)。

m:key[:value] 使用具有指定值的元数据标记键匹配流。如果未给出value,则将包含给定标记的流与任何值匹配。

u 匹配具有可用配置的流,必须定义编解码器并且必须存在诸如视频维度或音频采样率之类的基本信息。

请注意,在ffmpeg中,按元数据匹配仅适用于输入文件。

这些选项在ff *工具中共享。

-L 显示许可证。

-h, - ?, -  help, -  help [arg] 显示帮助。可以指定可选参数以打印关于特定项目的帮助。如果未指定参数,则仅显示基本(非高级)工具选项。

arg的可能值是:

长 除基本工具选项外,还可以打印高级工具选项。

充分 打印完整的选项列表,包括编码器,解码器,分路器,复用器,滤波器等的共享和专用选项。

解码器= decoder_name 打印有关名为decoder_name的解码器的详细信息。使用-decoders选项获取所有解码器的列表。

编码器= encoder_name 打印有关名为encoder_name的编码器的详细信息。使用-encoders选项获取所有编码器的列表。

分路= demuxer_name 打印有关名为demuxer_name的分路器的详细信息。使用-formats选项获取所有解复用器和复用器的列表。

复用器= muxer_name 打印有关名为muxer_name的muxer的详细信息。使用-formats选项获取所有复用器和分路器的列表。

滤波器= FILTER_NAME 打印有关过滤器名称filter_name的详细信息。使用-filters选项获取所有过滤器的列表。

-版 显示版本。

 - 格式 显示可用格式(包括设备)。

-demuxers 显示可用的解复用器。

-muxers 显示可用的复用器。

-设备 显示可用设备。

-codecs 显示libavcodec已知的所有编解码器。

请注意,本文档中使用术语“编解码器”作为更正确称为媒体比特流格式的快捷方式。

-decoders 显示可用的解码器。

-encoders 显示所有可用的编码器。

-bsfs 显示可用的比特流过滤器。

-protocols 显示可用协议。

-filters 显示可用的libavfilter过滤器。

-pix_fmts 显示可用的像素格式。

-sample_fmts 显示可用的样本格式。

-layouts 显示频道名称和标准频道布局。

-colors 显示已识别的颜色名称

-sources device [,opt1 = val1 [,opt2 = val2] ...] 显示输入设备的自动检测源。某些设备可能提供无法自动检测的系统相关源名称。不能假定返回的列表总是完整的。

ffmpeg -sources pulse,server=192.168.0.4

-sinks device [,opt1 = val1 [,opt2 = val2] ...] 显示输出设备的自动检测接收器。 某些设备可能提供无法自动检测的与系统相关的接收器名称。 不能假定返回的列表总是完整的。

ffmpeg -sinks pulse,server=192.168.0.4

-loglevel [flags +] loglevel | -v [flags +] loglevel 设置库使用的日志记录级别和标志。

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

'repeat' 表示重复的日志输出不应压缩到第一行,并且将省略“最后重复消息n次”行。

'level' 表示日志输出应为每个消息行添加[level]前缀。这可以用作对数着色的替代方案,例如,将日志转储到文件时。

标志也可以单独使用,添加'+'/' - '前缀来设置/重置单个标志,而不会影响其他标志或更改日志级别。设置flags和loglevel时,最后一个标志值和loglevel之间需要一个'+'分隔符。

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

'quiet, -8' 什么都不显示;安静。

'panic, 0' 仅显示可能导致进程崩溃的致命错误,例如断言失败。目前还没有用于任何目的。

'fatal, 8' 只显示致命错误。这些是错误,在此之后该过程绝对无法继续。

'error, 16' 显示所有错误,包括可以从中恢复的错误。

'warning, 24' 显示所有警告和错误。将显示与可能不正确或意外事件相关的任何消息。

'info, 32' 在处理过程中显示信息性消息。这是警告和错误的补充。这是默认值。

'verbose, 40' 与信息相同,除了更详细。

'debug, 48' 显示所有内容,包括调试信息。

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

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

另一个允许重复日志输出而不影响级别前缀标志或loglevel的当前状态的示例:

ffmpeg [...] -loglevel +repeat

默认情况下,程序会记录到stderr。 如果终端支持着色,则使用颜色标记错误和警告。 可以禁用日志着色设置环境变量AV_LOG_FORCE_NOCOLOR或NO_COLOR,也可以强制设置环境变量AV_LOG_FORCE_COLOR。 不推荐使用环境变量NO_COLOR,将在以后的FFmpeg版本中删除。

-report 将完整命令行和控制台输出转储到当前目录中名为program-YYYYMMDD-HHMMSS.log的文件。 此文件可用于错误报告。 它还意味着-loglevel调试。

将环境变量FFREPORT设置为任何值具有相同的效果。 如果值为':' - 分隔键=值序列,则这些选项将影响报告; 如果选项值包含特殊字符或选项分隔符':',则必须对其进行转义(请参阅ffmpeg-utils手册中的“引用和转义”部分)。

可识别以下选项:

file 设置用于报告的文件名; %p扩展为程序名称,%t扩展为时间戳,%%扩展为普通%

level 使用数值设置日志详细级别(请参阅-loglevel)。

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

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 ...

此选项的可能的flag是:

'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'
'Specific Processors'
  'pentium2'
  'pentium3'
  'pentium4'
  'k6'
  'k62'
  'athlon'
  'athlonxp'
  'k8'

这些选项由libavformat,libavdevice和libavcodec库直接提供。 要查看可用AVOptions列表,请使用-help选项。 它们分为两类:

generic 可以为任何容器,编解码器或设备设置这些选项。 容器/设备的AVFormatContext选项和编解码器的AVCodecContext选项下列出了通用选项。

private 这些选项特定于给定的容器,设备或编解码器。 私有选项列在其相应的容器/设备/编解码器下。

例如,要将ID3v2.3标头而不是默认ID3v2.4写入MP3文件,请使用MP3 muxer的id3v2_version私有选项:

ffmpeg -i input.flac -id3v2_version 3 out.mp3

所有编解码器AVOptions都是每个流,因此应该附加一个流说明符:

ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4

在上面的示例中,多声道音频流被映射两次以进行输出。 第一个实例用编解码器ac3和比特率640k编码。 将第二个实例缩混为2个通道,并使用编解码器aac进行编码。 使用输出流的绝对索引为其指定128k的比特率。

注意:-nooption语法不能用于布尔AVOptions,请使用-option 0 / -option 1。

注意:通过将v / a / s添加到选项名称之前指定每个流AVOptions的旧的未记录方式现在已过时,将很快删除。

-f fmt(输入/输出) 强制输入或输出文件格式。 通常会自动检测输入文件的格式,并从输出文件的文件扩展名中猜测,因此在大多数情况下不需要此选项。

-i url(输入) 输入文件网址

-y(glodal) 无需询问即可覆盖输出文件。

-n(glodal) 不要覆盖输出文件,如果已存在指定的输出文件,请立即退出。

-stream_loop号码(输入) 设置输入流的循环次数。 循环0表示无循环,循环-1表示无限循环。

-c [:stream_specifier]编解码器(输入/输出,每个流) -codec [:stream_specifier]编解码器(输入/输出,每个流) 为一个或多个流选择编码器(在输出文件之前使用时)或解码器(在输入文件之前使用时)。 codec是解码器/编码器的名称或特殊值副本(仅输出),表示不重新编码流。

例如

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

使用libx264对所有视频流进行编码并复制所有音频流。

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

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

将复制除第二个视频(将使用libx264编码)和第138个音频(将使用libvorbis编码)之外的所有流。

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

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

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

-to和-t是互斥的,-t具有优先权。

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

-to和-t是互斥的,-t具有优先权。

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

-ss position (输入/输出)

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

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

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

-sseof position (输入)

与-ss选项类似,但相对于“文件结束”。 这是负值在文件中较早,0表示在EOF。

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

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

偏移量将添加到输入文件的时间戳中。指定正偏移意味着相应的流延迟了offset中指定的持续时间。

-itsscale scale(输入,每个流) 重新调整输入时间戳。 scale应该是一个浮点数。

-timestamp date(输出) 在容器中设置录制时间戳。

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

-metadata [:metadata_specifier] key = value(输出,每元数据) 设置元数据键/值对。

可以给出可选的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(输出,每个流)

设置流的处置。

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

以下dispositions被认可:

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...] (输出)

创建具有指定标题program_num的程序,并将指定的流添加到该程序。

-target type (输出)

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

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

但是,只要您知道它们与标准不冲突,您就可以指定其他选项,如:

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

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

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

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

-frames [:stream_specifier] framecount(输出,每个流) 在framecount帧之后停止写入流。

-q [:stream_specifier] q(输出,每个流) -qscale [:stream_specifier] q(输出,每个流) 使用固定质量标度(VBR)。 q / qscale的含义取决于编解码器。如果在没有stream_specifier的情况下使用qscale,那么它仅适用于视频流,这是为了保持与先前行为的兼容性,并且为2个不同的编解码器指定相同的编解码器特定值,音频和视频通常不是没有stream_specifier时的意图用来。

-filter [:stream_specifier] filtergraph(输出,每个流) 创建filtergraph指定的filtergraph并使用它来过滤流。

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

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

-filter_script [:stream_specifier] filename(输出,每个流) 此选项类似于-filter,唯一的区别是它的参数是要从中读取过滤器图形描述的文件的名称。

-filter_threads nb_threads(全局) 定义用于处理过滤器管道的线程数。每个管道都会产生一个线程池,这个线程可用于并行处理。默认值是可用CPU的数量。

-pre [:stream_specifier] preset_name(输出,每个流) 指定匹配流的预设。

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

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

大约每秒和编码过程结束时写入进度信息。它由“key = value”行组成。 key仅包含字母数字字符。一系列进度信息的最后一个键始终是“进度”。

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

禁用标准输入上的交互很有用,例如,如果ffmpeg位于后台进程组中。使用ffmpeg ... </ dev / null可以获得大致相同的结果,但它需要一个shell。

-debug_ts(全球) 打印时间戳信息。它默认是关闭的。此选项主要用于测试和调试,输出格式可能会从一个版本更改为另一个版本,因此便携式脚本不应使用它。

另请参阅选项-fdebug ts。

-attach filename(输出) 将附件添加到输出文件。这有一些格式支持,如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(输入,每个流) 将匹配的附件流提取到名为filename的文件中。 如果filename为空,则将使用文件名元数据标记的值。

例如。 提取名为'out.ttf'的文件的第一个附件:

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

要提取由filename标记确定的文件的所有附件:

ffmpeg -dump_attachment:t "" -i INPUT

技术说明 - 附件是作为编解码器extradata实现的,因此该选项实际上可用于从任何流中提取extradata,而不仅仅是附件。

-noautorotate 禁用基于文件元数据自动旋转视频。

-vframes number(输出) 设置要输出的视频帧数。这是-frames:v的过时别名,您应该使用它。

-r [:stream_specifier] fps(输入/输出,每个流) 设置帧速率(Hz值,分数或缩写)。

作为输入选项,忽略存储在文件中的任何时间戳,而是假设帧速率fps保持不变,生成时间戳。这与某些输入格式(如image2或v4l2)使用的-framerate选项不同(在旧版FFmpeg中它曾经是相同的)。如果有疑问,请使用-framerate而不是输入选项-r。

作为输出选项,复制或丢弃输入帧以实现恒定的输出帧速率fps。

-s [:stream_specifier] size(输入/输出,每个流) 设置框架大小。

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

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

格式为'wxh'(默认 - 与源相同)。

-aspect [:stream_specifier] aspect(输出,每个流) 设置由aspect指定的视频显示宽高比。

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

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

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

作为输出选项,禁用视频记录,即自动选择或映射任何视频流。有关完全手动控制的信息,请参阅-map选项。

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

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

-vf filtergraph(输出) 创建filtergraph指定的filtergraph并使用它来过滤流。

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

-pix_fmt [:stream_specifier] format(输入/输出,每个流) 设置像素格式。使用-pix_fmts显示所有支持的像素格式。如果无法选择所选的像素格式,ffmpeg将打印警告并选择编码器支持的最佳像素格式。如果pix_fmt以+为前缀,则如果无法选择所请求的像素格式,ffmpeg将退出并显示错误,并且禁用过滤器图形内的自动转换。如果pix_fmt是单个+,则ffmpeg选择与输入(或图形输出)相同的像素格式,并禁用自动转换。

-sws_flags flags(输入/输出) 设置SwScaler标志。

-rc_override [:stream_specifier] override(输出,每个流) 特定间隔的速率控制覆盖,格式为“int,int,int”列表,用斜杠分隔。两个第一个值是开始和结束帧数,最后一个是量化器,如果是正值则使用,或者质量因子,如果是负数。

-ilme 强制编码器中的隔行扫描支持(仅限MPEG-2和MPEG-4)。如果您的输入文件是隔行扫描并且您希望保持隔行扫描格式以获得最小损失,请使用此选项。另一种方法是使用-deinterlace对输入流进行去隔行,但是去隔行会引入损失。

-psnr 计算压缩帧的PSNR。

-vstats 将视频编码统计信息转储到vstats_HHMMSS.log。

-vstats_file文件 将视频编码统计转储到文件。

-vstats_version文件 指定要使用的vstats格式的版本。默认值为2。

version = 1:

frame =%5d q =%2.1f PSNR =%6.2f f_size =%6d s_size =%8.0fkB time =%0.3f br =%7.1fkbits / s avg_br =%7.1fkbits / s

版本> 1:

out =%2d st =%2d frame =%5d q =%2.1f PSNR =%6.2f f_size =%6d s_size =%8.0fkB time =%0.3f br =%7.1fkbits / s avg_br =%7.1fkbits / s

-top [:stream_specifier] n(输出,每个流) top = 1 / bottom = 0 / auto = -1 field first

-dc precision Intra_dc_precision。

-vtag fourcc / tag(输出) 强制视频标签/ fourcc。这是-tag:v的别名。

-qphist(global) 显示QP直方图

-vbsf bitstream_filter 不推荐见-bsf

-force_key_frames [:stream_specifier] time [,time ...](输出,每个流) -force_key_frames [:stream_specifier] expr:expr(输出,每个流) 在指定的时间戳强制关键帧,更准确地说是在每个指定时间后的第一帧。

如果参数以expr:为前缀,则字符串expr将被解释为表达式,并针对每个帧进行求值。在评估为非零的情况下强制关键帧。

如果其中一个时间是“chapters[delta]”,则将其扩展到文件中所有章节开始的时间,移动增量,表示为以秒为单位的时间。此选项可用于确保在章节标记或输出文件中的任何其他指定位置存在搜索点。

例如,要在每个章节开始前的5分钟插入关键帧,加上关键帧0.1秒:

-force_key_frames 0:05:00,chapters-0.1

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))

请注意,强制使用太多关键帧对某些编码器的先行算法非常有害:使用固定GOP选项或类似选项会更有效。

-copyinkf [:stream_specifier](输出,每个流) 进行流复制时,还要复制开头找到的非关键帧。

-init_hw_device type [= name] [:device [,key = value ...]] 使用给定的设备参数初始化名为name的类型类型的新硬件设备。如果未指定名称,则将收到“type%d”形式的默认名称。

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

cuda device是CUDA设备的编号。

dxva2 device是Direct3D 9显示适配器的编号。

vaapi device是X11显示名称或DRM渲染节点。如果未指定,它将尝试打开默认的X11显示($ DISPLAY),然后打开第一个DRM渲染节点(/ dev / dri / renderD128)。

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

qsv 设备选择'MFX_IMPL_ *'中的值。允许的值是:

auto sw hw auto_any hw_any wh2 hw3 hw4 如果未指定,则使用“auto_any”。 (注意,通过创建适合平台的子设备('dxva2'或'vaapi')然后从中导出QSV设备,可能更容易实现QSV的预期结果。)

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 在第一个平台上选择第二个设备。

-init_hw_device opencl:,device_name = Foo9000 选择名称中包含字符串Foo9000的设备。

-init_hw_device opencl:1,device_type = gpu,device_extensions = cl_khr_fp16 在支持cl_khr_fp16扩展的第二个平台上选择GPU设备。

-init_hw_device type [= name] @source 初始化名为name的类型类型的新硬件设备,从名为source的现有设备派生它。

-init_hw_device list 列出此ffmpeg版本中支持的所有硬件设备类型。

-filter_hw_device name 将名为name的硬件设备传递给任何过滤器图形中的所有过滤器。这可用于设置要使用hwupload过滤器上传到的设备,或使用hwmap过滤器映射到的设备。其他过滤器在需要硬件设备时也可以使用此参数。请注意,这通常仅在输入尚未存在于硬件帧中时才需要 - 如果是,则过滤器将从它们作为输入接收的帧的上下文中获取它们所需的设备。

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

-hwaccel [:stream_specifier] hwaccel(输入,每个流) 使用硬件加速来解码匹配的流。 hwaccel的允许值为:

none 不要使用任何硬件加速(默认)。

auto 自动选择硬件加速方法。

vdpau 使用VDPAU(用于Unix的视频解码和Presentation API)硬件加速。

dxva2 使用DXVA2(DirectX视频加速)硬件加速。

vaapi 使用VAAPI(视频加速API)硬件加速。

qsv 使用英特尔QuickSync视频加速进行视频转码。

与大多数其他值不同,此选项不启用加速解码(仅在选择qsv解码器时自动使用),而是加速转码,而不将帧复制到系统内存中。

为使其工作,解码器和编码器都必须支持QSV加速,并且不得使用任何滤波器。

如果所选的hwaccel不可用或所选解码器不支持,则此选项无效。

请注意,大多数加速方法都是用于回放,并且不会比现代CPU上的软件解码更快。此外,ffmpeg通常需要将解码后的帧从GPU内存复制到系统内存中,从而导致性能进一步下降。因此,该选项主要用于测试。

-hwaccel_device [:stream_specifier] hwaccel_device(输入,每个流) 选择要用于硬件加速的设备。

仅当指定了-hwaccel选项时,此选项才有意义。它可以引用通过名称使用-init_hw_device创建的现有设备,也可以创建新设备,就像'-init_hw_device'类型:hwaccel_device之前被调用一样。

-hwaccels 列出此ffmpeg构建中支持的所有硬件加速方法。

-frames number(输出) 设置要输出的音频帧数。这是-frames:a的过时别名,您应该使用它。

-ar [:stream_specifier] freq(输入/输出,每个流) 设置音频采样频率。对于输出流,默认情况下将其设置为相应输入流的频率。对于输入流,此选项仅对音频抓取设备和原始分路器有意义,并映射到相应的分路器选项。

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

-ac [:stream_specifier]通道(输入/输出,每个流) 设置音频通道的数量。对于输出流,默认设置为输入音频通道的数量。对于输入流,此选项仅对音频抓取设备和原始分路器有意义,并映射到相应的分路器选项。

-an(输入/输出) 作为输入选项,阻止文件的所有音频流被过滤或自动选择或映射以用于任何输出。请参阅-discard选项以单独禁用流。

作为输出选项,禁用音频记录,即自动选择或映射任何音频流。有关完全手动控制的信息,请参阅-map选项。

-acodec编解码器(输入/输出) 设置音频编解码器。这是-codec的别名:a。

-sample_fmt [:stream_specifier] sample_fmt(输出,每个流) 设置音频样本格式。使用-sample_fmts获取支持的样本格式列表。

-af filtergraph(输出) 创建filtergraph指定的filtergraph并使用它来过滤流。

这是-filter:a的别名,请参阅-filter选项。

-atag fourcc / tag(输出) 强制音频标签/ fourcc。 这是-tag:a的别名。

-absf bitstream_filter 不推荐使用,请参阅-bsf

-guess_layout_max channels(输入,每个流) 如果某些输入通道布局未知,请尝试仅猜测它是否对应于最多指定数量的通道。 例如,2告诉ffmpeg将1声道识别为单声道,将2声道识别为立体声而不是6声道识别为5.1。 默认是总是试图猜测。 使用0禁用所有猜测。

-scodec编解码器(输入/输出) 设置字幕编解码器。 这是-codec:s的别名。

-sn(输入/输出) 作为输入选项,阻止文件的所有字幕流被过滤或自动选择或映射以用于任何输出。 请参阅-discard选项以单独禁用流。

作为输出选项,禁用字幕记录,即自动选择或映射任何字幕流。 有关完全手动控制的信息,请参阅-map选项。

-sbsf bitstream_filter 不推荐使用,请参阅-bsf

-fix_sub_duration 修复字幕持续时间。 对于每个字幕,等待同一流中的下一个数据包并调整第一个数据包的持续时间以避免重叠。 对于一些字幕编解码器,尤其是DVB字幕,这是必要的,因为原始分组中的持续时间仅是粗略估计,并且结尾实际上由空字幕帧标记。 必要时未能使用此选项会导致由于非单调时间戳而导致的夸大持续时间或多路复用失败。

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

-canvas_size大小 设置用于渲染字幕的画布大小。

-map [ - ] input_file_id [:stream_specifier] [?] [,sync_file_id [:stream_specifier]] | [linklabel](输出) 将一个或多个输入流指定为输出文件的源。每个输入流由输入文件索引input_file_id和输入文件中的输入流索引input_stream_id标识。两个索引都从0开始。如果指定,sync_file_id:stream_specifier设置哪个输入流用作表示同步参考。

命令行中的第一个-map选项指定输出流0的源,第二个-map选项指定输出流1的源,等等。

- 流标识符之前的字符创建“negative”映射。它禁用已创建映射的匹配流。

尾随的"?"在流索引之后将允许地图是可选的:如果地图不匹配流,则将忽略地图而不是失败。请注意,如果使用无效的输入文件索引,映射仍将失败;例如,如果地图指的是不存在的输入。

另一种[linklabel]表单将把复杂过滤器图形的输出(请参阅-filter_complex选项)映射到输出文件。 linklabel必须对应于图中定义的输出链接标签。

例如,将所有流从第一个输入文件映射到输出

ffmpeg -i INPUT -map 0 output

例如,如果第一个输入文件中有两个音频流,则这些流由“0:0”和“0:1”标识。 您可以使用-map选择要放在输出文件中的流。 例如:

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

将由“0:1”标识的INPUT中的输入流映射到out.wav中的(单个)输出流。

例如,要从输入文件a.mov(由标识符“0:2”指定)中选择索引为2的流,并从输入b.mov(由标识符“1:6”指定)中选择索引为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

要映射除第二个音频之外的所有流,请使 negative映射

ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT

要映射来自第一个输入的视频和音频流,并使用尾随?,如果第一个输入中没有音频流,则忽略音频映射:

ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT

要选择英语音频流:

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

请注意,使用此选项会禁用此输出文件的默认映射。

-ignore_unknown 如果尝试复制此类流,则忽略具有未知类型的输入流而不是失败。

-copy_unknown 如果尝试复制此类流,则允许复制具有未知类型的输入流而不是失败。

-map_channel [input_file_id.stream_specifier.channel_id | -1] [?] [:output_file_id.stream_specifier] 将音频通道从给定输入映射到输出。 如果未设置output_file_id.stream_specifier,则音频通道将映射到所有音频流。

使用“-1”而不是input_file_id.stream_specifier.channel_id将映射静音通道。

尾随?将允许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”,立体声,如果是两个,等等)。 如果输入和输出通道布局不匹配,则使用“-ac”组合“-map_channel”可以更新通道增益级别(例如两个“-map_channel”选项和“-ac 6”)。

您还可以将输入的每个通道提取到特定输出; 以下命令将INPUT音频流(file0,stream0)的两个通道提取到相应的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)与2个单声道音频流合并为一个立体声通道音频流(并保留视频流),则可以使用以下命令:

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 [:metadata_spec_out] infile [:metadata_spec_in](输出,每元数据) 从infile设置下一个输出文件的元数据信息。 请注意,这些是文件索引(从零开始),而不是文件名。 可选的metadata_spec_in / out参数指定要复制的元数据。 元数据说明符可以具有以下形式:

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

s [:stream_spec] 每个流元数据。 stream_spec是Stream说明符章节中描述的流说明符。 在输入元数据说明符中,复制第一个匹配流。 在输出元数据说明符中,将所有匹配的流复制到。

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 input_file_index(输出) 将带有索引input_file_index的输入文件中的章节复制到下一个输出文件。如果未指定章节映射,则从第一个输入文件复制章节,至少有一章。使用负文件索引禁用任何章节复制。

-benchmark(全局) 在编码结束时显示基准信息。显示实际使用的系统和用户时间以及最大内存消耗。所有系统都不支持最大内存消耗,如果不支持,通常会显示为0。

-benchmark_all(全局) 在编码期间显示基准信息。显示在各个步骤中使用的实际,系统和用户时间(音频/视频编码/解码)。

-timelimit duration(全局) ffmpeg运行持续时间秒后退出。

-dump(全局) 将每个输入数据包转储到stderr。

-hex(全局) 转储数据包时,也会转储有效负载。

-re(输入) 以本机帧速率读取输入。主要用于模拟抓取设备或实时输入流(例如,从文件读取时)。不应与实际的抓取设备或实时输入流一起使用(它可能导致数据包丢失)。默认情况下,ffmpeg尝试尽可能快地读取输入。此选项将减慢输入读取到输入的本机帧速率。它对于实时输出(例如直播)很有用。

-vsync参数 视频同步方法。出于兼容性原因,旧值可以指定为数字。必须始终将新添加的值指定为字符串。

0,passthrough 每个帧都以其从分路器到复用器的时间戳传递。

1,cfr 将复制和删除帧以实现所要求的恒定帧速率。

2,vfr 帧以其时间戳传递或丢弃,以防止2帧具有相同的时间戳。

drop 作为passthrough但是会破坏所有时间戳,使muxer根据帧速率生成新的时间戳。

-1,auto 根据复用器功能选择1到2之间。这是默认方法。

注意,在此之后,复用器可以进一步修改时间戳。

标签: ilme重型连接器ag

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台