ffmpeg入门教程之ffmpeg命令行手册(翻译)

文章目录

如何阅读官网命令行?

http://ffmpeg.org/documentation.html

可以看到贼多命令行,比如ffmpeg-all

在这里插入图片描述
先看下概述,找到感觉
在这里插入图片描述
如何查找命令行?

Ctrl+F
在这里插入图片描述
在这里插入图片描述

阅读本文的正确姿势Ctrl+F

ffmpeg

ffmpeg是一个非常快速的视频和音频转换器,也可以从实时音频/视频源抓取信息。

ffmpeg命令的语法结构

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

一般规则

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

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

输入参数 -i

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

举例如下:

#To set the video bitrate of the output file to 64 kbit/s: 
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
#To force the frame rate of the output file to 24 fps: 
ffmpeg -i input.avi -r 24 output.avi
#To force the frame rate of the input file (valid for raw formats only) 
#to 1 fps and the frame rate of the output file to 24 fps: 
ffmpeg -r 1 -i input.m2v -r 24 output.avi

流复制 Stream copy

流复制,需要通过向-codec选项提供复制参数来选择。它使ffmpeg省略了对指定流的解码和编码步骤,因此它只进行解封装和封装。它对于更改容器格式或修改容器级元数据非常有用。在这种情况下,上面的图表将简化为:

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

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

流选择 Stream selection

自动流选择 Automatic stream selection

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

它根据以下标准选择流:·

  • 对于视频,选择分辨率最高的流
  • 对于音频,选择有最多频道的流
  • 对于字幕,选择第一个字幕流,但有一个警告。输出格式的默认字幕编码器可以是基于文本的,也可以是基于图像的,并且只选择相同类型的字幕流。

在有几个相同类型的比特率相等的情况下,选择索引最低的流。无法自动选择数据流或附件流,只能使用-map将其包括在内。

手动流选择 Manual stream selection

当使用-map时,该输出文件中只包含用户映射的流,当然也有例外的场景。

-map

每个输入或输出url原则上可以包含任意数量的不同类型的流(视频/音频/字幕/附件/数据)。允许的流数目和/或类型受容器格式的限制。选择哪些输入的哪些流进行输出,要么自动完成,要么使用-map选项。

文件选择和流选择 [2:3]

若要引用选项中的输入文件,必须使用它们的索引(基于0的)。例如:第一输入文件为0,第二输入文件为1等。类似地,文件中的流由它们的索引引用。例如:2:3指第三个输入文件中的第四个流。

流选择 -vn/-an/-sn/-dn

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

下面的例子说明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选项,因此ffmpeg将自动为这两个文件选择流。

out1.mkv是一个高清格式文件,接受视频、音频和字幕流,因此ffmpeg将尝试选择每种类型中的一种。对于视频,它将从b.mp4中选择流0,因为它在所有输入视频流中具有最高的分辨率。对于音频,它将从b.mp4中选择流3,因为它有最多的频道。对于字幕,它将从b.mp4中选择流2,这是a.avib.mp4中的第一个字幕流。

输出2.wav只接受音频流,因此只选择b.mp4中的流3

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

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

对于第三个输出,音频流的codec选项(-c:a)已设置为复制,因此不会发生或可能发生解码-滤镜-编码操作。所选流的packets编码数据包从输入文件中传输,然后封装到输出文件中。
在这里插入图片描述

自动字幕流选择 automatic subtitles selection

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

虽然out1.mkv是一个接受字幕流的高清格式文件,但只能选择一个视频和音频流。C.mkv的字幕流是基于图像的,mkv 封装器的默认字幕编码器是基于文本的,因此字幕的转码操作预计会失败,因此不会选择流。

但是,在out2.mkv中,命令中指定了字幕编码器,因此,除了视频流之外,还选择了字幕流。out2.mkv-an禁用音频流的选择。

不加标签的滤镜输出 unlabeled filtergraph outputs

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

这里使用-filter_complex选项设置了一个滤镜,它由一个视频滤镜组成。overlay滤镜需要两个视频输入,但没有指定,因此使用了前两个可用的视频流,即a.avic.mkv的视频流。滤镜的输出面板没有标签,因此被传递到第一个输出文件out1.mp4。因此,将跳过视频流的自动选择,这将选择b.mp4中的视频流。具有最多数量频道的音频流,即b.mp4中的流3,会被自动选择。但是没有选择字幕流,因为MP4格式没有默认的字幕编码器注册,而且用户没有指定字幕编码器。

第二个输出文件out2.srt只接受基于文本的字幕流。因此,尽管可用的第一个字幕流属于c.mkv,但它是基于图像的,因此跳过了。选定的流,b.mp4中的流2,是第一个基于文本的字幕流。

带标签的滤镜输出labeled filtergraph outputs

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

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

overlay滤镜需要两个视频输入,使用前两个未使用的视频流。这些是来自a.avic.mkv的流。overlay 输出没有标签,因此它被传递到第一个输出文件out1.mp4,而不考虑-map选项的存在。

aresample滤镜被应用给第一个未使用的音频流,即a.avi的音频流。因为这个滤镜输出也没有标签,所以它也被映射到第一个输出文件。-an选项会抑制音频流的自动或手动选择,而不是从滤镜获取输出。这两个映射流都应在输出1.mp4中的映射流之前排序。

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

out3.mkv由来自色调滤镜克隆的视频输出和来自b.mp4的第一个音频流组成。

选项Options

流说明符 Stream specifiers

有些选项应用于每个流,例如比bitrate比特率 或编解码器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 检测到的流的顺序,除非 program ID也被指定,在这种情况下,它是基于程序中流的排序。

stream_type[:additional_stream_specifier]

stream_type是以下内容之一:vV,用于视频,a用于音频,s用于字幕,d用于数据,而t用于附件。v匹配所有视频流,V仅匹配未连接图片、视频缩略图或封面艺术的视频流。如果使用了附加流说明符,则它匹配具有和此类型以及附加流说明符匹配的流。否则,它与指定类型的所有流匹配。

通用选项 Generic options

这些选项在ff*工具上都可使用。
-L
显示版权信息
-h-?-help--help[arg]
显示帮助信息。可以指定可选参数来打印有关特定项目的帮助。如果未指定参数,则仅显示基本(非高级)工具选项。

arg的可能值包括:

long

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

full

打印完整的选项列表,包括encoders编码器、decoders解码器、demuxers解封装器、muxers封装器、滤镜等的共享和私有选项。

decoder=decoder_name

打印指定解码器的详细信息。使用-decoders选项打印所有解码器的列表。

encoder=encoder_name

打印指定编码器的详细信息。使用-encoders选项打印所有编码器。

demuxer=demuxer_name

打印指定demuxer 的详细信息。使用-format选项打印所有demuxersmuxers

muxer=muxer_name

打印指定muxer 的详细信息。使用-format选项打印所有demuxersmuxers

filter=filter_name

打印指定滤镜的详细信息。使用-filters选项打印所有滤镜。

bsf=bitstream_filter_name

打印指定位流滤镜的详细信息。使用-bsfs选项打印所有位流滤镜。

-version

显示版本信息

-formats

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

-demuxers

显示可用的demuxers解封装器

-muxers

显示可用的muxers封装器

-devices

显示可用的设备devices

-codecs

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

-decoders

显示可用的解码器decoders

-encoders

显示可用的编码器encoders

-bsfs

显示可用的位流滤镜bitstream filters

-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

Indicates that repeated log output should not be compressed to the first 
line and the "Last message repeated n times" line will be omitted. 

指示不应将重复日志输出压缩到第一行,并且…

level

指示日志输出应在每条消息行中添加一个[level]前缀。这可以用作日志着色,例如,当将日志转储到文件中时。

Flags can also be used alone by adding a ’+/-’ prefix to set/reset a single flag without affecting 
other flags or changing loglevel. When setting both flags and loglevel, a ’+’ separator 
is expected between the last flags value and before loglevel. 

也可以通过添加+/-前缀来单独使用标志,以设置/重置单个标志,而不影响其他标志或更改日志级别。设置“标志”和“LogLevel”时,在最后一个标志值和LogLevel之前都会有一个+分隔符。

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

quiet, -8

不输出任何信息

panic, 0

只显示可能导致进程崩溃的致命错误,例如断言失败。目前没有用于任何地方。

fatal, 8

只显示致命的错误。这些错误出现在进程绝对不能继续下去的时候。

error, 16

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

warning, 24

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

info, 32

在处理期间显示信息级别的消息,这是默认值。

verbose, 40

和信息级别一样,但是更冗长。

debug, 48

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

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

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

在不影响级别前缀标志或日志级别的当前状态的情况下启用重复日志输出的另一个示例:

ffmpeg [...] -loglevel +repeat

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

AVOptions

这些选项由libavformatlibavdevicelibavcodec库直接提供。要查看可用的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指定比特率640 k编码。第二个实例被降至2个信道,并使用编码器aac编码。使用输出流的绝对索引为它指定128 k的比特率。

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

注意:通过在选项名称前面加上v/a/s来指定每个流的AVOptions的旧的无文档化方法现在已经过时,并将很快被删除。

主要选项 Main options

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

为一个或多个流选择编码器(在输出文件之前使用时)或解码器(在输入文件之前使用)。codec或者c填值解码器/编码器的名称,codec或者c填值copy,表示(仅输出),以指示流不被重新编码。

举例:

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

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

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

复制所有流,除了将用libx264编码的第2个视频流和将用libvorbis编码的第138个音频流。

-t duration (input/output)

-to position (input/output)

当用作输入选项(在-i之前)时,限制从输入文件读取数据的持续时间。当用作输出选项时(在输出url之前),在输出持续时间达到持续时间后停止写入输出。duration 必须是时间期限规范,请参阅(ffmpeg-utils)在ffmpeg-utils(1)手册中的时间duration 部分。-to-t是相互排斥的,-t有优先权。

-fs limit_size (output)

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

-ss position (input/output)

当用作输入选项(-i之前)时,在此输入文件中定位位置。请注意,在大多数格式中,不可能精确地寻找,因此ffmpeg将在位置之前定位到最接近的点。当启用转码transcoding 和-精确定位-accurate_seek(默认)时,seek pointposition 之间的这个额外段将被解码和丢弃。当做流复制或当使用 -noaccurate_seek 的寻求时,它将被保存。

当用作输出选项时(在输出url之前),解码但丢弃输入,直到时间戳到达位置。位置必须是time duration规范,请参阅(ffmpeg-utils)在ffmpeg-utils(1)手册中的time duration部分。

-sseof position (input)

Like the -ss option but relative to the "end of file". 
That is negative values are earlier in the file, 0 is at EOF. 

-ss选项类似,但相对于"文件结束"。这是文件中较早的负值,0EOF

-itsoffset offset (input)

设置输入时间偏移。偏移量必须是 time duration 规范,参见FFmpeg-utils(1)手册中的 time duration 部分。将偏移添加到输入文件的时间戳中。指定正偏移意味着对应的流被延迟指定的持续时间。

-itsscale scale (input,per-stream)

重新调整输入时间戳。scale 用浮点数。

-timestamp date (output)

在文件格式容器中设置记录时间戳。日期必须是日期规格,请参阅FFmpeg-utils(1)手册中的日期部分。

-metadata[:metadata_specifier] key=value (output,per-metadata)

设置元数据 key/value对。
可以给出可选的元数据_说明符以在流、章节或程序上设置元数据。有关详细信息,请参见
-map_metadata文档。
此选项将覆盖带有-map_metadata的元数据集。也可以通过使用空的值来删除元数据。
例如,用于在输出文件中设置标题:

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

要设置第一个音频流的语言,请执行以下操作:

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

-dn (input/output)

作为输入选项,阻止文件的所有数据流被过滤或被自动选择或映射到任何输出。请参见-discard选项以单独禁用流。作为输出选项,禁用数据,即任何数据流的自动选择或映射。有关完整的手动控制,请参见-map选项。

-frame:d

设置要输出的数据帧数。

-frames[:stream_specifier] framecount (output,per-stream)

在framecount 个帧之后停止写入流。

-filter[:stream_specifier] filtergraph (output,per-stream)

创建指定的滤镜,并使用它来过滤流。必须具有相同类型的流的单个输入和单个输出。。有关filtergraph 语法的详细信息,请参见FFmpeg-filter手册。如果要创建具有多个输入和/或输出的filtergraphs,请参见-filter_complex选项。

-vf filtergraph (output)

创建filtergraph ,并使用它来过滤流。这是-filter:v的别名,请参见-filter选项。

表达式赋值 Expression Evaluation

当计算算术表达式的值时,FFmpeg使用通过libavutil/eval.h接口实现的内部公式求值程序。表达式可以包含一元二元运算符常量函数。两个表达式expr1expr2 可以合并以形成另一个表达式"expr1;expr2 "expr1expr2 依次进行计算,新的表达式计算为expr2的值。二元运算符:+、-、*、/、^。一元运算符:+,-

函数:

abs(x)

计算X的绝对值。

acos(x)

计算x的反余弦

asin(x)

计算x的反正弦

atan(x)

计算X的反正切。

atan2(x, y)

Compute principal value of the arc tangent of y/x. 

between(x, min, max)

如果min<=x<=max,则返回1,否则返回0

bitand(x, y)

bitor(x, y)

XY上计算按位和/或运算。在执行按位操作之前,将XY的求值结果转换为整数。请注意,转换为整数再转换回浮点会失去精度。注意大数的意外结果(2^53和更大)。

ceil(expr)

将表达式expr的值向上舍入到最近的整数。例如,"ceil(1.5)“是"2.0”。

clip(x, min, max)

Return the value of x clipped between min and max. 

cos(x)

计算X的余弦。

cosh(x)

Compute hyperbolic cosine of x. 

eq(x, y)

如果XY相等,则返回1,否则返回0

exp(x)

Compute exponential of x (with base e, the Euler’s number). 

计算x的指数(以e为基数,欧拉数)。

floor(expr)

将表达式expr 的值向下舍入到最近的整数。例如,“floor(-1.5)”为“-2.0”。

gauss(x)

Compute Gauss function of x, corresponding to exp(-x*x/2) / sqrt(2*PI). 

计算x的高斯函数,对应于exp(-x*x/2)/sqrt(2*PI)

gcd(x, y)

Return the greatest common divisor of x and y. If both x and y are 0 or either 
or both are less than zero then behavior is undefined. 

返回xy的最大公因子。如果xy都是0,或者两者都小于0,则…。

gt(x, y)

如果x>y,则返回1,否则为0

gte(x, y)

如果x>=y,则返回1,否则返回0

hypot(x, y)

此函数类似于同名的c函数;它返回“sqrt(x*xy*y)”,即直角边长度为xy的直角三角形的斜边长度,或点(x,y)原点的距离。

if(x, y)

Evaluate x, and if the result is non-zero return the result of the evaluation of y, 
return 0 otherwise. 

if(x, y, z)

Evaluate x, and if the result is non-zero return the evaluation result of y, 
otherwise the evaluation result of z. 

ifnot(x, y)

Evaluate x, and if the result is zero return the result of the evaluation of y, 
return 0 otherwise. 

ifnot(x, y, z)

Evaluate x, and if the result is zero return the evaluation result of y, 
otherwise the evaluation result of z. 

isinf(x)

如果x+/-无穷大,则返回1.0,否则返回0.0

isnan(x)

如果XNaN(not a number非数字),则返回1.0,否则为0.0

ld(var)

Load the value of the internal variable with number var, which was previously stored with
st(var, expr). The function returns the loaded value. 

lerp(x, y, z)

Return linear interpolation between x and y by amount of z. 

xy之间通过z的量返回线性插值。

log(x)

计算x的自然对数。

lt(x, y)

如果x<y,则返回1,否则为0

lte(x, y)

如果x<=y,则返回1,否则返回0

max(x, y)

返回xy中的最大值。

min(x, y)

返回xy中的最小值。

mod(x, y)

计算x%y

not(expr)

如果expr0,则返回1.0,否则返回0.0

pow(x, y)

计算x^y

print(t)

print(t, l)

loglevel 打印表达式t的值。如果未指定l,则使用默认日志级别。返回打印的表达式的值。

random(x)

Return a pseudo random value between 0.0 and 1.0. 
x is the index of the internal variable which will be used to save the seed/state. 

返回0.01.0之间的伪随机值。

round(expr)

将表达式expr的值四舍五入。例如,"round(1.5)“是"2.0”。

sgn(x)

Compute sign of x. 

sin(x)

计算x的正弦。

sinh(x)

Compute hyperbolic sine of x. 

tan(x)

计算x的正切

tanh(x)

Compute hyperbolic tangent of x. 

-pix_fmt

设置像素格式。如果所设置的像素格式不能被设置成功,

-framerate

设置抓取帧速率。默认为ntsc,对应的帧速率为30000/1001

-loop

设置循环输出的次数。使用-1表示不循环,使用0表示无限循环(默认)。

-accurate_seek (input)

此选项使用-ss选项启用或禁用输入文件中的精确查找。默认启用,所以转码时seek准确。使用
-noaccurate_seek禁用它,这可能很有用,例如在复制一些流并对其他流进行转码时。

anullsrc

空音频源返回未处理的音频帧。它主要用作模板,在分析/调试工具中使用,或者作为忽略输入数据的滤镜的来源(例如sox synth 滤镜)。
接受以下选项:

channel_layout, cl
指定频道布局,可以是表示频道布局的整数或字符串。channel_layout的默认值是“立体声”。 检查libavutil/channel_layout.c中的channel_layout_map定义,了解字符串和通道布局值之间的映射。

sample_rate, r

指定采样速率,默认值为44100

nb_samples, n

设置每个请求帧的样本数。

duration, d

设定源音频的持续时间。有关可接受的语法,请参见ffmpeg-utils(1)手册中的(ffmpeg-utils)持续时间部分。 如果未指定,或者表示的持续时间为负,则音频能生成。

pad

向输入图像添加填充,并将原始输入放置在提供的x,y坐标处。 它接受以下参数:

width, w
height, h

为添加了填充的输出图像的大小指定一个表达式。如果宽度或高度的值为0,则相应的输入大小用于输出。 宽度表达式可以引用高度表达式设置的值,反之亦然。 宽度和高度的默认值为0

x
y

指定输入图像在填充区域内相对于输出图像上/左边框的偏移量。 x表达式可以引用y表达式设置的值,反之亦然。 xy的默认值是0。 如果xy的计算结果为负数,它们将被更改,以便输入图像在填充区域居中。

color
指定填充区域的颜色。有关此选项的语法,请查看ffmpeg-utils手册中的(ffmpeg-utils)“Color”一节。 颜色的默认值是“黑色”。

eval
指定何时计算宽度、高度、x和y表达式。 它接受以下值:

‘init’
仅在滤镜初始化期间或处理命令时计算表达式一次。

‘frame’
计算每个传入帧的表达式。

默认值为“init”。

aspect
填充到纵横比而不是分辨率。
宽度、高度、x和y选项的值是包含下列常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

in_w,in_h一样。

out_w
out_h

宽度和高度表达式指定的输出宽度和高度(填充区域的大小)。

ow
oh

out_wout_h一样。

x
y

x和y表达式指定的x和y偏移量,如果未指定,则为NAN

a
iw / ih相同

sar
input sample aspect ratio

dar
输入显示纵横比,它与(iw / ih) * sar相同

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“YUV 422 p ”, hsub是2,vsub是1

滤镜filtering

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

简单滤镜Simple filtergraphs

简单的滤镜是那些仅有一个输入和输出的,两者都是相同类型的。它们可以简单地在解码和编码之间插入额外的步骤:

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

简单的滤镜被配置为每流过滤器选项(分别用于视频和音频的-vf-af别名)。例如,一个简单的视频滤镜图可以如下所示:

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

复杂滤镜Complex filtergraphs

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

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

复杂滤镜配置为-filter_complex选项。请注意,此选项是全局的,因为复杂的Filtergram本质上不能明确地与单个流或文件相关联。-lavfi选项等价于-filter_complex。复杂过滤器的一个简单例子是覆盖过滤器,它有两个视频输入和一个视频输出,其中一个视频覆盖在另一个视频上。它的音频对应是amix 滤镜。

-filter_complex filtergraph (global)

定义复杂的滤镜,即具有任意数量的输入和/或输出。对于简单滤镜,具有一个输入和一个输出,类型相同-请参阅-filter选项。

输入链接标签必须使用[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]指的是第一输入文件中的第一视频流,其链接到overlay滤镜的第一(主)输入。类似地,第二输入中的第一视频流链接到overlay滤镜的第二输入。

假设每个输入文件中只有一个视频流,我们可以省略输入标签,因此上面的内容相当于

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

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

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

覆盖 overlay

将一个视频叠加在另一个视频上。它需要两个输入,并有一个输出。第一个输入主视频,第2个视频是覆盖物。、
它接受以下参数,所接受选项的描述如下:

x

y

在主视频上设置覆盖视频的x和y坐标。对于这两个表达式,默认值为“0”。如果表达式无效,则将其设置为一个巨大的值(意味着覆盖将不会显示在输出视频的可见区域内)。

format

设置输出视频的格式。它接受以下值:

yuv420

force YUV420 output

yuv422

force YUV422 output

yuv444

force YUV444 output

rgb

force packed RGB output

gbrp

force planar RGB output

auto

automatically pick format

Default value is yuv420.

The x, and y expressions can contain the following parameters:

main_w, W

main_h, H

主输入宽度和高度。

overlay_w, w

overlay_h, h

覆盖输入的宽度和高度。

举例:

在主视频右下角的10个像素处绘制覆盖:

overlay=main_w-overlay_w-10:main_h-overlay_h-10

使用命名选项,上面的示例如下:

overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10

在输入的左下角插入一个透明的png logo,使用ffmpeg工具的-filter_Complex选项:

ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output

使用ffmpeg工具插入2个不同的透明PNG logo(第2个logo在右下角):

ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output

overlay跑马灯效果

从时间2开始,从屏幕的左侧到右顶部开始显示跑马灯效果覆盖:

overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0

缩放 scale

使用libswscale库缩放(调整大小)输入视频。scale 滤镜通过改变输出采样宽高比,迫使输出显示宽高比与输入相同。如果输入图像格式不同于下一个滤镜所请求的格式,则scale滤镜将输入转换为所请求的格式。

该滤镜接受以下选项,或libswscale scaler支持的任何选项。有关scaler选项的完整列表,请参见(FFmpeg-scaler)FFmpeg-scaler手册。

width, w

height, h

设置输出视频尺寸表达式。默认值是输入的尺寸。

w和h选项的值是包含以下常量的表达式:

in_w in_h

输入的宽高

iw ih a

输入的宽高

out_w out_h ow oh

指定输出的缩放后的宽高

sar

输入样本高宽比

dar

输入显示高宽比。根据(iw/ih)*sar计算。

hsub vsub

水平和垂直输入色度子采样值。例如,对于像素格式"yuv422p" hsub为2,vsub为1。

ohsub ovsub

水平和垂直输出色度子采样值。例如,对于像素格式"yuv422p" hsub为2,vsub为1。

举例:

将输入视频缩放至200x100的大小

scale=w=200:h=100

这相当于:

scale=200:100

或者:

scale=200x100

指定输出大小的大小缩写:

scale=qcif

QCIF是常用的标准化图像格式,意为四分之一公共中间格式(Quarter Common Intermediate Format)。在H.323协议簇中,规定了视频采集设备的标准采集分辨率。CIF = 352×288像素,规定了视频采集设备的标准采集分辨率。QCIF = 176×144像素

其也可以写成:

scale=size=qcif

将输入扩大到2倍:

scale=w=2*iw:h=2*ih

如同下面:

scale=2*in_w:2*in_h

按强制隔行缩放比例缩放输入到2X:

scale=2*iw:2*ih:interl=1

将输入缩放到一半大小:

scale=w=iw/2:h=ih/2

增加宽度,并将高度设置为相同大小:

scale=3/2*iw:ow

Seek Greek harmony:

scale=iw:1/PHI*iw
scale=ih*PHI:ih

增加高度,并将宽度设置为高度的3/2:

scale=w=3/2*oh:h=3/5*ih

增大尺寸,使其尺寸成为色度子采样值的倍数:

scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"

将宽度增加到最大500像素,保持与输入相同的宽高比:

scale=w='min(500\, iw*3/2):h=-1'

通过合并scale和setsar制作像素正方形:

scale='trunc(ih*dar):ih',setsar=1/1

通过合并scale和setsar制作像素正方形,确保得到的分辨率均匀(某些编解码器需要):

scale='trunc(ih*dar/2)*2:trunc(ih/2)*2',setsar=1/1

drawtext

使用libfreetype库从视频顶部的指定文件中绘制文本字符串或文本。要启用此滤镜的编译,需要 --enable-libfreetype配置ffmpeg。要启用默认字体回退和字体选项,需要使用--enable-libfontconfig配置ffmpeg。要启用text_shaping选项,您需要使用 --enable-libfribidi配置ffmpeg。

它接受以下参数:

box

Used to draw a box around text using the background color. 
The value must be either 1 (enable) or 0 (disable). The default value of box is 0. 

用于使用背景颜色绘制围绕文本的框。该值必须为1(启用)或0(禁用)。框的默认值为0。

boxborderw

Set the width of the border to be drawn around the box using boxcolor. The default value of boxborderw is 0. 

设置边框的宽度。boxborderw的默认值为0。

boxcolor

The color to be used for drawing box around text. 
For the syntax of this option, check the (ffmpeg-utils)"Color" section in the ffmpeg-utils manual. 
The default value of boxcolor is "white". 

用于在文本周围绘制框的颜色。对于此选项的语法,请参考FFmpeg-utils手册中的(FFmpeg-utils)“Color"部分。boxcolor的默认值为"白色”。

line_spacing

Set the line spacing in pixels of the border to be drawn around the box using box. 
The default value of line_spacing is 0. 

borderw

Set the width of the border to be drawn around the text using bordercolor. The default value of borderw is 0. 

设置要在文本周围绘制的边框宽度。borderw的默认值为0。

bordercolor

设置用于绘制文本周围边框的颜色。有关此选项的语法,请检查ffmpeg-utils手册中的(ffmpeg-utils)“color”部分。边框颜色的默认值是“black”。

expansion

选择文本的展开方式。可以是none、strftime(已弃用)或normal(默认)。有关详细信息,请参见下面的文本扩展部分。

basetime

Set a start time for the count. Value is in microseconds. Only applied in the deprecated strftime expansion mode. 
To emulate in normal expansion mode use the pts function, 
supplying the start time (in seconds) as the second argument. 

fix_bounds

如果为true,检查并修复text坐标,以避免裁剪。

fontcolor

用于绘制字体的颜色。对于此选项的语法,请检查FFmpeg-utils手册中的(FFmpeg-utils)“Color"部分。fontcolor的默认值为"black”。

fontcolor_expr

字符串,其展开方式与文本相同,以获得动态字体颜色值。默认情况下,此选项具有空值,且未处理。设置此选项时,它将覆盖fontcolor选项。

font

用于绘制文本的字体系列。默认情况下没有。

fontfile

要用于绘制文本的字体文件。必须包含路径。如果fontconfig支持被禁用,此参数是必需的。

alpha

绘制应用alpha混合的文本。值可以是介于0.01.0之间的数字。表达式也接受相同的变量x,y。默认值为1。请参阅fontcolor_expr

fontsize

用于绘制文本的字体大小。fontsize 的默认值为16

text_shaping

如果设置为1,则尝试在绘制文本之前对文本进行形状改变(例如,反转右到左文本的顺序并连接阿拉伯字符)。否则,只需按给定的方式绘制文本即可。默认情况下1(如果支持)。

ft_load_flags

用于加载字体的标志。这些标志映射了libfreetype支持的相应标志,它们是以下值的组合:

default
no_scale
no_hinting
render
no_bitmap
vertical_layout
force_autohint
crop_bitmap
pedantic
ignore_global_advance_width
no_recurse
ignore_transform
monochrome
linear_design
no_autohint

默认值为"default"。有关详细信息,请查阅 FT_LOAD_* libfreetype flags.的文档。

shadowcolor

绘制文本后面的阴影的颜色。对于此选项的语法,请检查FFmpeg-utils手册中的(FFmpeg-utils)“Color"部分。shadowcolor 的默认值为"black”。

shadowx shadowy

相对于文本的位置,文本阴影位置的xy偏移。它们可以是正值,也可以是负值。两者的默认值都是“0”。

start_number

n/frame_num变量的起始帧编号。默认值为"0"。

tabsize

The size in number of spaces to use for rendering the tab. Default value is 4. 

timecode

以“hh:mm:ss[:;.]ff”格式设置初始时间码表示形式。它可以与文本参数一起使用,也可以不使用文本参数。必须指定timecode_rate 选项。

timecode_rate, rate, r

Set the timecode frame rate (timecode only). Value will be rounded to nearest integer. 
Minimum value is "1". Drop-frame timecode is supported for frame rates 30 & 60. 

设置时间码帧率(仅时间码)。值将四舍五入到最近的整数。最小值是"1"。

tc24hmax

If set to 1, the output of the timecode option will wrap around at 24 hours. Default is 0 (disabled). 

text

要绘制的文本字符串。文本必须是UTF-8编码字符的序列。如果没有使用参数textfile指定文件,则此参数是必需的。

textfile

包含要绘制文本的文本文件。文本必须是utf-8编码字符的序列.如果参数text没有指定文本字符串,则此参数是必须的。如果同时指定了texttextfile,则会引发错误。

reload

如果设置为1textfile 将在每个帧之前重新加载。确保原子地更新它,否则它可能被部分读取,甚至失败。

x y

指定将在视频帧中绘制文本的偏移量的表达式。它们相对于输出图像的上/左边界。xy的默认值为“0”。有关接受的常量和函数的列表,请参见下面。xy的参数是包含下列常量和函数的表达式:

dar

输入显示宽高比,与(w/h)*sar相同。

sar

输入样本宽高比。

hsub vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为2,vsub为1。

line_h, lh

每一行文字的高度。

main_h, h, H

输入高度

main_w, w, W

输入宽度

n

输入的帧数,从0开始

rand(min, max)

返回包含在最小值和最大值之间的随机数

t

timestamp expressed in seconds, NAN if the input timestamp is unknown 

时间戳以秒表示,如果输入时间戳为unknown ,则表示为NAN,not a number

text_h, th

文本的高度

text_w, tw

文本的宽度。

x y

绘制文本的xy偏移坐标。这些参数允许xy表达式相互引用,因此您可以指定y=x/dar

pict_type

当前帧的图片类型的一个字符描述。

pkt_pos

当前数据包packet在输入文件或流中的位置(以字节为单位,从输入的开始)。值为-1表示此信息不可用。

pkt_duration

当前数据包packet的持续时间,以秒为单位。

packet概念参考ffmpeg入门教程中编解码相关文章https://www.jianshu.com/p/042c7847bd8a

pkt_size

当前数据包 packet的大小(以字节为单位)。

drawtext举例

用字体FreeSerif绘制“Test Text”,使用可选参数的默认值。

drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"

在位置x=100和y=50(从屏幕左上角开始计数)时,用FreeSerif 字体绘制“Test Text”,文本为黄色,周围有红色框。文本和框的不透明度均为20%。

drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
          x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"

请注意,如果参数列表中不使用空格,则不需要双引号。在视频帧的中心显示文本:

drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"

在随机位置显示文本,每隔30秒切换到新位置:

drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,
rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"

在视频帧的最后一行中显示从右向左滑动的文本行,

drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"

从视频帧底部显示文件CREDITS 的内容并向上滚动。

drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"

在输入视频的中心绘制一个绿色字母"g"。将文字基线放置在屏幕高度的一半。

drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"

每3秒显示文本1秒:

drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"

使用fontconfig设置字体。请注意,冒号需要转义。

drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'

打印实时编码的日期(参见strftime(3)):

drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}'

文本淡入淡出(出现/消失):

#!/bin/sh
DS=1.0 # display start
DE=10.0 # display end
FID=1.5 # fade in duration
FOD=5 # fade out duration
ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%
{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) 
+ (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }"

水平对齐多个单独的文本。请注意,max_glyph_a和字体大小值包含在y偏移量中。

drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a,
drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a

setdar, setsar

setdar滤镜设置滤镜输出视频的显示纵横比。 这是通过根据以下等式改变指定的样本(又名像素)纵横比来实现的:

DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR

请记住,setdar滤镜不会修改视频帧的像素尺寸。此外,由该滤镜设置的显示纵横比可以被滤镜链中的后续滤镜改变,例如在缩放的情况下或者如果应用了另一个“setdar”或“setsar”滤镜。 setsar滤镜设置滤镜输出视频的样本(即像素)纵横比。 注意,作为应用该滤镜的结果,输出显示纵横比将根据上面的等式而改变。 请记住,setsar滤镜设置的样本纵横比可能会被滤镜链中的后续滤镜更改,例如,如果应用了另一个“setsar”或“setdar”滤镜。 它接受以下参数:

r, ratio, dar (setdar only), sar (setsar only)

该参数可以是浮点数字符串、表达式或num:den形式的字符串,其中numden是纵横比的分子和分母。如果未指定参数,则假定值为“0”。在使用“num:den”形式的情况下,应该对:字符进行转义

max
设置最大整数值,用于在将表示的纵横比减少到有理数时表示分子和分母。默认值为100

参数sar是包含以下常数的表达式:

E, PI, PHI
这些是数学常数e(欧拉数)、pi(希腊圆周率)和phi(黄金比例)的近似值。

w, h
输入宽度和高度

a
w / h一样。

sar
输入样本纵横比。

dar

输入显示纵横比。与(w / h) * sar相同。

hsub, vsub
水平和垂直色度子采样值。例如,对于像素格式“YUV 422 p ”, hsub为2,vsub为1。

concat

连接音频和视频流,将它们一个接一个地连接在一起。

滤镜处理同步视频和音频流的片段。所有片段必须具有相同数量的每种类型的流,这也是输出的流的数量。

该滤镜接受以下选项:

n
设置分段数。默认值为2

v
设置输出视频流的数量,也就是每个片段中视频流的数量。默认值为1

a
设置输出音频流的数量,也就是每个片段中音频流的数量。默认值为0

unsafe
激活不安全模式:如果段具有不同的格式,不要失败。

滤镜有v+a输出:首先是v视频输出,然后是a音频输出。

如果有nx(v+a)个输入:首先是第一段的输入,顺序与输出相同,然后是第二段的输入,依此类推。

由于包括编解码器帧大小或草率创作在内的各种原因,相关流并不总是具有完全相同的duration 。出于这个原因,相关的同步流(例如,视频及其音频轨道)应该立即连接。concat 滤镜将使用每个片段中最长流的duration (最后一个片段除外),并且如果需要,用静音填充较短的音频流。

为使该滤镜正常工作,所有数据段必须从时间戳0开始。

所有相应的流在所有段中必须具有相同的参数;滤镜将自动为视频流选择通用像素格式,并为音频流选择通用采样格式、采样速率和通道布局,但其他设置(如分辨率)必须由用户明确转换。

不同的帧速率是可接受的,但是会导致输出可变帧速率;确保配置输出文件来处理它。

示例:

连接一个开头、一集和一个结尾,都是双语版本(流0中的视频,流1和2中的音频):

ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
  '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
   concat=n=3:v=1:a=2 [v] [a1] [a2]' \
  -map '[v]' -map '[a1]' -map '[a2]' output.mkv

连接两个部分,分别处理音频和视频,使用(a)影片源,并调整分辨率:

movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ;
movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ;
[v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]

请注意,如果音频和视频流在第一个文件中的duration不完全相同,将会在拼接处发生去同步。

-r[:stream_specifier] fps (input/output,per-stream)

设置帧速率(Hz值、分数或缩写)。

作为输入选项,忽略文件中存储的任何时间戳,而是假设恒定帧速率fps来生成时间戳。这与用于某些输入格式(如image2v4l2)的-framerate选项不同(在早期版本的FFmpeg中它是相同的)。如果有疑问,使用-framerate代替输入选项-r

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

-vcodec codec (output)

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

-preset type

配置预设。根据图像的一般类型进行一些自动设置。

none
不使用预设。

default
使用默认编码器。

picture
数码照片,如肖像,内景

photo
自然光线下的户外照片

drawing
手绘或线描,具有高对比度细节

icon
小尺寸彩色图像

text
Text-like

crop

将输入视频裁剪到给定的尺寸。 它接受以下参数:

w, out_w

输出视频的宽度。默认为iw。该表达式仅在过滤器配置期间或发送“w”或“out_w”命令时计算一次。

h, out_h

输出视频的高度。默认为ih。该表达式仅在滤波器配置期间或发送“h”或“out_h”命令时计算一次。

x

输出视频左边缘在输入视频中的水平位置。默认为(in_w-out_w)/2。这个表达式是逐帧计算的。

y

输出视频顶部边缘在输入视频中的垂直位置。默认为(in_h-out_h)/2。这个表达式是逐帧计算的。

keep_aspect

如果设置为1,将通过更改输出样本纵横比强制输出显示纵横比与输入相同。默认为0

exact

启用精确裁剪。如果启用,二次抽样视频将按照指定的宽度/高度/x/y进行裁剪,并且不会四舍五入到最近的较小值。默认为0。 out_wout_hxy参数是包含以下常数的表达式:

x
y

x和y的计算值。对每个新帧进行计算。

in_w
in_h

输入宽度和高度。

iw
ih

和in_w,in_h一样。

out_w
out_h

输出(裁剪后)的宽度和高度。

ow
oh

out_wout_h一样

a

iw / ih相同

sar

input sample aspect ratio
输入样本纵横比

dar

input display aspect ratio, it is the same as (iw / ih) * sar
输入显示纵横比,它与(iw / ih) * sar相同

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“YUV 422 p ”, hsub2vsub1

n

输入帧的编号,从0开始。

pos

输入帧在文件中的位置,如果未知,则为NAN

t

以秒表示的时间戳。如果输入时间戳未知,则为NAN。

out_w的表达式可能取决于out_h的值,out_h的表达式可能取决于out_w,但它们不能取决于xy,因为xy是在out_wout_h之后计算的。

xy参数指定输出(非裁剪)区域左上角位置的表达式。对每一帧进行计算。如果评估值无效,则近似为最接近的有效值。 x的表达式可能依赖于yy的表达式可能依赖于x

举例

在位置(12,34)裁剪尺寸为100x100的区域。

crop=100:100:12:34

使用命名选项,上面的示例变成:

crop=w=100:h=100:x=12:y=34

以100x100的尺寸裁剪中央输入区域:

crop=100:100

将中央输入区域裁剪为输入视频的2/3大小:

crop=2/3*in_w:2/3*in_h

裁剪输入视频中心方块:

crop=out_w=in_h
crop=in_h

将矩形的左上角放置在位置100:100,右下角对应于输入图像的右下角。

crop=in_w-100:in_h-100:100:100

从左右边框裁剪10个像素,从上下边框裁剪20个像素

crop=in_w-2*10:in_h-2*20

仅保留输入图像的右下四分之一:

crop=in_w/2:in_h/2:in_w/2:in_h/2

Crop height for getting Greek harmony:

crop=in_w:1/PHI*in_w

Apply trembling effect:

crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):
(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)

根据时间戳应用不稳定的相机效果:

crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):
(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"

根据y的值设置x:

crop=in_w/2:in_h/2:y:10+10*sin(n/10)

force_original_aspect_ratio

如果需要保持原始的宽高比,可以减小或增加输出视频的宽度或高度。取值如下:

‘disable’
按指定比例缩放视频,并禁用此功能。

‘decrease’
如果需要,输出视频尺寸会自动减小

‘increase’
如果需要,输出视频尺寸会自动增加

此选项的一个有用实例是,当您知道特定设备的最大允许分辨率时,您可以使用此选项将输出视频限制为该分辨率,同时保持纵横比。比如设备A允许1280x720播放,你的视频是1920x800。使用此选项(将其设置为decrease)并在命令行中指定1280x720,将产生1280x533的输出。 请注意,这与为w或h指定-1是不同的,您仍然需要指定输出分辨率以使该选项工作。

amerge

将两个或多个音频流合并成一个多声道流。

接受以下选项:

inputs

设置输入数量。默认值为2

如果输入的通道布局是不相交的,因此是兼容的,则输出的通道布局将被相应地设置,并且通道将根据需要被重新排序。如果输入的通道布局不是不相交的,则输出将具有第一个输入的所有通道,然后是第二个输入的所有通道,按此顺序,输出的通道布局将是与通道总数相对应的默认值。

例如,如果第一个输入在2.1中(FL+FR+LF),第二个输入是FC+BL+BR,则输出将在5.1中,通道按以下顺序排列:a1、a2、b1、a3、b2、b3 (a1是第一个输入的第一个通道,b1是第二个输入的第一个通道)。

另一方面,如果两个输入都是立体声,输出通道将按默认顺序排列:a1、a2、b1、b2,通道布局将任意设置为4.0,可能是也可能不是预期值。

所有输入必须具有相同的采样速率和格式。

如果输入没有相同的duration,输出将以最短的duration停止。

举例:

将两个单声道文件合并成一个立体声流:

amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
Multiple merges assuming 1 video stream and 6 audio streams in input.mkv:
ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" 
-c:a pcm_s16le output.mkv

amix

将多个音频输入混合成一个输出。

请注意,此滤镜仅支持 float samples(amergepan 音频滤镜支持多种格式)。如果amix输入有整数samples ,那么将自动插入一个样本来执行float 样本的转换。

举例:

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex
 amix=inputs=3:duration=first:dropout_transition=3 OUTPUT

将3个输入音频流混合成一个输出,持续时间与第一个输入相同,丢失转换时间为3秒。

它接受以下参数:

inputs
输入的数量。如果未指定,则默认为2。

duration
如何确定流的duration

longest
最长输入的duration。(默认)

shortest
最短输入的duration

first
第一输入的duration。

dropout_transition

当输入流结束时,volume renormalization 的过渡时间(秒)。默认值为2秒。

weights

按顺序指定每个输入音频流的权重。每一个权重都用空格隔开。默认情况下,所有输入都具有相同的权重。

normalize

始终缩放输入,而不是只对samples求和。如果禁用此选项,在此滤镜过滤之前或之后输入未被标准化,请小心heavy clipping。默认情况下是启用的。

-preset

该选项列举了从非常快(最佳速度)到非常慢(最佳质量)的一系列选择。

‘veryfast’
‘faster’
‘fast’
‘medium’
‘slow’
‘slower’
‘veryslow’

-crf

为恒定质量(无比特率目标)和受限质量(有最大比特率目标)模式设置质量/大小权衡。有效范围是063,数字越大表示质量越低,输出越小。仅在设置时使用;默认情况下,仅使用比特率目标。

H264

-profile

‘unknown’
‘baseline’
‘main’
‘high’

movie

从视频容器中读取音频和/或视频流。 它接受以下参数:

seek_point, sp

为单位指定seek点。帧将从该seek点开始输出。该参数是用av_strtod计算的,因此该数值可能以is后缀作为后缀。默认值为“0”。

从. avi中的AVI文件开始处跳过3.2秒,将其覆盖在标签为“in”的输入之上:

movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
[in] setpts=PTS-STARTPTS [main];
[main][over] overlay=16:16 [out]

在这里插入图片描述
本文将持续更新,敬请关注

欢迎联系、指正、批评

Github:https://github.com/AnJiaoDe

CSDN:https://blog.csdn.net/confusing_awakening

OpenCV入门教程:https://blog.csdn.net/confusing_awakening/article/details/113372425

ffmpeg入门教程:https://blog.csdn.net/confusing_awakening/article/details/102007792

微信公众号
这里写图片描述

QQ群

这里写图片描述

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值