《ffmpeg basics》中文版 --5.裁剪视频

5.裁剪视频

​ 裁剪视频,就是从输入中选取一个需要的矩形区域作为输出,而剩下的部分则丢弃掉。裁剪经常和调整视频尺寸、填充等其他编辑操作一起使用。

裁剪基础

​ 旧版本的FFmpeg中有 cropbottom , cropleft , cropright , croptop 四个选项用于裁剪,但在新版本中,它们都已经被废弃,转而使用 crop filter 来完成裁剪操作,其详细情况如下表所示:

在这里插入图片描述

​ 表示 ow 值的表达式中可以使用 oh 值,反之亦然,但 ow 和 oh 的表达式中不能使用 x 和 y 值,这是因为这两个值是根据 ow 和 oh 计算得到的,依赖关系不能颠倒。x 值的表达式中可以使用 y 值,反之亦然。例如,想要将输入视频分别截取左边三分之一,中间三分之一,右边三分之一:

ffmpeg -i input -vf crop=iw/3:ih:0:0 output
ffmpeg -i input -vf crop=iw/3:ih:iw/3:0 output
ffmpeg -i input -vf crop=iw/3:ih:iw/3*2:0 output

在这里插入图片描述

截取帧的中心部位

​ crop filter 默认不需要输入 x 和 y 的值,此时 crop 截取的矩形位于帧的中心。默认情况下,x 和 y 的值由如下公式获取:

		X(default) = (input width - output width) / 2
		Y(default) = (input height - output height) / 2

​ 也就是说,默认的参数将自动去截取输入的中心区域。以下命令将截取宽为 w ,高为 h 的中心矩形区域:

ffmpeg -i input_file -vf crop=w:h output_file

​ 从中心截取输入尺寸的一半:

ffmpeg -i input.avi -vf crop=iw/2:ih/2 output.avi

自动检测裁剪区域

​ 如果想要自动截取一个非黑色区域(也就是把黑色的部分去掉),我们可以使用 cropdetech filter,它的详细描述如下表所示。视频从4:3 转化为 16:9 的比例,或者反过来操作,就会形成黑色的边框,如果想要去除这些黑色边框,cropdetech 就非常有用。

在这里插入图片描述

​ limit参数指定要裁剪的黑色颜色范围,如果其值为A,转化为16进制为0xHK(0x00 ~ 0xFF),那么#HKHKHK到#FFFFFF的颜色就可以保留,#000000到#HKHKHK的颜色会被裁减掉。取0时表示只有纯黑色(#000000)被裁减掉。注意:这里的颜色其红绿蓝各个分量的值都是相同的,如果不同,不参与截取。

​ 裁减掉纯黑色的命令如下:

ffmpeg -i input.mpg -vf cropdetech=limit=0 output.mp4

裁剪计时器(timer)

​ 媒体播放器上一般都会有一个时间进度条,它会显示已经播放的时间长度。但是一般情况下只有将鼠标放到它上面时它才会显示出来,一段时间后又会隐藏。FFmpeg中有一个视频源名为 testsrc ,它的画面上包含有一个计时器,我们可以用下面命令显式该视频:

ffplay -f lavfi -i testsrc

​ testsrc 的默认尺寸是 320x240 ,计时器的初始值默认是0,大小是 29x52 ,距离左上角的水平距离为 256 像素,垂直距离为 94 像素。因此,如果我们想要截取一个数字的计时器,那么可以使用下面的命令:

ffmpeg -f lavfi -i testsrc -vf crop=29:52:256:94 -t 10 timer1.mpg

​ 如果想要截取包含一个、两个、三个或者四个数字的计时器时,都可以使用上述命令,只不过需要使用不同的截取参数:

在这里插入图片描述

​ 默认的计时器高度为52像素,如果我们想要一个更高的计时器,那么我们使用 size 参数为 testsrc 指定一个更高的尺寸,例如: -i testsrc=size=vga ,然后再去调整计时器的截取参数。

在这里插入图片描述

​ 而想要改变计时器中数组的颜色或者背景的颜色,我们可以使用 lut filter,我们将会在 《Color Correction》一节中介绍相关内容。

H&A
发布了7 篇原创文章 · 获赞 4 · 访问量 828

猜你喜欢

转载自blog.csdn.net/qq_34305316/article/details/102880905