用FFmpeg缩放视频帧
📐 视频缩放在多平台发布中的应用

视频分辨率的选择直接影响观众在不同设备上的观看体验:

  • 平台适配:不同平台对分辨率的偏好不同——抖音/快手推荐竖屏 1080×1920,B站/YouTube推荐横屏 1920×10804K 3840×2160。根据目标平台选择合适的输出分辨率,避免黑边或裁切。
  • 保持宽高比:缩放时务必保持原始宽高比(使用 -1 自动计算),否则画面会被拉伸变形。不同设备(手机、平板、电脑)的屏幕比例各异,统一输出后再适配。
  • 缩放算法:高质量缩放算法(如 Lanczos)适合缩小的场景保留细节;快速缩放算法(如 bilinear)适合实时预览。原始素材分辨率越高,缩放后画质越好。
  • 批量处理:当有大量素材需要统一尺寸时,使用 FFmpeg 的 scale 滤镜配合批量脚本可大幅提高效率,确保所有片段输出规格一致。

FFmpeg scale 滤镜详解

scale 是 FFmpeg 中最常用的视频缩放滤镜,语法为 scale=宽度:高度。支持三种基本用法:scale=640:480 直接指定输出宽高(会拉伸变形);scale=640:-1 指定宽度,高度自动按原始宽高比计算;scale=-1:480 指定高度,宽度自动计算,始终保证画面不被压扁或拉长。

当使用 -1 自动计算时,FFmpeg 会确保计算结果为偶数(大多数编码器要求宽高为偶数)。若还需控制溢出行为,可追加 force_original_aspect_ratio=decrease(缩小至目标区域以内,多余部分留黑边)或 =enforce(强制拉伸填满目标区域)。

缩放算法通过 flags 参数指定:lanczos(Lanczos 算法,质量高、细节保留好,适合缩小的场景);bilinear(双线性插值,运算速度快但略模糊,适合实时预览或性能敏感场景);bicubic(双三次插值,质量与速度折中);spline(样条插值,平滑度更佳);neighbor(最近邻插值,产生像素风效果,适合像素艺术)。默认算法为 bicubic。

scale 滤镜可与其他滤镜链式组合,如 scale=1280:-1,fps=30 先缩放后改帧率,或 scale=1280:-1,format=yuv420p 缩放同时转换像素格式。

广告
{{v.name}}
使用 scale 滤镜进行缩放,代码如下
$ ffmpeg -i input.mp4 -vf "scale=640:480" output.mp4
指定宽度,高度自动计算以保持宽高比,代码如下
$ ffmpeg -i input.mp4 -vf "scale=640:-1" output.mp4
指定高度,宽度自动计算以保持宽高比,代码如下
$ ffmpeg -i input.mp4 -vf "scale=-1:480" output.mp4
缩放,必要时添加黑边,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=decrease" output.mp4
使用 Lanczos 算法缩放,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:720:flags=lanczos" output.mp4
使用 bilinear 算法缩放,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:720:flags=bilinear" output.mp4
使用 bicubic 算法缩放,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:720:flags=bicubic" output.mp4
使用 spline 算法缩放,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:720:flags=spline" output.mp4
使用 neighbor 算法缩放,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:720:flags=neighbor" output.mp4
先缩放,再调整帧率,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:-1,fps=30" output.mp4
先调整帧率,再缩放,代码如下
$ ffmpeg -i input.mp4 -vf "fps=30,scale=1280:-1" output.mp4
缩放并转换为特定像素格式,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:-1,format=yuv420p" output.mp4
缩放并重新编码,代码如下
$ ffmpeg -i input.mp4 -vf "scale=1280:-1" -c:v libx264 -crf 23 -preset medium -c:a copy output.mp4
友链