FFmpeg 常用 filters
原创FFmpegFFmpeg大约 5 分钟...
参考:
某个 filter 的使用方式可以参考官方文档,或者用命令行查看,如下:
ffmpeg -h filter=filter_name
filter 的参数用:
分隔。可以省略参数键, 按顺序传参, 也可以用键=值
的方式传,如下:
trim=5:10
trim=start=5:end=10
pad=width=640:height=480:x=10:y=10:color=0x000000:color_space=bt601
视频 (Video Filters)
trim
从输入流中裁剪一段连续的部分作为输出流。
参数
start
: 指定要保留部分的开始时间,这个时间戳的帧会作为输出流的第一帧。end
: 指定后面要丢弃部分的开始时间,这个时间戳的所对应的前一帧会作为输出流的最后一帧。(其实就是截取[start,end)
这一段左闭右开区间的内容作为输出流)start_pts
: 和start
作用一样,只是这里设置的单位是时间线而不是秒。end_pts
: 和end
作用一样,只是这里设置的单位是时间线而不是秒。duration
: 输出的最大时长,单位是秒。start_frame
: 指定要截取的起始帧。end_frame
: 指定要截取的结束帧,该帧的前一帧会作为输出流的最后一帧。
示例
# 保留视频的第二分钟。索引从 0 开始,第60秒 即为第二分钟的第 1 秒,第120 秒的前一帧作为输出流的最后一帧。
ffmpeg -i INPUT -vf trim=60:120
# 只保留第一秒。
ffmpeg -i INPUT -vf trim=duration=1
注意: 这个 trim 是 videoFilter, 只处理视频流, 不能直接用来做视频裁剪。
pad
为输入的图形添加内边距,并且将原始的输入流放在指定的 x,y 坐标处。
参数
width, w
:height, h
:
指定添加过 paddings 后的输出图形的宽度和高度。如果宽或高设置为 0,则取其输入流相应的宽或高。widht
和height
默认值为0
。x
:y
:
指定原始图像在添加了 paddings 后的输出图像中的位置坐标。color
:
指定 pad 区域的颜色,默认为black
。eval
:
指定计算width, height, x, y
表达式的时机。默认init
。init
: 仅在该 filter 初始化期间或处理命令时计算一次表达式。frame
: 对每一个输入帧进行计算。
aspect
:
使用宽高比而不是分辨率。
width, height, x, 和 y 选项是包含以下常量的表达式:
in_w
:in_h
:iw
:ih
:
输入视频的宽度和高度。out_w
:out_h
:ow
:oh
:
输出视频的宽度和高度(加过 pad 后的整个区域)。由width
和height
表达式指定。x
:y
:
由x
和y
表达式指定的 x 和 y 偏移量,或者如果没有指定则为 NAN。
说明
pad 可以用来添加边框,或者添加内边距。
参数 width, height 必须 >= 输入的 width, height。否则会报错 Padded dimensions cannot be smaller than input dimensions.
。
可以理解为,pad 是指定输出后的尺寸,如果该尺寸大于输入尺寸,则多出的部分将被填充为指定的颜色。如果尺寸一致,则不会填充。如果指定的输出尺寸小于输入尺寸,则会报错。
示例
# 输入的 input_01.mp4 尺寸为 1920*1080, 将其输出为 1920*1280, 则高度上多出了 200 需要填充颜色。
# 下面参数中 x=0, y=(oh-ih)/2, y的值为 (1280-1080)/2 = 100 。
# 最终输出正好是竖直方向居中,上下各填充100高度的红色。
ffmpeg4 -i input_01.mp4 \
-filter_complex "pad=1920:1280:0:(oh-ih)/2:red" \
-y output_01.mp4
多媒体 (Multimedia Filters)
split, asplit
将输入的流拆分为多个相同的输出流。
asplit
用于音频输入,split
用于视频输入。
该 filter 接收一个参数指定输出流的数量。如果未指定,默认为 2。
这里的拆分就是分流复制,不是截断那种拆分,截取用 trim。
示例
# 将输入流 [in] 拆分为 2 个输出流 [out1] 和 [out2]
[in] split [out0][out1]
# 要创建 3个及以上的输出流,需要指定输出流的数量
[in] asplit=3 [out0][out1][out2]
concat
连接音频和视频流,将它们一个接一个的合并。
该 filter 适用于同步视频和音频流的片段。所有片段每种流的数量必须相同,这也是最终输出流的数量。
参数
n
: 片段数量,默认 2。v
: 输出视频流的数量,也是每个输入片段的视频流的数量,默认 1。a
: 输出音频流的数量,也是每个输入片段的音频流的数量,默认 0。unsafe
: 启用unsafe
模式: 各个片段的格式不同时不会报错。
该 filter 有着
v+a
的输出, 第一个是视频流, 第二个是音频流。
想要该 filter 正常工作,所有片段的时间必须从0
开始。
示例
示例没有亲测,请参见官网示例:http://ffmpeg.org/ffmpeg-filters.html#Examples-142