ffmpeg裁剪视频画面
使用 ffmpeg 裁剪视频,核心是通过 crop 滤镜指定一个矩形区域。这个区域由宽度、高度以及左上角的 X、Y 坐标定义。
基本命令格式
ffmpeg -i input.mp4 -vf "crop=width:height:x:y" -c:a copy output.mp4
-i input.mp4:指定输入文件。-vf "crop=width:height:x:y":应用裁剪滤镜。-c:a copy:直接复制音频,避免重新编码,速度更快且无损音质。output.mp4:指定输出文件。
参数详解
crop 滤镜接受四个参数,顺序固定:
width:裁剪后视频的宽度(像素)。height:裁剪后视频的高度(像素)。x:裁剪区域左上角的 X 坐标(像素)。0代表从画面最左侧开始。y:裁剪区域左上角的 Y 坐标(像素)。0代表从画面最顶部开始。
坐标原点 (0,0) 位于原始视频的左上角。
命令示例
1. 裁剪指定区域
假设要从视频的 (100, 50) 位置,裁剪出一个 640x480 像素的区域:
ffmpeg -i input.mp4 -vf "crop=640:480:100:50" -c:a copy output.mp4
这条命令会保留从左边 100 像素、上边 50 像素开始的 640x480 矩形区域。
2. 裁剪左上角区域
从视频的左上角 (0,0) 开始裁剪:
ffmpeg -i input.mp4 -vf "crop=600:400:0:0" -c:a copy output.mp4
600:400:0:0 等同于从左上角取一个 600x400 的画面。
3. 裁剪右下角区域
要裁剪右下角的区域,需要计算出左上角的坐标。例如原视频是 1920x1080,要裁剪一个 600x400 的右下角区域:
X 坐标:
1920 - 600 = 1320Y 坐标:
1080 - 400 = 680
ffmpeg -i input.mp4 -vf "crop=600:400:1320:680" -c:a copy output.mp4
更灵活的方法是使用 in_w 和 in_h 变量(代表输入视频的宽高),无需手动计算:
ffmpeg -i input.mp4 -vf "crop=600:400:in_w-600:in_h-400" -c:a copy output.mp4
4. 裁剪中心区域
如果只想保留视频正中央的一块区域,可以省略 x 和 y 参数,ffmpeg 会自动居中裁剪。
ffmpeg -i input.mp4 -vf "crop=450:240" -c:a copy output.mp4
这条命令会从视频正中心裁剪出一个 450x240 的区域。
进阶技巧:一次性裁剪多个区域
ffmpeg 的标准命令一次只能输出一个裁剪区域。如果需要从同一视频中裁剪出多个不同区域并分别保存,需要在一个命令中使用 filter_complex 分流处理。
例如,从 input.mp4 中裁剪出两个区域并分别保存为 output1.mp4 和 output2.mp4:
ffmpeg -i input.mp4 -filter_complex \ "[0:v]crop=300:200:10:10[v1]; \ [0:v]crop=400:300:100:50[v2]" \ -map "[v1]" -map 0:a? output1.mp4 \ -map "[v2]" -map 0:a? output2.mp4
[0:v]crop=... [v1]:从第一个输入[0:v]裁剪,并将结果命名为[v1]。-map "[v1]":将[v1]这个视频流输出到第一个文件。-map 0:a?:同时将原始音频(如果存在)也复制到输出文件。
注意事项
宽高为偶数:使用 H.264/H.265 编码时,裁剪后的宽度和高度最好是偶数,否则可能遇到编码错误。
坐标与尺寸:确保
x + width不超过原视频宽度,y + height不超过原视频高度,否则命令会失败。数值计算:
crop滤镜支持简单的数学表达式,例如crop=iw/2:ih/2可以裁剪出原视频一半大小的中心区域。
转载请注明出处。