裁剪与比例调整
视频裁剪和比例调整是视频处理中的常见需求,可以改变视频的显示比例、尺寸和内容区域。
视频裁剪
转换为 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 | 横屏视频、YouTube | 1920x1080, 1280x720 |
| 9:16 | 竖屏视频、抖音 | 1080x1920, 720x1280 |
| 4:3 | 传统视频 | 1920x1440, 1280x960 |
| 1:1 | 正方形、Instagram | 1080x1080 |
| 21:9 | 超宽屏 | 2560x1080 |
注意事项
- 裁剪位置:确保裁剪区域在视频范围内
- 宽高比:保持原始宽高比可以避免画面变形
- 质量损失:重新编码会损失质量,尽量使用
-c copy复制流 - 性能:裁剪操作通常很快,但重新编码需要时间
下一步:学习直播录制相关内容。
