探索 FFmpeg Basics 音视频技术(5):裁剪视频

这个系列文章我们来介绍一位海外工程师如何探索 FFmpeg Basics 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 5 篇:FFmpeg  裁剪视频。

—— 来自公众号“关键帧Keyframe”的分享

裁剪视频是指从输入中选择想要的矩形区域到输出,不留下任何多余部分。裁剪通常用于调整大小、填充和其他编辑任务。

1、裁剪基础知识

较老的 FFmpeg 版本有 cropbottom、cropleft、cropright 和 croptop 选项,但现在已弃用,取而代之的是下表中描述的裁剪操作。

视频过滤器:裁剪

描述将输入视频帧的宽度和高度从 x 和 y 值表示的位置裁剪到指定的宽度和高度;x 和 y 是输出的左上角坐标,坐标系的中心是输入视频帧的左上角。如果使用了可选的 keep_aspect 参数,它将改变输出 SAR(样本宽高比)以补偿新的 DAR(显示宽高比)。
语法crop=ow[:oh[:x[:y[:keep_aspect]]]]
************ow 和 oh 参数表达式中可用的变量
x、yx(从左上角水平方向的像素数)和 y(垂直像素数)的计算值,每个帧都会进行评估。x 的默认值为 (iw – ow)/2,y 的默认值为 (ih – oh)/2。
in_w、iw输入宽度
in_h、ih输入高度
out_w、ow输出(裁剪)宽度,默认值 = iw
out_h、oh输出(裁剪)高度,默认值 = ih
a纵横比,与 iw/ih 相同
sar输入样本纵横比
dar输入显示纵横比,等于表达式 a * sar
hsub、vsub水平和垂直色度子样本值。对于像素格式 yuv422p,hsub 为 2,vsub 为 1。
n输入帧数,从 0 开始
pos输入帧文件中的位置,未知则为 NAN
t以秒为单位的时间戳,输入时间戳未知则无

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

下图是相关参数的示意图:

探索 FFmpeg Basics 音视频技术(5):裁剪视频

2、裁剪框中心

当我们想要裁剪框架中心的区域时,作物过滤器的设计可以跳过 x 和 y 参数的输入。x 和 y 的默认值被设置为自动裁剪输入中心的区域。该命令语法对宽度为 w 和高度为 h 的矩形中心区域进行裁剪。

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

3、自动检测裁剪区域

为了自动检测出裁剪的非黑色区域,我们可以使用 crop 检测过滤器,如下表所示。当输入视频中包含一些黑条时,这种自动裁剪是有用的,通常是在从 4:3 到 16:9 的转换之后,反之亦然。

描述检测作物过滤器的作物大小,结果是由参数确定的输入帧的非黑色区域。
语法cropdetect[=limit[:round[:reset]]]
所有参数都是可选的
************参数描述
limit阈值,范围从 0(无)到 255(全部),默认值 = 24

limit 参数指定了选择多少深颜色的输出,零值意味着只有完整的黑色被裁剪。例如,要裁剪非黑输出,我们可以使用以下命令:(我这边也没存在黑色边框的视频,测试了几个,没发现有啥用)

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

4、时间的裁剪

媒体播放器通常有一个进度条,显示经过的秒数,但大多数只有在鼠标指针停止并在特定持续时间后隐藏时才会显示。 FFmpeg 包含一个包含定时器的 testsrc 视频源,我们可以使用以下命令显示它:

ffplay -f lavfi -i testsrc

testsrc 的默认大小是 320×240 像素,初始计时器的数字 0 有 29×52 像素大小,它在左上角的位置是水平 256 个像素,垂直于 94 像素。要裁剪一个数字的面积,我们可以使用以下命令:

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

我们想用这个命令来创建一个有 1、2、3 和 4 位数字的定时器,每个数字的筛选器和时间期限的规格都在表中:

数的位数数字过滤器规范时长图片
1crop=29:52:256:949 秒钟
0 分 : 9 秒
00:00:09
2crop=61:52:224:9499 秒钟
1 分 : 39 秒
00:01:39
3crop=93:52:192:94999 秒钟
16 分 : 39 秒
00:16:39
4crop=125:52:160:949999 秒钟
2 小时 : 46 分 : 39 秒
02:46:39

如果我们想要比 52 像素更高的更大的数字,我们可以用一个 size 参数指定更大的 testsrc 输出(例如:i testsrc=size=vga),然后相应地调整作物区域。

探索 FFmpeg Basics 音视频技术(5):裁剪视频

音视频方向学习、求职,欢迎加入我们的星球

丰富的音视频知识、面试题、技术方案干货分享,还可以进行面试辅导

探索 FFmpeg Basics 音视频技术(5):裁剪视频

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论