FFmpeg 相关文档 :
FFmpeg 裁剪过滤器 Crop Filter 可用于 裁剪 视频或图像 的特定区域 ;
裁剪过滤器 Crop Filter 的 主要工作 是 将 输入视频帧 的 指定宽高像素的区域 从 x 和 y 坐标位置 裁剪出来 , 输出 到指定的 宽高像素画面 中 ;
x 和 y 是裁剪的 输入视频 的 左上角坐标 ;
裁剪的画面 像素宽高 可以 不等于 输出画面的 像素宽高 ;
裁剪过滤器 不仅可以裁剪视频 , 还可以裁剪图片 ;
裁剪过滤器 Crop Filter 语法如下 :
crop=ow[:oh[:x[:y[:keep_aspect]]]]
FFmpeg 裁剪过滤器文档 : https://ffmpeg.org/ffmpeg-filters.html#crop
裁剪过滤器涉及到的变量 :
示例说明 :
crop=100:100:12:34:1
设置裁剪过滤器 , 裁剪 左上角 ( 12 , 34 ) 坐标开始的 100 x 100 像素区域的画面 , 同时保持宽高比 ;crop=100
设置裁剪过滤器 , 裁剪 左上角 ( 0 , 0 ) 坐标开始的 100 x 输入视频画面高度 像素区域的画面 ;在 ffmpeg 命令中 , 使用 -vf
参数 指定 裁剪过滤器 , 裁剪过滤器 放在 双引号 中 , 如下面的命令中 , 为 ffmpeg 设置 crop=320:240:0:0
裁剪过滤器 ;
ffmpeg -i input.mp4 -vf "crop=320:240:0:0" output.mp4
裁剪过滤器图示 : 紫色区域 是要裁剪的画面区域 ;
裁剪指定像素的视频区域 , 根据 crop=ow[:oh[:x[:y[:keep_aspect]]]]
语法 ,
最终得到的 裁剪过滤器为 crop=320:240:0:0
, 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :
ffmpeg -i input.mp4 -vf "crop=320:240:0:0" output.mp4
原 输入视频 的大小为 752x420 像素大小 ;
执行上述命令后 , 得到输出文件 output.mp4 , 其文件大小是 320x240 像素 , 截取的视频画面正好是原视频 左上角的画面 , 裁剪命令执行效果 和 播放效果 如下图所示 ;
裁剪视频画面中心的 200x200 像素的画面 ,
根据 crop=ow[:oh[:x[:y[:keep_aspect]]]]
裁剪过滤器 语法 , x 和 y 默认就自动设置为 输入画面的 中心位置 ,
最终得到的 裁剪过滤器为 crop=200:200
, 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :
ffmpeg -i input.mp4 -vf "crop=200:200" output.mp4
执行结果如下 :
通过手动计算的方式 , 不仅可以裁剪中心区域的画面 , 还可以裁剪任意比例区域的画面 , 比如 左上角 1/4 区域的画面 , 左侧 1/3 区域的画面 , 右侧 1/2 区域的画面 ;
裁剪 视频画面 中心的 200 x 200 像素的画面 , 根据 crop=ow[:oh[:x[:y[:keep_aspect]]]]
语法 ,
iw 和 ih 是 裁剪过滤器 的 内置变量 , 分别表示 输入视频画面的宽度 和 输入视频画面 的高度 ;
计算视频区域 左上角 的坐标 ,
最终得到的 裁剪过滤器为 crop=200:200:(iw-200)/2:(ih-200)/2
, 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :
ffmpeg -i input.mp4 -vf "crop=200:200:(iw-200)/2:(ih-200)/2" output.mp4
执行上述命令后 , 得到输出文件 output.mp4 , 其文件大小是 200x200 像素 , 截取的视频画面正好是原视频 中心区域的画面 , 裁剪命令执行效果 和 播放效果 如下图所示 ;
这里使用 iw 和 ih 两个变量 , 裁剪的画面宽高都为 1/2 , 由于 x 和 y 默认就是裁剪中心位置 , 这里不需要设置 , 使用默认设置即可 ;
只需要计算出 ow 和 oh 这两个过滤器参数值 ;
1/2*iw
, 即输入视频的 1/2 宽度 ;1/2*ih
, 即输入视频的 1/2 高度 ;根据 crop=ow[:oh[:x[:y[:keep_aspect]]]]
语法 , 生成 裁剪过滤器为 crop=1/2*iw:1/2*ih
, 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :
ffmpeg -i input.mp4 -vf "crop=1/2*iw:1/2*ih" output.mp4
执行结果如下 : 输出视频的 宽高是 376x210 , 正好是输入视频的 752x420 的一半 ;
这里需要使用 ih 变量 , 裁剪中心区域 , 这是默认设置 , 不需要设置 x 和 y 左上角坐标 ;
由于该视频时 752 x 420 大小的视频 , 宽度大于高度 , 则视频宽高都是 ih ;
只需要计算出 ow 和 oh 这两个 代表裁剪宽高的 过滤器参数值 ;
ih
, 即输入视频高度 ;ih
, 但是 oh 的默认值就是 输入视频的高度 , 不需要单独设置 ;根据 crop=ow[:oh[:x[:y[:keep_aspect]]]]
语法 , 生成 裁剪过滤器为 crop=ih
或者是 crop=ih:ih
, 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :
ffmpeg -i input.mp4 -vf "crop=ih" output.mp4
执行结果如下 : 输入视频的宽高为 750x420 , 最终裁剪的视频宽高是 420x420 ;
裁剪掉左上角 100 像素 , 也就是将 上边的 100 像素 长条画面 和 左侧的 100 像素 竖条画面 删除 , 只留下右下角剩余部分 , 如下图所示 ;
裁剪画面 的 左上角坐标是 ( 100 , 100 ) , 因此 x 值为 100 , y 值为 100 ;
ow 是要裁剪的宽度 , 值为 输入画面宽度 减去 100 像素 , 值为 iw - 100 ;
oh 是要裁剪的高度 , 值为 输入画面高度 减去 100 像素 , 值为 ih - 100 ;
根据 crop=ow[:oh[:x[:y[:keep_aspect]]]]
语法 , 生成 裁剪过滤器为 crop=iw-100:ih-100:100:100
, 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :
ffmpeg -i input.mp4 -vf "crop=iw-100:ih-100:100:100" output.mp4
执行结果如下 : 输入视频的宽高为 750x420 , 最终裁剪的视频宽高是 652x320 ;
裁剪出右下角 1/4 面积的画面 , 就是 右下角 宽高各为 1/2 的画面 , 如下图所示 :
裁剪画面 的 左上角坐标是 ( iw/2 , ih/2 ) , 因此 x 值为 iw/2 , y 值为 ih/2 ;
ow 是要裁剪的宽度 , 值为 iw/2 ;
oh 是要裁剪的高度 , 值为 ih/2 ;
根据 crop=ow[:oh[:x[:y[:keep_aspect]]]]
语法 , 生成 裁剪过滤器为 crop=iw/2:ih/2:iw/2:ih/2
, 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :
ffmpeg -i input.mp4 -vf "crop=iw/2:ih/2:iw/2:ih/2" output.mp4
执行结果如下 : 输入视频的宽高为 750x420 , 最终裁剪的视频宽高是 376x210 ;