《FFmpeg Basics》中文版-05-裁剪视频

写在前面

如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的简书账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。

正文

裁剪视频意味着从输入到输出中选择想要的矩形区域而没有余数。 裁剪通常用于调整大小,填充和其他编辑。

裁剪基础知识

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



视频过滤器:裁剪

描述 将输入视频帧的宽度和高度从x和y值表示的位置裁剪到指定的宽度和高度;x和y是输出的左上角坐标,协调系统的中心是输入视频帧的左上角。如果使用了可选的keep_aspect参数,将会改变输出SAR(样本宽比)以补偿新的DAR(显示长宽比)
语法 crop=ow[:oh[:x[:y[:keep_aspect]]]]
************ 用于ow和oh参数的表达式中的可用变量
x, y 对x的计算值(从左上角水平方向的像素个数)和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 -i /Users/zhangfangtao/Desktop/test.mp4 -vf crop=iw/3:ih:0:0 /Users/zhangfangtao/Desktop/newTest.mp4 

让我重新编码之后长这样:(惊不惊喜?意不意外)


再用下面的测试指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf crop=iw/3:ih:iw/3:0 /Users/zhangfangtao/Desktop/newTest.mp4 

生成的视频如下图:


这次显示的中间的三分之一iw/3:ih

使用如下指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4  -vf crop=iw/3:ih:iw/3*2:0 /Users/zhangfangtao/Desktop/newTest.mp4 

生成的视频如下图:(最右边的三分之一)


image.png

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


裁剪框中心

当我们想要裁剪框架中心的区域时,作物过滤器的设计可以跳过x和y参数的输入。x和y的默认值是。



这意味着默认值被设置为自动裁剪输入中心的区域。该命令语法对w宽度和h高度的矩形中心区域进行裁剪。

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

我做了一个100*100的裁剪,指令如下:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4  -vf crop=100:100 /Users/zhangfangtao/Desktop/newTest.mp4 

输出的视频长这样:


为了裁剪中间的半帧,我们可以使用以下命令:

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

我的测试指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf crop=iw/2:ih/2 /Users/zhangfangtao/Desktop/newTest.mp4 

裁剪之后的视频:


自动检测裁剪区域

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


描述 检测作物过滤器的作物大小,结果是由参数确定的输入帧的非黑色区域
语法 cropdetect[=limit[:round[:reset]]]
all parameters are optional
************ 参数的描述
limit 阈值,从0(无)到255 (all),默认值= 24
round -即使是整数,宽度和高度也必须是可分割的
- 4:2 2视频需要一个2的值,它只给出了维度
-偏移量自动更改为中心帧
-默认值为16,它是许多编解码器的最佳值
reset 计数器决定了多少帧crop探测将重置之前检测到的最大视频区域并重新开始检测当前最优的作物区域。默认值为0。当通道标识扭曲了视频区域时,这是很有用的。0表示永远不会重置和返回在回放期间遇到的最大区域

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

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

时间的裁剪

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

这里面大家可能会遇到一个问题,你编译出来的ffmpeg里面可能没有ffplay,我是遇到过这个问题,网上找了很多方案,也没啥用,最后来了一个简单直接的。。。。编译FFmpeg之后没有ffplay?方法在这儿

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

我在自己的电脑上测试了一下,显示的效果如下图(一个10秒钟,20K的小视频):


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

数的位数 数字过滤器规范 时长 图片
1 crop=29:52:256:94 9 seconds
0 min : 9 sec
00:00:09
2 crop=61:52:224:94 99 seconds
1 min : 39 sec
00:01:39
3 crop=93:52:192:94 999 seconds
16 min : 39 sec
00:16:39
4 crop=125:52:160:94 9999 seconds
2 hours : 46 min : 39 sec
02:46:39

给大家示范一下下面的指令:

 ffmpeg -f lavfi -i testsrc -vf crop=125:52:160:94 -t 50 timer.mp4

显示的效果如下:

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

上面的那个完整的指令如下:(我自己试了一下,视频有了,没有文字。。。)

ffmpeg -f lavfi -i testsrc=size=vga  -vf crop=125:52:160:94 -t 50 timer.mp4

为了改变数字和背景的颜色,我们可以使用一个lut过滤器,这是在颜色修正的章节中描述的。创建的计时器将用于视频覆盖的示例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容