缩放
缩放是一个常见的需求,这需要使用到 FFmpeg 提供的视频过滤器(或称视频滤镜,video filter),也即
例如,我们要将一个高分辨率视频从 1440p 缩放,那么我们可以使用参数:
# 输出到1280x720的例子 ## 直接指定宽1280、高720。选择以下任意一种写法即可 scale=w=1280:h=720 scale=1280:720 scale=1280x720 ## 可以用-1表示按原视频宽高比自动计算 scale=1280:-1 scale=-1:720 ## 也可以使用倍率的写法,用iw、ih代表输入视频的宽和高 scale=iw/2:ih/2 # 输出到方形720x720的例子。 ## 可以用ow、oh代表变换后输出视频的宽和高 scale=iw/2:ow
使用冒号作为分隔符、等号作为键值对的连接符。
除了分辨率,我们有时候也会用
命令示例:
# 使用默认的 bicubic 算法缩放到高720并保持原宽高比,并用默认编码格式(H.264)编码 ffmpeg -i video.mp4 -vf scale=-1:720 out.mp4 # 指定使用 Lanczos 算法缩放到原视频的宽高的各一半,并用 H.265 格式以默认质量编码 ffmpeg -i video.mp4 -vf scale=iw/2:ih/2:flags=lanczos -c:v libx265 -c:a copy out.mp4
裁切
裁切同样使用视频过滤器完成,使用
# 从原视频距左上角横20、竖30的位置,向右下角裁切一个宽100、高200的矩形 crop=w=100:h=200:x=20:y=30 crop=100:200:20:30 # 在视频的正中央进行裁切 crop=100:200 # 也可以使用倍率的写法,用iw、ih代表输入视频的宽和高 ## 裁切视频的中间 3/5 宽度画面 crop=3/5*iw:ih:iw/5:0
例子:
# 裁切 1/6 到 5/6 宽的画面范围,并用 x265 编码器以 CRF 30 的质量来编码 ffmpeg -i video.mp4 -c:v libx265 -crf 30 -vf "scale=2/3*iw:ih:iw/6:0" -c:a copy out.mp4
FFmpeg 还支持一种自动检测裁切区域的参数
# 自动检测黑色边框来裁切 ffmpeg -i video.mp4 -vf "cropdetect" -c:a copy out.mp4