ffmpeg 4.2.2最新文档说明 参数设置方法

yipeiwu_com4年前服务器

说明:

以下内容为机器翻译,有差错在所难免,但大体意思不会出错,原始文档请看这里: http://ffmpeg.org/ffmpeg.html#toc-Generic-options


1简介

ffmpeg [ global_options ] {[ input_file_options ] -i输入网址} ... {[ output_file_options ]output_url} ...

2说明

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

ffmpeg从该选项指定的任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等)中读取 -i,并写入任意数量的由以下参数指定的输出“文件”一个普通的输出网址。在命令行上找到的所有不能解释为选项的内容都被视为输出URL。

每个输入或输出URL原则上都可以包含任意数量的不同类型的流(视频/音频/字幕/附件/数据)。流的允许数量和/或类型可能会受到容器格式的限制。选择是从哪个输入流进入哪个输出,是自动完成还是通过-map选项进行选择(请参阅“流选择”一章)。

要在选项中引用输入文件,必须使用其索引(从0开始)。例如,第一个输入文件是0,第二个输入文件是1等等。类似地,文件中的流由其索引引用。例如,2:3引用第三输入文件中的第四流。另请参阅“流说明符”一章。

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

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

  • 要将输出文件的视频比特率设置为64 kbit / s,请执行以下操作:

    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
  • 要将输出文件的帧速率强制为24 fps,请执行以下操作:

    ffmpeg -i input.avi -r 24输出.avi
  • 要将输入文件的帧速率(仅对原始格式有效)强制为1 fps,将输出文件的帧速率强制为24 fps,请执行以下操作:

    ffmpeg -r 1 -i输入.m2v -r 24输出.avi

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

3详细说明

ffmpeg下图描述了每个输出的转码过程

________ ______________ | | | | | 输入| 解复用器| 编码数据| 解码器| 文件 ---------> | 包| ----- + | _______ | | ______________ | | 
                                           v 
                                       _________ 
                                      | | 
                                      | 解码| 
                                      | 框架| 
                                      | _________ | 
 ________ ______________ | | | | | | | 输出| <-------- | 编码数据| <---- +| 文件 多路复用器| 包| 编码器| ________ | | ______________ |

ffmpeg调用libavformat库(包含解复用器)以读取输入文件并从中获取包含编码数据的数据包。当有多个输入文件时,请ffmpeg尝试通过跟踪任何活动输入流上的最低时间戳来使它们保持同步。

然后,已编码的数据包将传递到解码器(除非为流选择了流复制,否则请参见说明)。解码器产生未压缩的帧(原始视频/ PCM音频/ ...),可以通过过滤进一步处理(请参阅下一节)。过滤后,将帧传递到编码器,编码器对其进行编码并输出编码后的数据包。最后,将这些信息传递到复用器,该复用器将编码的数据包写入输出文件。

3.1过滤

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

3.1.1简单滤镜

简单的过滤器图是那些只有一个输入和输出,并且都是相同类型的过滤器。在上图中,可以通过在解码和编码之间简单插入一个附加步骤来表示它们:

_________ ______________ | | | | | 解码| | 编码数据| | 框架| \ _ | 包| | _________ | \ / || ______________ | 
             \ __________ / 
  简单_ \ || | /编码器
  过滤器| 过滤的| / 
                | 框架| 
                | __________ |

通过每个流配置简单的过滤器图 -过滤 选项(与 -vf 和 -of分别为视频和音频的别名)。例如,一个简单的视频过滤器看起来像这样:

________ _____________ _______ ________ | | | | | | | | | 输入| ---> | 去隔行| ---> | 规模 ---> | 输出| | _______ | | _____________ | | _______ | | ________ |

请注意,某些过滤器会更改框架属性,但不会更改框架内容。例如,上例中的 fps过滤器更改了帧数,但没有触及帧内容。另一个示例是setpts过滤器,该过滤器仅设置时间戳,否则不传递帧。

3.1.2复杂的滤镜

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

_________ | | | 输入0 | \ __________ | _________ || \ | | 
             \ _________ / | 输出0 | 
              \ | | / | __________ | 
 _________ \ | 复杂 / | | | | / | 输入1 | ----> | 过滤器| \ | _________ | | | \ __________ 
               / | 图 \ | | 
              / | | \ | 输出1 | 
 _________ / | _________ || | __________ | | | / | 输入2 | / | _________ ||

复杂的过滤器图使用 -filter_complex选项。请注意,此选项是全局选项,因为复杂的滤镜本质上不能与单个流或文件明确关联。

的 -lavfi 选项等效于 -filter_complex.

复杂overlay过滤器图的一个简单示例是过滤器,它具有两个视频输入和一个视频输出,其中一个视频叠加在另一个视频之上。它的音频副本是amix过滤器。

3.2流复制

流复制是通过将copy参数提供给 -编解码器选项。ffmpeg省略了指定流的解码和编码步骤,因此仅进行解复用和复用。这对于更改容器格式或修改容器级别的元数据很有用。在这种情况下,上图将简化为:

________ ______________ ________ | | | | | | | 输入| 解复用器| 编码数据| 多路复用器| 输出| | 文件 ---------> | 包| -------> | 文件 | _______ | | ______________ | | ________ |

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

4流选择

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

4.1说明

接下来的小节描述了流选择中涉及的各种规则。接下来的示例说明了如何在实践中应用这些规则。

尽管已尽一切努力来准确反映程序的行为,但FFmpeg仍在不断开发中,并且自撰写本文以来,代码可能已更改。

4.1.1自动流选择

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

它将根据以下条件选择该流:

  • 对于视频,它是最高分辨率的视频流,

  • 对于音频,它是频道最多的流,

  • 对于字幕,这是找到的第一个字幕流,但有一个警告。输出格式的默认字幕编码器可以基于文本或基于图像,并且只会选择相同类型的字幕流。

在几个相同类型的流平均分配的情况下,选择索引最低的流。

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

4.1.2手动流选择

-map被使用时,仅用户映射流被包括在该输出文件,用下面的输出FilterGraph动态一个可能的例外描述。

4.1.3复杂的滤镜

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

带有标记垫的复杂filtergraph输出流必须映射一次且恰好映射一次。

4.1.4流处理

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

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

4.2范例

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

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

输入文件'A.avi' 
      流0:视频640x360 
      流1:音频2通道输入文件'B.mp4' 
      流0:视频1920x1080 
      流1:音频2通道
      流2:字幕(文本)
      流3:音频5.1通道
      流4:字幕(文本)输入文件'C.mkv' 
      流0:视频1280x720 
      流1:音频2频道
      流2:字幕(图像)

示例:自动流选择

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

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

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

out2.wav仅接受音频流,因此仅stream 3来自mp4 被选中。

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

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

对于第三输出,用于音频流的编解码器的选择已被设置为copy,使编码解码滤波-没有操作将发生,或者可以发生。所选流的数据包应从输入文件传送并在输出文件中多路复用。

示例:自动字幕选择

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

虽然 out1.mkv是一个接受字幕流的Matroska容器文件,只能选择视频和音频流。的字幕流病毒是基于图像的,而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选项设置了一个滤镜,它由一个视频滤镜组成。overlay过滤器仅需要两个视频输入,但未指定任何视频输入,因此使用前两个可用视频流,即avi 和 病毒过滤器的输出板没有标签,因此被发送到第一个输出文件 out1.mp4因此,跳过了视频流的自动选择,这会选择mp4具有大多数频道的音频流,即。stream 3 在mp4,将自动选择。但是,由于MP4格式未注册默认的字幕编码器,并且用户尚未指定字幕编码器,因此未选择字幕流。

第二个输出文件, out2.srt,仅接受基于文本的字幕流。因此,即使第一个可用的字幕流属于病毒,它是基于图像的,因此被跳过。选定的流,stream 2mp4,是第一个基于文本的字幕流。

示例:带标签的过滤器输出

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

上面的此命令也将失败,因为色调过滤器输出的标签为[outv],并且没有映射到任何地方。

该命令应作如下修改,

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

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

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

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

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

out3.mkv 由色调过滤器的克隆视频输出和的第一个音频流组成 mp4.

5个选择

所有数字选项(如果未另行指定)都接受代表数字的字符串作为输入,可以在其后跟随SI单位前缀之一,例如:“ K”,“ M”或“ G”。

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

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

5.1流说明符

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

流说明符是通常附加到选项名称并由冒号分隔的字符串。例如,-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或我:把stream_id

  • 通过流ID(例如MPEG-TS容器中的PID)匹配流。

  • m: [: ]

  • Matches streams with the metadata tag key having the specified value. If value is not given, matches streams that contain the given tag with any value.

  • 将流与可用配置匹配,必须定义编解码器,并且必须提供基本信息,例如视频尺寸或音频采样率。

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

5.2通用选项

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

  • -L

  • 显示许可证。

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

  • 显示帮助。可以指定一个可选参数来打印有关特定项目的帮助。如果未指定任何参数,则仅显示基本(非高级)工具选项。

    arg的可能值为

    • long

    • 除了基本工具选项外,还打印高级工具选项。

    • 充分

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

    • 解码器=解码器名称

    • 打印对解码器命名的详细信息decoder_name使用 -解码器 选项以获取所有解码器的列表。

    • 编码器= encoder_name

    • 打印关于编码器的命名详细信息encoder_name使用 -编码器 选项以获取所有编码器的列表。

    • demuxer = demuxer_name

    • 打印有关名为demuxer_name的解复用器的详细信息使用 格式 选项以获取所有多路分解器和多路复用器的列表。

    • muxer = muxer_name

    • 打印有关名为muxer_name的多路复用器的详细信息使用 格式 选项以获取所有多路复用器和多路分配器的列表。

    • filter = filter_name

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

    • bsf = bitstream_filter_name

    • 打印有关位流过滤器名称bitstream_filter_name的详细信息使用-bsfs 选项以获取所有比特流过滤器的列表。

  • -版

  • 显示版本。

  • 格式

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

  • -解复用器

  • 显示可用的多路分配器。

  • 混合器

  • 显示可用的混合器。

  • -设备

  • 显示可用设备。

  • -编解码器

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

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

  • -解码器

  • 显示可用的解码器。

  • -编码器

  • 显示所有可用的编码器。

  • -bsfs

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

  • -协议

  • 显示可用的协议。

  • -过滤器

  • 显示可用的libavfilter过滤器。

  • -pix_fmts

  • 显示可用的像素格式。

  • -sample_fmts

  • 显示可用的样本格式。

  • 布局

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

  • 颜色

  • 显示公认的颜色名称。

  • 设备 [,opt1 = val1 [,opt2 = val2 ] ...]

  • 显示自动检测到的输入设备的来源。某些设备可能会提供无法自动检测到的与系统相关的源名称。不能假定返回的列表总是完整的。

    ffmpeg-源脉冲,服务器= 192.168.0.4
  • -sinks 设备 [,opt1 = val1 [,opt2 = val2 ] ...]

  • 显示自动检测到的输出设备接收器。某些设备可能会提供无法自动检测到的与系统相关的接收器名称。不能假定返回的列表总是完整的。

    ffmpeg-接收器脉冲,服务器= 192.168.0.4
  • -loglevel [ 标志 +] loglevel | -v [ 标志 +] 日志级别

  • 设置库使用的日志记录级别和标志。

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

    • 重复

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

    • 水平

    • 指示日志输出应[level]在每个消息行中添加一个前缀。例如,在将日志转储到文件时,它可以用作日志着色的替代方法。

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

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

    • 安静-8

    • 什么都不显示;安静。

    • 恐慌,0

    • 仅显示致命错误,这些错误可能导致进程崩溃,例如断言失败。当前未用于任何东西。

    • 致命的,8

    • 仅显示致命错误。这些都是错误,之后绝对无法继续执行该过程。

    • 错误,16

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

    • 警告,24

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

    • 信息32

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

    • 详细,40

    • 与相同info,但更为冗长。

    • 调试,48

    • 显示所有内容,包括调试信息。

    • 痕迹56

    例如,要启用重复的日志输出,请添加level前缀,并将 loglevel设置verbose

    ffmpeg -loglevel重复+级别+详细-i输入输出

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

    ffmpeg [...] -loglevel + repeat

    默认情况下,程序记录到stderr。如果终端支持着色,则使用颜色标记错误和警告。可以通过设置环境变量来禁用日志着色 AV_LOG_FORCE_NOCOLOR,也可以强制设置环境变量AV_LOG_FORCE_COLOR

  • -报告

  • 转储完整的命令行并将日志输出到当前目录中命名的文件 中。该文件对于错误报告很有用。这也意味着。 program-YYYYMMDD-HHMMSS.log-loglevel debug

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

    可以识别以下选项:

    • 文件

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

    • 水平

    • 使用数值设置对数详细级别(请参阅参考资料-loglevel)。

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

    FFREPORT = file = ffreport.log:level = 32 ffmpeg -i输入输出

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

  • -hide_banner

  • 禁止打印横幅。

    所有FFmpeg工具通常都会显示版权声明,构建选项和库版本。此选项可用于禁止打印此信息。

  • -cpuflags标志(全局

  • 允许设置和清除cpu标志。此选项用于测试。除非您知道自己在做什么,否则不要使用它。

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

    该选项的可能标志是:

    • x86

      • 毫米

      • mmxext

      • se

      • sse2

      • sse2slow

      • sse3

      • sse3slow

      • ssse3

      • 原子

      • sse4.1

      • sse4.2

      • avx

      • avx2

      • op

      • fma3

      • fma4

      • 3天

      • 3dnowext

      • BMI1

      • bmi2

      • 克莫夫

      • armv5te

      • armv6

      • armv6t2

      • vfp

      • vfpv3

      • 设定

    • AArch64

      • armv8

      • vfp

    • PowerPC

      • 活力

    • 特定处理器

      • 奔腾2

      • 奔腾3

      • 奔腾4

      • 66

      • k62

      • 速龙

      • 速龙

      • 88

5.3 AV选项

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

  • 通用的

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

  • 私人的

  • 这些选项特定于给定的容器,设备或编解码器。专用选项在其相应的容器/设备/编解码器下列出。

例如,要将ID3v2.3标头而不是默认ID3v2.4写入MP3文件,请使用 id3v2_version MP3多路复用器的专用选项:

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的比特率。

注意: -无选项 语法不能用于布尔AVOptions,请使用 -选项0/-选项1.

注意:通过在选项名称前添加v / a / s来指定每流AVOptions的旧的未公开方法现在已经过时,并且将很快删除。

5.4主要选项

  • -f fmt输入/输出

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

  • -i 网址input)

  • 输入文件网址

  • -y(全球

  • 覆盖输出文件而无需询问。

  • -n(全球

  • 不要覆盖输出文件,如果指定的输出文件已经存在,请立即退出。

  • -stream_loop 编号输入

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

  • -c [:stream_specifier ] 编解码器每个流的输入/输出

  • -codec [:stream_specifier ] 编解码器输入/输出,每个流

  • 为一个或多个流选择编码器(在输出文件之前使用)或解码器(在输入文件之前使用)。编解码器是解码器/编码器的名称,或者是特殊值copy(仅用于输出),用于指示将不对流进行重新编码。

    例如

    ffmpeg -i输入-map 0 -c:v libx264 -c:复制输出

    使用libx264编码所有视频流,并复制所有音频流。

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

    ffmpeg -i输入-map 0 -c复制-c:v:1 libx264 -c:a:137 libvorbis输出

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

  • -t 持续时间输入/输出

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

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

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

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

  • -到位置输入/输出

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

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

  • -fs limit_size输出

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

  • -ss 位置输入/输出

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

    当用作输出选项时(在输出网址之前),将解码但放弃输入,直到时间戳到达position为止

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

  • -sseof 位置输入

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

  • -itsoffset 偏移量输入

  • 设置输入时间偏移。

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

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

  • -itsscale 比例输入,每个流

  • 重新调整输入时间戳。标度应为浮点数。

  • 时间戳记日期输出

  • 在容器中设置记录时间戳。

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

  • -metadata [:metadata_specifier]  = 输出,每个元数据

  • 设置元数据键/值对。

    可以提供可选的metadata_specifier来设置流,章节或程序上的元数据。有关-map_metadata 详细信息,请参见文档。

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

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

    ffmpeg -i in.avi -metadata title =“我的标题” out.flv

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

    ffmpeg -i INPUT-元数据:s:a:0 language = eng输出
  • -disposition [:stream_specifier] 每个流的输出

  • 设置流的处置。

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

    可以识别以下配置:

    • 默认

    • 配音

    • 原版的

    • 评论

    • 歌词

    • 卡拉OK

    • 被迫

    • 听力障碍

    • 视障人士

    • clean_effects

    • attach_pic

    • 字幕

    • 说明

    • 依赖的

    • 元数据

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

    ffmpeg -i in.mkv -c复制-disposition:a:1默认为out.mkv

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

    ffmpeg -i in.mkv -c复制-disposition:s:0 0 -disposition:s:1默认为out.mkv

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

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

    并非所有的混合器都支持嵌入式缩略图,而那些混合器仅支持几种格式,例如JPEG或PNG。

  • -program [title = 标题:] [program_num = program_num:] st =  [:st =  ...](输出

  • 创建具有指定的节目标题program_num和指定添加 (多个)给它。

  • -目标类型输出

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

    ffmpeg -i myfile.avi-目标vcd /tmp/vcd.mpg

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

    ffmpeg -i myfile.avi-目标vcd -bf 2 /tmp/vcd.mpg
  • -dn(输入/输出

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

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

  • -dframes 编号输出

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

  • -frames [:stream_specifier ] 帧数每流输出

  • 计数之后停止写入流

  • -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中,输入与label关联in,输出与label 关联out有关filtergraph语法的更多信息,请参见ffmpeg-filters手册。

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

  • -filter_script [:stream_specifier ] 文件名输出,每个流

  • 此选项类似于 -过滤,唯一的区别是它的参数是要从中读取过滤器描述的文件名。

  • -filter_threads nb_threads全局

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

  • -pre [:stream_specifier ] 预设名称输出,每个流

  • 指定匹配流的预设。

  • -stats(全球

  • 打印编码进度/统计信息。默认情况下它处于启用状态,要明确禁用它,您需要指定-nostats

  • -进度url全局

  • 将程序友好的进度信息发送到url

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

  • -stdin

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

    例如,如果ffmpeg在后台进程组中,则禁用标准输入上的交互很有用。大致可以达到相同的结果,ffmpeg ... < /dev/null但需要外壳。

  • -debug_ts(全局

  • 打印时间戳信息。默认情况下处于关闭状态。此选项主要用于测试和调试目的,并且输出格式可能会从一个版本更改为另一个版本,因此可移植脚本不应使用此选项。

    另请参阅选项-fdebug ts

  • -attach 文件名输出

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

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

    ffmpeg -i输入-附加DejaVuSans.ttf-元数据: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

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

  • -noautorotate

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

5.5视频选项

  • -vframes 编号输出

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

  • -r [:stream_specifier ] fps输入/输出,每个流

  • 设置帧频(Hz值,分数或缩写)。

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

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

  • -s [:stream_specifier ] 大小输入/输出,每个流

  • 设置框架尺寸。

    作为输入选项,这是 video_size 私有选项,由某些多路分解器识别,其帧大小未存储在文件中或不可配置,例如原始视频或视频采集卡。

    作为输出选项,此插入scale视频滤波器的 端部相应的FilterGraph动态。scale直接使用过滤器将其插入开头或其他位置。

    格式为“x'(默认-与来源相同)。

  • -aspect [:stream_specifier ] 方面输出,每个流

  • 设置由指定的视频显示宽高比方面

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

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

  • -vn(输入/输出

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

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

  • -vcodec 编解码器输出

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

  • -pass [:stream_specifier ] n输出,每个流

  • 选择密码(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 ] 前缀输出,每个流

  • 将两次通过的日志文件名前缀设置为prefix,默认文件名前缀为“ ffmpeg2pass”。完整的文件名将为 PREFIX-N.log,其中N是特定于输出流的数字

  • -vf filtergraph输出

  • 创建filtergraph指定的filtergraph并使用它过滤流。

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

5.6高级视频选项

  • -pix_fmt [:stream_specifier ] 格式输入/输出,每个流

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

  • -sws_flags 标志输入/输出

  • 设置SwScaler标志。

  • -rc_override [:stream_specifier ] 覆盖输出,每个流

  • 特定间隔的速率控制替代,格式为“ int,int,int”列表,以斜杠分隔。两个第一个值是开始和结束帧号,最后一个是量化器(如果为正数)或品质因数(如果为负)。

  • 期待与

  • 编码器中的强制隔行支持(仅MPEG-2和MPEG-4)。如果输入文件是隔行扫描的,并且您希望保留隔行扫描格式以使损失最小,请使用此选项。另一种方法是使用 -去隔行,但反交错会带来损失。

  • -psnr

  • 计算压缩帧的PSNR。

  • -vstats

  • 将视频编码统计信息转储到 vstats_HHMMSS.log.

  • -vstats_file 文件

  • 将视频编码统计信息转储到文件中

  • -vstats_version 文件

  • 指定要使用的vstats格式的版本。默认值为2。

    版本= 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首先

  • -dc 精度

  • Intra_dc_precision。

  • -vtag fourcc / tag输出

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

  • -qphist(全球

  • 显示QP直方图

  • -vbsf bitstream_filter

  • 不推荐使用-bsf

  • -force_key_frames [:stream_specifier ] time [,time ...](输出,每个流

  • -force_key_frames [:stream_specifier ] expr:expr每流输出

  • -force_key_frames [:stream_specifier ]源(每个流的输出

  • force_key_frames可以采用以下形式的参数:

    • 时间 [,时间 ...]

    • 如果参数由时间戳组成,则ffmpeg将根据编码器时基将指定时间四舍五入到最接近的输出时间戳,并在时间戳等于或大于计算出的时间戳的第一帧处强制关键帧。请注意,如果编码器时基过于粗糙,则关键帧可能会强制放置在时间戳低于指定时间的帧上。默认的编码器时基是输出帧率的倒数,但也可以通过设置-enc_time_base

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

      例如,要在5分钟时插入关键帧,并在每章开始之前0.1秒插入关键帧:

      -force_key_frames 0:05:00,第0.1章
    • expr:expr

    • 如果参数以开头expr:,则将字符串expr 像表达式一样进行解释,并对每个帧进行评估。如果评估不为零,则将强制使用关键帧。

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

      • ñ

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

      • n_强迫

      • 强制帧数

      • prev_forced_n

      • 上一个强制帧的编号,即NAN尚未强制关键帧的时间

      • prev_forced_t

      • 上一个强制帧的时间,即NAN尚未强制关键帧的时间

      • Ť

      • 当前已处理帧的时间

      例如,每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,则当正在编码的当前帧在其源中标记为关键帧时,ffmpeg将强制使用关键帧。

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

  • -copyinkf [:stream_specifier ](输出,每个流

  • 在进行流复制时,还复制开始时发现的非关键帧。

  • -init_hw_device 类型 [= 名称 ] [:设备 [,键=值 ...]]

  • 使用给定的设备参数初始化类型name的新硬件设备如果未指定名称,它将收到格式为“ type%d” 的默认名称

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

    • cuda

    • 设备是CUDA设备的编号。

    • dxva2

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

    • 瓦皮

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

    • vdpau

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

    • qsv

    • 设备在“MFX_IMPL_ *'。允许的值为:

      • 汽车

      • SW

      • w

      • auto_any

      • hw_any

      • 2号

      • 3号

      • 4号

      如果未指定,则“auto_any' 用来。(请注意,通过创建适合平台的子设备,可以更轻松地为QSV获得理想的结果('dxva2' 要么 '瓦皮'),然后从中派生QSV设备。)

    • opencl的

    • 设备选择平台和设备作为platform_index.device_index

      也可以使用键值对过滤设备集,以仅查找与特定平台或设备字符串匹配的设备。

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

      • platform_profile

      • platform_version

      • platform_name

      • platform_vendor

      • platform_extensions

      • 设备名称

      • device_vendor

      • driver_version

      • device_version

      • device_profile

      • device_extensions

      • 设备类型

      索引和过滤器必须一起唯一地选择一个设备。

      例子:

      • -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设备

    • 火山

    • 如果device是整数,它将通过与系统相关的设备列表中的索引来选择设备。如果device是任何其他字符串,它将选择名称包含该字符串作为子字符串的第一个设备。

      例子:

      • -init_hw_device vulkan:1

      • 选择系统上的第二个设备。

      • -init_hw_device vulkan:RADV

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

  • -init_hw_device 类型 [= 名称 ] @ 

  • 初始化类型name的新硬件设备,从具有name source的现有设备派生它

  • -init_hw_device列表

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

  • -filter_hw_device 名称

  • 将名为名称的硬件设备传递给任何过滤器图中的所有过滤器。这可用于设置要通过hwupload过滤器上传到的设备,或要通过hwmap过滤器映射到的设备其他过滤器在需要硬件设备时也可以使用此参数。请注意,通常只有在输入尚未在硬件框架中时才需要这样做-如果是这样,过滤器将从接收到的作为输入的框架的上下文中派生出所需的设备。

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

  • -hwaccel [:stream_specifier ] hwaccel输入,每个流

  • 使用硬件加速来解码匹配的流。hwaccel的允许值为

    • 没有

    • 不要使用任何硬件加速(默认设置)。

    • 汽车

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

    • vdpau

    • 使用VDPAU(Unix视频解码和演示API)硬件加速。

    • dxva2

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

    • 瓦皮

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

    • qsv

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

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

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

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

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

  • -hwaccel_device [:stream_specifier ] hwaccel_device输入,每个流

  • 选择用于硬件加速的设备。

    仅当 -hwaccel还指定了选项。它可以引用使用以下命令创建的现有设备-init_hw_device 按名称,也可以创建新设备,就像“-init_hw_devicetypehwaccel_device 之前被调用过。

  • -hwaccels

  • 列出此ffmpeg版本支持的所有硬件加速方法。

5.7音频选项

  • -aframes 编号输出

  • 设置要输出的音频帧数。这是的过时别名 -frames:a,应改为使用。

  • -ar [:stream_specifier ] freq输入/输出,每个流

  • 设置音频采样频率。对于输出流,默认情况下将其设置为相应输入流的频率。对于输入流,此选项仅对音频捕获设备和原始多路分配器有意义,并映射到相应的多路分配器选项。

  • -aq q输出

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

  • -ac [:stream_specifier ] 通道输入/输出,每个流

  • 设置音频通道数。对于输出流,默认情况下将其设置为输入音频通道的数量。对于输入流,此选项仅对音频捕获设备和原始多路分配器有意义,并映射到相应的多路分配器选项。

  • -an(输入/输出

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

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

  • -acodec 编解码器输入/输出

  • 设置音频编解码器。这是的别名-codec:a

  • -sample_fmt [:stream_specifier ] sample_fmt输出,每个流

  • 设置音频样本格式。-sample_fmts获得的支持采样格式的列表。

  • -of 过滤器图输出

  • 创建filtergraph指定的filtergraph并使用它过滤流。

    这是它的别名-filter:a,请参见-filter选项

5.8 Advanced Audio options

  • -atag fourcc / tag输出

  • 强制音频标签/ fourcc。这是的别名-tag:a

  • -absf bitstream_filter

  • 已弃用,请参见-bsf

  • -guess_layout_max 通道输入,每个流

  • 如果某些输入通道的布局未知,请尝试猜测是否仅对应于指定数量的通道。例如,2告诉您ffmpeg将1个声道识别为单声道,将2个声道识别为立体声,但将6个声道识别为5.1。默认设置是始终尝试猜测。使用0禁用所有猜测。

5.9字幕选项

  • -scodec 编解码器输入/输出

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

  • -sn(输入/输出

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

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

  • -sbsf bitstream_filter

  • 已弃用,请参见-bsf

5.10高级字幕选项

  • -fix_sub_duration

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

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

  • -canvas_size 大小

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

5.11高级选项

  • -map [-] input_file_id [:stream_specifier ] [?] [,sync_file_id [:stream_specifier ]] | [linklabel]输出

  • 将一个或多个输入流指定为输出文件的源。每个输入流由输入文件中的输入文件索引input_file_id和输入流索引input_stream_id标识两个索引均从0开始。如果指定, sync_file_idstream_specifier设置将哪个输入流用作演示文稿同步参考。

    -map命令行上的第一个选项指定输出流0的源,第二个-map选项指定输出流1的源,依此类推

    -流标识符之前字符创建一个“负”的映射。它从已经创建的映射中禁用匹配的流。

    ?流索引后面的尾部将允许该映射为可选:如果该映射不匹配任何流,则该映射将被忽略而不是失败。注意,如果使用了无效的输入文件索引,则映射仍然会失败;例如地图是否引用了不存在的输入。

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

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

    ffmpeg -i INPUT -map 0输出

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

    ffmpeg -i输入-map 0:1 out.wav

    将输入流映射到 输入 在(单个)输出流中由“ 0:1”标识 外出.

    例如,从输入文件中选择索引为2的流 a.mov (由标识符“ 0:2”指定),并从输入中获取索引为6的流 b.mov (由标识符“ 1:6”指定),然后将其复制到输出文件 out.mov:

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

    要从输入文件中选择所有视频和第三个音频流:

    ffmpeg -i输入-map 0:v -map 0:a:2 OUTPUT

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

    ffmpeg -i输入-map 0 -map -0:a:1输出

    要映射来自第一个输入的视频和音频流,并使用结尾部分?,如果第一个输入中不存在音频流,请忽略音频映射:

    ffmpeg -i输入-map 0:v -map 0:a?输出值

    选择英语音频流:

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

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

  • -ignore_unknown

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

  • -copy_unknown

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

  • -map_channel [ input_file_idstream_specifierchannel_id | -1] [?] [:output_file_idstream_specifier ]

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

    使用“ -1”代替 input_file_idstream_specifierchannel_id将映射一个静音频道。

    尾随?将允许map_channel是可选的:如果map_channel不匹配任何通道,则map_channel将被忽略而不是失败。

    例如,假设INPUT是立体声音频文件,则可以使用以下命令切换两个音频通道:

    ffmpeg -i输入-map_channel 0.0.1 -map_channel 0.0.0 OUTPUT

    如果要使第一个通道静音并保持第二个通道:

    ffmpeg -i输入-map_channel -1 -map_channel 0.0.1输出

    “ -map_channel”选项的顺序指定输出流中通道的顺序。根据映射的通道数猜测输出通道的布局(如果是一个“ -map_channel”,则为单声道;如果是两个,则为立体声,以此类推)。如果输入和输出通道布局不匹配(例如,两个“ -map_channel”选项和“ -ac 6”),则将“ -ac”与“ -map_channel”组合使用可更新通道增益级别。

    您还可以将输入的每个通道提取到特定的输出。以下命令将INPUT音频流的两个通道(文件0,流0)提取到各自的OUTPUT_CH0OUTPUT_CH1输出:

    ffmpeg -i输入-map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1

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

    ffmpeg -istereo.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”来选择包含在不同流(来自相同或不同文件)中的多个输入音频通道,并将它们合并为一个输出流。因此,当前例如不可能将两个单独的单声道流变成单个立体声流。但是,可以将立体声流分成两个单通道单声道流。

    如果需要此功能,可能的解决方法是使用合并 过滤器。例如,如果您需要合并媒体(此处input.mkv)将2个单声道音频流转换为一个立体声通道音频流(并保留视频流),则可以使用以下命令:

    ffmpeg -i input.mkv -filter_complex“ [0:1] [0:2] amerge” -c:a pcm_s16le -c:v复制output.mkv

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

    ffmpeg -i输入-map_channel 0.0.0 -map_channel 0.0.1?输出值
  • -map_metadata [:metadata_spec_out ] infile [:metadata_spec_in ](输出,每个元数据

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

    • G

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

    • s [:stream_spec ]

    • 每流元数据。stream_spec是流说明符,如“ 流说明符”一章中所述。在输入元数据说明符中,从中复制第一个匹配流。在输出元数据说明符中,所有匹配的流都将复制到其中。

    • c章节索引

    • 每章的元数据。chapter_index是从零开始的章节索引。

    • p程序索引

    • 每个程序的元数据。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的输入文件复制到下一个输出文件。如果未指定章节映射,那么将从第一个输入文件中复制至少包含一个章节的章节。使用负文件索引可禁用任何章节复制。

  • -基准(全球

  • 在编码末尾显示基准测试信息。显示实际,系统和用户使用的时间以及最大内存消耗。并非所有系统都支持最大内存消耗,如果不支持,通常将显示为0。

  • -benchmark_all(全局

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

  • -timelimit 持续时间全局

  • ffmpeg 在CPU用户时间中运行了持续秒数后退出

  • 转储(全球

  • 将每个输入数据包转储到stderr。

  • -hex(全局

  • 转储数据包时,还转储有效负载。

  • -re(输入

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

  • -vsync 参数

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

    • 0,直通

    • 每个帧及其时间戳从多路分配器传递到多路复用器。

    • 1,比照

    • 帧将被复制并丢弃,以精确达到所需的恒定帧速率。

    • 2,从

    • 帧以其时间戳通过或丢弃,以防止2个帧具有相同的时间戳。

    • 下降

    • 作为直通但破坏了所有时间戳,使复用器根据帧速率生成新的时间戳。

    • -1,自动

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

    请注意,此后,复用器可以进一步修改时间戳。例如,在format选项的情况下void_negative_ts 已启用。

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

  • -frame_drop_threshold 参数

  • 丢帧阈值,用于指定丢掉视频帧之前可以落后多少帧。以帧频为单位,因此1.0是一帧。默认值为-1.1。一种可能的用例是在嘈杂的时间戳记下避免丢帧,或者在确切的时间戳记下提高丢帧精度。

  • -async samples_per_second

  • 音频同步方法。“拉伸/压缩”音频流以匹配时间戳,该参数是每秒更改音频的最大样本数。-async 1是一种特殊情况,其中仅对音频流的开始进行校正,而无需进行任何后续的校正。

    请注意,此后,复用器可以进一步修改时间戳。例如,在format选项的情况下void_negative_ts 已启用。

    此选项已被弃用。请改用aresample音频过滤器。

  • -复制

  • 不要处理输入时间戳,但要保留它们的值而不尝试清除它们。特别是,请勿删除初始开始时间偏移值。

    请注意,取决于 垂直同步 选项或特定的混合器处理(例如,在format选项的情况下) void_negative_ts 启用),即使选择此选项,输出时间戳也可能与输入时间戳不匹配。

  • -start_at_zero

  • 当与 复制,请移动输入时间戳,使其从零开始。

    这意味着-ss 50无论输入文件从哪个时间戳开始,使用eg 都会使输出时间戳从50秒开始。

  • -copytb 模式

  • 指定在流复制时如何设置编码器时基。 mode是一个整数值,可以采用以下值之一:

    • 1

    • 使用解复用器时基。

      时基从相应的输入多路分配器复制到输出编码器。在复制具有可变帧速率的视频流时,有时需要避免非单调增加时间戳。

    • 0

    • 使用解码器时基。

      时基从相应的输入解码器复制到输出编码器。

    • -1

    • 尝试自动做出选择,以生成合理的输出。

    默认值为-1。

  • -enc_time_base [:stream_specifier ] 时基输出,每个流

  • 设置编码器时基。时基是一个浮点数,可以采用以下值之一:

    • 0

    • 根据媒体类型分配默认值。

      对于视频-使用1 /帧率,对于音频-使用1 /采样率。

    • -1

    • 尽可能使用输入流时基。

      如果输入流不可用,将使用默认时基。

    • > 0

    • 使用提供的数字作为时基。

      该字段可以以两个整数的比率(例如1:24、1:48000)或浮点数(例如0.04166、2.0833e-5)的形式提供

    预设值为0。

  • -bitexact(输入/输出

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

  • -最短(输出

  • 最短的输入流结束时,完成编码。

  • -dts_delta_threshold

  • 时间戳不连续性增量阈值。

  • -dts_error_threshold 

  • 时间戳记错误增量阈值。此阈值用于丢弃疯狂的/损坏的时间戳,默认值为30小时,它是任意选择的,非常保守。

  • -muxdelay 输出

  • 设置最大解复用解码延迟。

  • -muxpreload 输出

  • 设置初始多路分配解码延迟。

  • -streamid output-stream-index新值output

  • 将新的stream-id值分配给输出流。该选项应在其应用的输出文件名之前指定。对于存在多个输出文件的情况,可以将流标识重新分配给其他值。

    例如,将输出mpegts文件的流0 PID设置为33,将流1 PID设置为36:

    ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts
  • -bsf [:stream_specifier ] bitstream_filters每个流的输出

  • 设置比特流过滤器以匹配流。bitstream_filters是逗号分隔的比特流过滤器列表。使用该-bsfs选项可获取比特流过滤器列表。

    ffmpeg -i h264.mp4 -c:v复制-bsf:v h264_mp4toannexb -out.h264
    ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s复制-f rawvideo sub.txt
  • -tag [:stream_specifier ] codec_tag输入/输出,每个流

  • 强制标记/ fourcc匹配流。

  • -timecode hhmmss SEP ff

  • 指定写入时间码。对于非删除时间码,SEP为“:”,而“;”为 (或“。”)删除。

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

  • -filter_complex 过滤器图全局

  • 定义一个复杂的过滤器图,即具有任意数量的输入和/或输出的过滤器图。对于简单图形-具有一个输入和一个相同类型的输出的图形-请参见-过滤选项。filtergraph是对filtergraph的描述,如ffmpeg-filters手册的“ Filtergraph语法”部分所述。

    输入链接标签必须使用以下[file_index:stream_specifier]语法引用输入流 (即与-地图 用途)。如果stream_specifier匹配多个流,则将使用第一个。未标记的输入将连接到匹配类型的第一个未使用的输入流。

    输出链接标签以 -地图未标记的输出将添加到第一个输出文件。

    请注意,使用此选项可以仅使用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'覆盖'out.mkv

    要使用lavfi color来源生成5秒钟的纯红色视频,请执行以下操作

    ffmpeg -filter_complex'color = c = red'-t 5 out.mkv
  • -filter_complex_threads nb_threads全局

  • 定义用于处理filter_complex图的线程数。与filter_threads类似,但-filter_complex用于图形。默认值为可用的CPU数量。

  • -lavfi filtergraph全局

  • 定义一个复杂的过滤器图,即具有任意数量的输入和/或输出的过滤器图。相当于-filter_complex.

  • -filter_complex_script 文件名全局

  • 此选项类似于 -filter_complex,唯一的区别是它的参数是要从中读取复杂滤镜描述的文件名。

  • -accurate_seek(输入

  • 该选项启用或禁用使用 -ss选项。默认情况下启用此功能,因此转码时查找是准确的。-noaccurate_seek 禁用它,例如在复制某些流并对其他流进行代码转换时可能很有用。

  • -seek_timestamp(输入

  • 此选项启用或禁用带有时间戳的输入文件中的时间戳搜索。 -ss选项。默认情况下禁用。如果启用,则-ss选项被认为是实际的时间戳,并且不会因文件的开始时间而偏移。这仅对不是从时间戳0开始的文件(例如传输流)有意义。

  • -thread_queue_size 大小输入

  • 从文件或设备读取时,此选项设置排队的数据包的最大数量。在低延迟/高速率的实时流中,如果未及时读取数据包,则可能会丢弃这些数据包;提高此值可以避免这种情况。

  • -sdp_file 文件全局

  • 将输出流的sdp信息打印到file当至少一个输出不是rtp流时,这允许转储sdp信息。(要求至少一种输出格式为rtp)。

  • -丢弃(输入

  • 允许丢弃特定的流或流中的帧。使用value可以完全丢弃任何输入流,all而从流中选择性地丢弃帧是在多路分配器上进行的,并非所有多路分配器都支持。

    • 没有

    • 丢弃无边框。

    • 默认

    • 默认值,不丢弃任何帧。

    • Noref

    • 丢弃所有非参考框架。

    • 比迪尔

    • 丢弃所有双向框架。

    • 诺基

    • 丢弃除关键帧以外的所有帧。

    • 所有

    • 丢弃所有框架。

  • -abort_on 标志全局

  • 在各种情况下停止并中止操作。以下标志可用:

    • empty_output

    • 没有数据包传递到多路复用器,输出为空。

  • -xerror(全球

  • 停止并错误退出

  • -max_muxing_queue_size 数据包每个流输出

  • 在对音频和/或视频流进行代码转换时,ffmpeg将不会开始写入输出,直到每个此类流具有一个数据包为止。在等待发生这种情况时,会缓冲其他流的数据包。此选项为匹配的输出流设置此缓冲区的大小(以包为单位)。

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

作为特殊的例外,您可以使用位图字幕流作为输入:它将转换为与文件中最大视频大小相同的视频,如果没有视频,则为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也会起作用)

5.12预设文件

预设文件包含一系列的option = value对,每行一个,指定了一系列在命令行中指定的选项序列。以井号('#')开头的行将被忽略,并用于提供注释。检查预设 例如,FFmpeg源树中的目录。

预设文件有两种类型:ffpreset和avpreset文件。

5.12.1 ffpreset文件

ffpreset文件与规定vpreapre, spre,和fpre选项。fpre选项将预设的文件名而不是预设名称作为输入,并且可用于任何类型的编解码器。对于vpreapre和 spre选项,在预先设定的文件中指定的选项施加到类型相同的预设选项的当前选择的编解码器。

传递到的参数vpreaprespre 预设选项识别预置文件根据以下规则使用:

第一个ffmpeg 在目录中搜索名为arg .ffpreset的文件$ FFMPEG_DATADIR (如果已设置),以及 $ HOME / .ffmpeg,以及在配置时定义的datadir中(通常 前缀/共享/ ffmpeg)或 ff预设文件夹在Win32上的可执行文件中按此顺序排列。例如,如果参数是libvpx-1080p,它将搜索文件libvpx-1080p.ff预设.

如果找不到此类文件,则ffmpeg将在上述目录中搜索名为 codec_name - arg .ffpreset的文件,其中codec_name是将对其应用预设文件选项的编解码器的名称。例如,如果您使用选择视频编解码器-vcodec libvpx并使用-vpre 1080p,则它将搜索文件libvpx-1080p.ff预设.

5.12.2 avpreset文件

使用该pre选项指定avpreset文件它们的工作方式与ffpreset文件类似,但它们仅允许特定于编码器的选项。因此,不能使用用于指定编码器的“ 选项 = 值”对。

pre指定选项后,ffmpeg将在目录中查找后缀为.avpreset的文件$ AVCONV_DATADIR (如果已设置),以及 $ HOME / .avconv,以及在配置时定义的datadir中(通常 前缀/共享/ ffmpeg), 以该顺序。

首先,ffmpeg 在上述目录中搜索名为codec_name - arg .avpreset的文件,其中codec_name是将对其应用预设文件选项的编解码器的名称。例如,如果您使用选择视频编解码器-vcodec libvpx并使用-pre 1080p,则它将搜索文件libvpx-1080p.avpreset.

如果找不到此类文件,则ffmpeg将在相同目录中搜索名为 arg .avpreset的文件。

6个例子

6.1视频和音频抓取

如果指定输入格式和设备,则ffmpeg可以直接捕获视频和音频。

ffmpeg -f oss -i / dev / dsp -f video4linux2 -i / dev / video0 /tmp/out.mpg

或使用ALSA音频源(单输入,卡ID为1)代替OSS:

ffmpeg -f alsa -ac 1 -i硬件:1 -f video4linux2 -i / dev / video0 /tmp/out.mpg

请注意,在使用任何电视查看器(例如Gerd Knorr的xawtv)启动ffmpeg之前,您必须激活正确的视频源和频道 您还必须使用标准混音器正确设置音频录制电平。

6.2 X11抓取

通过ffmpeg抓取X11显示

ffmpeg -f x11grab -video_size cif -framerate 25 -i:0.0 /tmp/out.mpg

X11服务器的display.screen号为0.0,与DISPLAY环境变量相同。

ffmpeg -f x11grab -video_size cif -framerate 25 -i:0.0 + 10,20 /tmp/out.mpg

X11服务器的display.screen号为0.0,与DISPLAY环境变量相同。10是抓取的x偏移,而20是抓取的y偏移。

6.3视频和音频文件格式转换

任何受支持的文件格式和协议都可以用作ffmpeg的输入:

例子:

  • 您可以使用YUV文件作为输入:

    ffmpeg -i / tmp / test%dY /tmp/out.mpg

    它将使用以下文件:

    /tmp/test0.Y、/tmp/test0.U、/tmp/test0.V、/tmp/test1.Y、/tmp/test1.U、/tmp/test1.V 等...

    Y文件使用的分辨率是U和V文件的两倍。它们是原始文件,没有标题。它们可以由所有不错的视频解码器生成。您必须使用-s 如果ffmpeg无法猜测,则选择该选项。

  • 您可以从原始YUV420P文件输入:

    ffmpeg -i /tmp/test.yuv /tmp/out.avi

    test.yuv是一个包含原始YUV平面数据的文件。每个帧由Y平面,U和V平面以及垂直和水平分辨率的一半组成。

  • 您可以输出到原始的YUV420P文件:

    ffmpeg -i mydivx.avi hugefile.yuv
  • 您可以设置几个输入文件和输出文件:

    ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg

    将音频文件a.wav和原始YUV视频文件a.yuv转换为MPEG文件a.mpg。

  • 您还可以同时进行音频和视频转换:

    ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2

    以22050 Hz的采样率将a.wav转换为MPEG音频。

  • 您可以同时编码为几种格式,并定义从输入流到输出流的映射:

    ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2

    将a.wav转换为64 kbit的a.mp2,并将其转换为128 kbit的b.mp2。'-map file:index'按照输出流的定义顺序指定用于每个输出流的输入流。

  • 您可以对解密的VOB进行转码:

    ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi

    这是一个典型的DVD翻录示例。输入为VOB文件,输出为MPEG-4视频和MP3音频的AVI文件。请注意,在此命令中,我们使用B帧,因此MPEG-4流是与DivX5兼容的,并且GOP大小为300,这意味着对于29.97fps的输入视频,每10秒一个帧。此外,音频流是MP3编码的,因此您需要通过传递--enable-libmp3lame启用LAME支持以进行配置。映射对于DVD转码以获得所需的音频语言特别有用。

    注意:要查看支持的输入格式,请使用ffmpeg -demuxers

  • 您可以从视频中提取图像,也可以从许多图像中创建视频:

    要从视频中提取图像:

    ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

    这将每秒从视频中提取一个视频帧,并将其输出到名为 foo-001.jpegfoo-002.jpeg等等。图像将被重新缩放以适应新的WxH值。

    如果仅要提取有限数量的帧,则可以将上述命令与-frames:v-t选项结合使用,或者与-ss结合使用,以从特定时间点开始提取。

    要从许多图像创建视频:

    ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi

    该语法foo-%03d.jpeg指定使用由三位数字组成的十进制数,并用零填充以表示序列号。它与C printf函数支持的语法相同,但是仅接受普通整数的格式才适用。

    导入图像序列时,-i还支持通过选择image2特定的-pattern_type glob选项在内部扩展类似shell的通配符模式(globbing)

    例如,要使用匹配glob模式的文件名创建视频 foo-*.jpeg

    ffmpeg -f image2 -pattern_type glob -framerate 12 -i'foo-*。jpeg'-s WxH foo.avi
  • 您可以在输出中放入许多相同类型的流:

    ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c复制-y test12.nut

    结果输出文件 test12.nut 将以相反的顺序包含来自输入文件的前四个流。

    强制CBR视频输出:

    ffmpeg -i myfile.avi -b 4000k-最小4000k-最大4000k -bufsize 1835k out.m2v

    四个选项lmin,lmax,mblmin和mblmax使用'lambda'单位,但是您可以使用QP2LAMBDA常数轻松地从'q'单位转换:

    ffmpeg -i src.ext -lmax 21 * QP2LAMBDA dst.ext

  • 说明:

  • 以下内容为机器翻译,有差错在所难免,但大体意思不会出错,原始文档请看这里: http://ffmpeg.org/ffmpeg.html#toc-Generic-options

标签: ffmpeg

相关文章

FFmpeg提取视频音频python将音频转文字

ffmpeg提取视频中的音频-pcmffmpeg -y -i input.mp4 -vn -codec copy out.m4a...

Ffmpeg为视频添加一个循环播放的背景音乐参数详解

ffmpeg -i out3.mp4 -i music3D.wav -filter_complex [1:a]aloop=loop=-1:s...

ffmpeg处理pcm转mp3的参数设置详解

MP3截取ffmpeg -y -i test.mp3 -ss 00:00:00 -t 00:00:03 -acodec&...

ffmpeg通过参数设置调整画质清晰度

ffmpeg通过参数设置调整画质清晰度

H.264有四种画质级别,分别是baseline, extended, main, high:1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和C...

ffmpeg 多个音频合并 混音 截取 拆分操作详解

1 多个mp3文件合并成一个mp3文件一种方法是连接到一起ffmpeg64.exe -i "concat:123.mp3|124.mp3" -acodec copy output....