Skip to content

裁剪与比例调整

视频裁剪和比例调整是视频处理中的常见需求,可以改变视频的显示比例、尺寸和内容区域。

视频裁剪

转换为 16:9 比例

将视频裁剪为 16:9 的横屏比例。

bash
ffmpeg -i input.mp4 \
  -vf "crop='min(iw,ih*16/9)':'min(ih,iw*9/16)'" \
  -c:a copy \
  output_16_9.mp4

转换为 9:16 比例(竖屏)

将视频裁剪为 9:16 的竖屏比例,适合手机竖屏视频。

bash
ffmpeg -i input.mp4 \
  -vf "crop='min(iw,ih*9/16)':'min(ih,iw*16/9)'" \
  -c:a copy \
  output_9_16.mp4

参数说明

  • crop: 视频裁剪滤镜
  • min(iw,ih*16/9): 计算宽度(取原始宽度和按比例计算宽度的较小值)
  • min(ih,iw*9/16): 计算高度(取原始高度和按比例计算高度的较小值)
  • -c:a copy: 音频直接复制

变量说明

  • iw: 输入视频宽度
  • ih: 输入视频高度
  • ow: 输出视频宽度
  • oh: 输出视频高度

精确裁剪

指定裁剪区域

从指定位置裁剪指定大小的区域。

bash
# 从 (x=100, y=50) 位置开始,裁剪 1280x720 的区域
ffmpeg -i input.mp4 \
  -vf "crop=1280:720:100:50" \
  -c:a copy \
  output.mp4

参数格式crop=width:height:x:y

  • width: 裁剪宽度
  • height: 裁剪高度
  • x: 起始 X 坐标(左上角)
  • y: 起始 Y 坐标(左上角)

居中裁剪

从视频中心裁剪指定大小。

bash
# 从中心裁剪 1280x720
ffmpeg -i input.mp4 \
  -vf "crop=1280:720:(iw-1280)/2:(ih-720)/2" \
  -c:a copy \
  output.mp4

分辨率调整

缩放视频

将视频缩放到指定分辨率。

bash
# 缩放到 1920x1080
ffmpeg -i input.mp4 -vf scale=1920:1080 output.mp4

保持宽高比缩放

只指定宽度或高度,自动计算另一个维度。

bash
# 宽度缩放到 1920,高度按比例
ffmpeg -i input.mp4 -vf scale=1920:-1 output.mp4

# 高度缩放到 1080,宽度按比例
ffmpeg -i input.mp4 -vf scale=-1:1080 output.mp4

高质量缩放算法

使用更好的缩放算法(速度较慢但质量更好)。

bash
ffmpeg -i input.mp4 -vf scale=1920:1080:flags=lanczos output.mp4

缩放算法选项

  • fast_bilinear: 快速双线性(默认)
  • bilinear: 双线性
  • bicubic: 双三次(推荐)
  • lanczos: Lanczos(质量最好)

填充黑边

添加黑边到指定比例

如果视频比例不匹配,添加黑边使其达到目标比例。

bash
# 添加黑边使视频变为 16:9
ffmpeg -i input.mp4 \
  -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" \
  -c:a copy \
  output.mp4

参数说明

  • force_original_aspect_ratio=decrease: 保持宽高比,缩小以适应
  • pad=1920:1080: 填充到指定尺寸
  • (ow-iw)/2:(oh-ih)/2: 居中填充

裁剪特定时间段

裁剪视频片段

从视频中提取指定时间段的片段。

bash
# 从第 10 秒开始,提取 30 秒
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4

精确裁剪(重新编码)

使用重新编码方式,更精确但速度较慢。

bash
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 output.mp4

批量裁剪脚本

bash
#!/bin/bash
# 批量裁剪为 16:9

INPUT_DIR="./videos"
OUTPUT_DIR="./output_16_9"

mkdir -p "$OUTPUT_DIR"

for file in "$INPUT_DIR"/*.mp4; do
    filename=$(basename "$file")
    output="$OUTPUT_DIR/${filename%.mp4}_16_9.mp4"
    
    echo "处理: $filename"
    ffmpeg -i "$file" \
        -vf "crop='min(iw,ih*16/9)':'min(ih,iw*9/16)'" \
        -c:a copy \
        "$output"
    
    echo "完成: $output"
done

常用比例

比例用途分辨率示例
16:9横屏视频、YouTube1920x1080, 1280x720
9:16竖屏视频、抖音1080x1920, 720x1280
4:3传统视频1920x1440, 1280x960
1:1正方形、Instagram1080x1080
21:9超宽屏2560x1080

注意事项

  1. 裁剪位置:确保裁剪区域在视频范围内
  2. 宽高比:保持原始宽高比可以避免画面变形
  3. 质量损失:重新编码会损失质量,尽量使用 -c copy 复制流
  4. 性能:裁剪操作通常很快,但重新编码需要时间

下一步:学习直播录制相关内容。