过滤器
是 ffmpeg
中最为强大的功能。在 ffmepg 中有数不甚数的过滤器存在,可以满足各种编辑需要。因为过滤器实在太多了,这里只会简单讲述几个常用的。
使用 过滤的基本结构是:
ffmpeg -i input.mp4 -vf "filter=setting_1=value_1:setting_2=value_2,etc" output.mp4
ffmpeg -i input.wav -af "filter=setting_1=value_1:setting_2=value_2,etc" output.wav
可以指定视频过滤器 (-vf
, -filter:v
的简写) 和 音频过滤器 (-af
, -filter:a
的简写). 过滤器的内容写到双引号里面 (“
) 并且可以使用逗号(,
)连接。你可以使用任意数量的过滤器(我写了个 etc 代表更多的,这不是做一个真实的过滤器)。
过滤器设定的通常格式是:
filter=setting_2=value_2:setting_2=value_2
过滤器不同的值使用冒号分割。
你甚至可以在值里面使用进行数学符号计算。
Note:
参考 ffmpeg 过滤器手册 查看更多高级用法
这里举几个例子来说明视频和音频的过滤器。
1. 视频缩放
这是个简单过滤器,设定里只有 width
和 height
:
ffmpeg -i input.mp4 -vf "scale=w=800:h=600" output.mp4
我说过你可以使用数学运算来给值:
ffmpeg -i input.mkv -vf "scale=w=1/2*in_w:h=1/2*in_h" output.mkv
很明显,这个命令让输入的尺寸变成了输入尺寸(in_w, in_h)的 1/2.
2. 视频裁剪
类似缩放,这个设定也有 width
和 height
,另外可以指定裁剪的原点(默认是视频的中心)
ffmpeg -i input.mp4 -vf "crop=w=1280:h=720:x=0:y=0" output.mp4
ffmpeg -i input.mkv -vf "crop=w=400:h=400" output.mkv
第二个命令裁剪原点是视频的中心点(因为我没有给 x 和 y 坐标),第一个命令会从左上角开始裁剪 (x=0:y=0
).
这里也有一个使用数学计算的例子:
ffmpeg -i input.mkv -vf "crop=w=3/4*in_w:h=3/4*in_h" output.mkv
这会把视频裁剪剩下原大小的 3/4/。
3. 视频旋转
你可以指定一个弧度,顺时针旋转视频。为了让计算简单一些,你可以给角度然后乘以 PI/180
:
ffmpeg -i input.avi -vf "rotate=90*PI/180"
ffmpeg -i input.mp4 -vf "rotate=PI"
第一个命令将视频顺时针旋转 90°,第二个则是上下颠倒了视频(翻转了 180°)。
4. 音频声道重映射
有的时候,你的音频只有右耳可以听到声音,那么这个功能就很有用了。你可以让声音同时在左右声道出现:
ffmpeg -i input.mp3 -af "channelmap=1-0|1-1" output.mp3
这将右声道(1)同时映射到左(0)右(1)两个声道(左边的数字是输入,右边的数字是输出)。
5. 更改音量
你可以将音量大小乘以一个实数(可以是整数也可以不是),你只需要给出那个数大小就行了。
ffmpeg -i input.wav -af "volume=1.5" output.wav
ffmpeg -i input.ogg -af "volume=0.75" output.ogg
第一个将音量变为 1.5 倍,第二个则让音量变成了原来的 1/4 那么安静。
技巧:更改播放速度
这里会介绍视频(不影响音频)和音频的过滤器。
- 视频
视频过滤器是setpts
(PTS = presentation time stamp). 这个参数以一种有趣的方式工作,因为我们修改的是 PTS,所以较大的数值意味着较慢的播放速度,反之亦然:
ffmpeg -i input.mkv -vf "setpts=0.5*PTS" output.mkv
ffmpeg -i input.mp4 -vf "setpts=2*PTS" output,mp4
第一个命令让播放速度加倍了,第二个则是让播放速度降低了一半。
- 音频
这里的过滤器是atempo
. 这里有个限制,它只接受0.5
(半速) 到2
(倍速)之间的值。为了越过这个限制,你可以链式使用这个过滤器:
ffmpeg -i input.wav -af "atempo=0.75" output.wav
ffmpeg -i input.mp3 -af "atempo=2.0,atempo=2.0" ouutput.mp3
第一个命令让音频速度慢了 1/4,第二个则是加速到原来的 4(2*2)倍。
Note:
如果想在同一个命令中同时修改视频和音频的速度,你得查看一下 filtergraphs.