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

news2024/9/22 11:29:25

正文

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

裁剪基础知识

较老的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/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

原视频这样:(就当给人家打广告了)

经过如下的测试指令:

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,我是遇到过这个问题,网上找了很多方案,也没啥用,最后来了一个简单直接的。。。

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位数字的定时器,每个数字的筛选器和时间期限的规格都在表中:

数的位数数字过滤器规范时长
1crop=29:52:256:949 seconds
0 min : 9 sec
00:00:09

2crop=61:52:224:9499 seconds
1 min : 39 sec
00:01:39

3crop=93:52:192:94999 seconds
16 min : 39 sec
00:16:39

4crop=125:52:160:949999 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过滤器,这是在颜色修正的章节中描述的。创建的计时器将用于视频覆盖的示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务分布式开源架构是什么?

微服务分布式开源架构跟单体应用比起来有着较大的优势,可以解决单体系统的不足之处,满足日益增多的业务量需求。那么,微服务分布式开源架构是什么?什么软件服务商的微服务架构比较适合? 一、微服务分布式开源架构是什么…

nmap各种扫描的注意事项

1) nmap -sS 192.168.0.100 TCP的SYN扫描,也称为stealth扫描,扫描时,发送一个SYN包,等待SYN/ACK响应,当能够收到SYN/ACK响应时,就认为该端口是开放的。SYN扫描是一个速度极快而且结果又准的扫描&#xff0…

Linux 进程通信深剖

目录传统艺能😎进程间通信🤔通信方式🤔管道🤔匿名管道🤔pipe🤔匿名管道使用🤔读写规则🤔管道特点🤔同步与互斥😋管道生命周期😋流式服务&#x1f…

Nginx反向代理

代理概述 正向代理代理的对象是客户端,反向代理代理的是服务端,Nginx即可以实现正向代理,也可以实现反向代理。 正向代理 反向代理 正向代理案例 理论上Nginx可以支持正向代理上网,但是在实验中,域名访问有问题&am…

有奖报名|StarRocks 获开源热力值增速第一,有你的贡献

近日,由开放原子开源基金会、X-lab 开放实验室和阿里巴巴开源委员会联合出品的《2022 开源大数据热力报告》在云栖大会公布。StarRocks 荣登《2022开源大数据热力报告》Top 30,并作为数据查询与分析方向增速第一的项目受邀出席 11 月 17 日的线上圆桌讨论…

顺序表--C语言版(从0开始,超详细解析 ,小白一听就懂!!!)

目录 一、前言 🍎什么是数据结构 🍐学习数据结构有什么用 二、顺序表概念 ------- (线性表) 🍉什么是线性表 🍓顺序表概念详解 💦 顺序表与数组的区别 三、顺序表详解 🍌…

为数字化深水区“量身定制”,华为品质服务再迭代

作者 | 曾响铃 文 | 响铃说 因为工作数据没有及时更新、版本对不上,不得不带着文件和数据跑上跑下,与其他部门反复确认,拿回来最新的数据,才能开始安心工作——如果找不到人,工作就得等着,领导又在催&…

SpringBoot项目基础设施搭建

本文为《从零打造项目》系列第二篇文章,首发于个人网站。 《从零打造项目》系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 前言 准确点说,这不是《从零打造项目》系列的第一篇文章,模版代码生成的那个项目讲解…

【非纯小白勿进】计算机的基本操作

计算机的基本操作 ​ 追看了前面文章,你就会对于计算机已经有了一个初步的认识,那么下面我们就要来使用计算机了。 计算机中只有文件和文件夹 ​ 计算机中,只有两样东西,文件和文件夹。 文件夹:本身不存储数据内容…

为什么用php的人越来越少了?

首先这张图反映的只是某个编程语言的热门程度。 以下代表个人观点: php这几年热度下降的原因: 1.存活时间长,在互联网技术日新月异的时代,一些更先进的技术会吸引一部分开发者 2.存活时间长,为了对历史版本作出一定的兼容,函数库的体积增大,一定程度上加大了程序员的负担 …

FRNet:Feature Reconstruction Network for RGB-D Indoor Scene Parsing实验补充

FRNet做了大量的消融实验,这里仔细来分析一下。 1:ResNet backbone: 作者消融实验使用了ResNet34作为backbone来提取特征,将最后一层的输出简单相加起来,然后通过不断的上采样获得最终的输出。并且只在最后一层进行监督…

FAM DBCO, 6-isomer,DBCO-羧基荧光素琥珀酰亚胺酯-6-异构体

产品名称:DBCO-羧基荧光素琥珀酰亚胺酯-6-异构体 英文名称:FAM DBCO, 6-isomer 荧光素 (FAM) 是荧光染料之一。FAM 的这种衍生物含有环辛炔基团(二苯并环辛炔,缩写为 DBCO 或 ADIBO),用于通过无铜、应变促…

MyBatis 关联映射

文章目录一、关联映射概述二、一对一查询1.association 元素2.嵌套查询实例演示3.嵌套结果集实例演示三、一对多查询1.collection 元素2.嵌套结果集实例演示四、多对多查询1.嵌套查询实例演示2.嵌套结果集实例演示五、自动补全 get、set 方法一、关联映射概述 在此之前&#x…

飞瞳引擎™集装箱AI检测云服务,集装箱信息识别功能免费,全球顶尖AI高泛化性,正常集装箱识别率99.98%,全球2000企业用户

党的二十大报告指出,加快发展物联网,建设高效顺畅的流通体系,降低物流成本。空箱闸口智慧监管为青岛港提高集装箱运输物流效率提供了保障。飞瞳引擎™AI集装箱识别检测云服务,自动化识别检测集装箱信息大幅降低物流成本提升效率&a…

EFK部署centos7.9(三)Kibana部署

系统类型:Centos7.9 节点IP: 192.168.11.140 软件版本:nginx-1.14.2、kibana-6.5.4-linux-x86_64.tar.gz 上传或者下载安装包 Wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.4-linux-x86_64.tar.gz tar zvxf kibana-6.5.…

供应链解决方案SRM是什么?企业实施SRM有什么价值?

企业业务对外的两个最重要的出口就是广义的 “买”和“卖”。在“卖”的方面,企业为了使自己的产品和服务赢得市场、赢得客户,更为重视这方面的管理和更加投入了在市场上的力度。管理软件供应商纷纷推出了CRM产品,企业也开始利用这种管理思想…

字符串的算法题目

题目一: 描述 对于一个长度为 n 字符串,我们需要对它做一些变形。 首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写…

RabbitMQ 服务启动失败问题小结(Windows环境)

RabbitMQ 服务启动失败问题小结(Windows环境) 最近在Windows环境上安装RabbitMQ服务时,踩了不少坑,往上的回答让人很崩溃,几乎一样的回答,起不到帮助作用;特此做个记录总结; *****…

Nginx缓存配置教程

问题引出 假设某电商平台商品详情页需要实现 700 QPS(假设宽带是千兆宽带) 千M局域网宽带网卡速率按照1000进位,所以1Gbps1,000,000,000bps125,000,000Bps≈119.21MB/s 当达到500QPS 的时候很难继续压测上去。 假设每个页面主体渲染所需要的…

java的static关键字及类加载顺序

Java中static可以修饰类、变量、方法甚至可以构成静态块,让我们来了解下它们各自的使用以及加载顺序吧。 基本用法 static关键字修饰类 java里面用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。 public class StaticT…