FFMpeg zoompan 镜头聚焦和移动走位

2023-09-19 12:19:58

案例 

原始图片

# 输出帧数,默认25帧/秒,25*4 代表4秒
# s=1280x80 # 输出视频比例,可以设置和输入图片大小一致
# zoom+0.002 表示每帧放大的倍数,下面代码是25帧/每秒 * 4秒,共1000帧
# 最终是 0.002*25*4 = 0.2,最终是放大1.2倍
ffmpeg -i "./sdout/1.jpg" \
-filter_complex \
"zoompan=z='zoom+0.002':d=25*4:s=600x380" \
out.gif

只是改变Z坐标的话,图片将会从左上角开始变化

也可以指定x,y,(默认值是0)

如果想缩放到图片右边,可以指定 x=iw-iw/zoom ,图片的宽-缩放后的宽

如果想缩放到图片底部,指定 y=ih-ih/zoom

如果想缩小图片,需要初始化图片尺寸,比如 z='if(eq(on,1),1.2,zoom-0.002) 

ffmpeg -i "./sdout/1.jpg" \
-filter_complex \
"zoompan=x='iw-iw/zoom':y='ih-ih/zoom':z='if(eq(on,1),1.2,zoom-0.002)':d=25*4:s=600x338" \
out1.gif

# 如果zoom <= 1.0, z=1.5 否则 z= (1.001 和 zoom-0.0015)中大的
# 最终效果就是: 从 1.5 倍数缩小到 1.001

ffmpeg -i "./sdout/1.jpg" \
-filter_complex \
"zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=25*4:s=600x380" \
out2.gif

聚焦中心点

# 聚焦到图片center中心点,时长4秒
ffmpeg -i "./sdout/1.jpg" \
-filter_complex \
"zoompan=x='iw/2*(1-1/zoom)':y='ih/2*(1-1/zoom)':z='zoom+0.002':d=25*4:s=600x338" \
out3.gif

# zoompan拆解
zoompan=
	x='iw/2*(1-1/zoom)': # iw/2 代表要聚焦的x轴,zoom = 下面放大的比例
	y='ih/2*(1-1/zoom)': # ih/2 代表要聚焦的y轴
	z='2': # 聚焦放大的比例,这里代表2倍
	d=25*4: # 输出帧数,默认25帧/秒,25*4 代表4秒
	s=640x360 # 输出视频比例,可以设置和输入图片大小一致

参数

# 以下是命令参数
zoom, z  放大倍数,1到10,默认1
x,y    坐标,默认0
d    总帧数,默认90
s    输出图片尺寸,默认hd720
fps    帧率,默认25

# 以下是参数里的常量
in_w, iw    输入宽
in_h, ih    输入高
out_w, ow    输出宽
out_h, oh    输出高
in    输入帧数
on    输出帧数
in_time, it    The input timestamp expressed in seconds. It’s NAN if the input timestamp is unknown.
out_time, time, ot    The output timestamp expressed in seconds.
x,y    Last calculated ’x’ and ’y’ position from ’x’ and ’y’ expression for current input frame.
px,py    ’x’ and ’y’ of last output frame of previous input frame or 0 when there was not yet such frame (first input frame).
zoom    上一帧 z 值
pzoom    Last calculated zoom of last output frame of previous input frame.
duration    Number of output frames for current input frame. Calculated from ’d’ expression for each input frame.
pduration    number of output frames created for previous input frame
a    Rational number: input width / input height
sar    sample aspect ratio
dar    display aspect ratio

表达式

Expression Evaluation - FFmpeg

# x,y 中取大值
max(x, y)


# x <= y 返回 1, 否则返回 0
lte(x, y)

参考:

FFmpeg滤镜效果--镜头聚焦和移动走位 - 知乎

FFmpeg Filters Documentation

Ken Burns Effect Slideshows with FFMPeg | mko.re 

更多推荐

RocketMQ高性能核心原理与源码架构剖析

文章目录1、源码环境搭建1.1、主要功能模块1.2、源码启动服务1.2.1、启动nameServer1.2.2、启动Broker1.2.3、发送消息1.2.4、消费消息1、源码环境搭建1.1、主要功能模块​RocketMQ的官方Git仓库地址:https://github.com/apache/rocketmq可以用g

【数据结构初阶】三、 线性表里的链表(无头+单向+非循环链表)

=========================================================================相关代码gitee自取:C语言学习日记:加油努力(gitee.com)====================================================

读高性能MySQL(第4版)笔记10_查询性能优化(上)

1.三管齐下1.1.不做、少做、快速地做1.2.如果查询太大,服务端会拒绝接收更多的数据并抛出相应错误1.3.如果查询写得很糟糕,即使库表结构再合理、索引再合适,也无法实现高性能1.4.查询优化、索引优化、库表结构优化需要齐头并进,一个不落1.5.PerconaToolkit中的pt-archiver工具2.响应时间2

【vivo秋招0912】三、最少开发工时总和 <模拟>

三、最少开发工时总和某开发小组近期承接了多个研发项目,作为组长的你需要为员工分配工作任务。具体要求如下:项目划分到的任务工时用二维数组tasks表示,其中tasks[i][j]表示的是第i个项目中第j个任务的开发工时;现在组内员工有n个,每个工作任务只能分配给一位员工,一位员工可以被分配多个任务,一个任务完成才能进行下

【用unity实现100个游戏之12】unity制作一个俯视角2DRPG《类星露谷物语》资源收集游戏demo

文章目录前言加快编辑器运行速度素材(1)场景人物(2)工具一、人物移动和动画切换二、走路灰尘粒子效果探究实现三、树木排序设计方法一方法二四、绘制拿工具的角色动画五、砍树实现六、存储拾取物品引入Unity的可序列化字典类七、实现靠近收获物品自动吸附八、树木被砍掉的粒子效果九、新增更多可收集物十、更多工具切换十一、扩展源码

第五天:基于gec6818开发板或stm32驱动对RFID高频读卡器进行防碰撞获取卡号,读取,写入内容操作

在ARM板上通过防碰撞指令获取高频RFID卡的卡号高频RFID一般频率在13.56MHz左右,识别距离可扩展至1.5米,具有防碰撞特性,可以同时读取多个电子标签。标签可以存储少量数据,多用于需要存储数据、近距离的识别应用,如:图书馆管理系统、场地通道安全管理系统等。mifare522模块的数据帧格式gec6818开发板

[C++ 网络协议] I/O流分离所带来的半关闭问题

1.问题和解决方法根据所学内容,I/O流分离现如今有如下2种方法:1.调用进程fork函数,分离出子进程,主进程和子进程分别进行输入流的读和输出流的写。2.用FILE指针按读模式和写模式将输入流和输出流进行区分。第一种方法,可以对输出流调用shutdown函数进行半关闭,从而不会影响到输入流接收客户端的数据,这是没问题

从理解js双重递归执行顺序到用递归方式实现二叉树中序遍历

今天在学习力扣上94题二叉树的中序遍历时,js的实现方法之一是递归,但是函数内递归是双重,花了一些时间来理解双重递归调用的执行顺序。先看如下例子,参考文章(双递归的执行过程理解)示例代码如下:constfn=(n)=>{if(n>0){console.log('n1====',n)fn(n-1)console.log(

微软AIGC in a Day-探索人工智能与行业应用实践沙龙-参后感

先来看下宣传海报活动介绍总结活动主题:探索人工智能与行业应用实践沙龙微软PowerPlatform携手GPT,从应用层面深入AI+低代码开发,一场探索人工智能与行业应用实践的技术盛宴即将到来!9月16日,「探索人工智能与行业应用实践沙龙」,数位来自AI、低代码领域的技术专家,将通过**技术分享、案例实操等形式,带来AI

美国调查公司 Digital Discovery 利用OpenText Encase 调查取证工具发现隐藏在数据中的事实

美国调查公司依靠OpenTextEnCase来分析数据挑战备受瞩目的复杂案件需要全面的取证解决方案;需要快速确定关键文档和证据的优先级;需要最新的支持来访问隐藏在多个来源和格式中的数据。结果为客户提供强大的取证调查解决方案;加速可辩护证据收集和分析;确保为最广泛的设备、格式和系统提供最新支持。故事DigitalDisc

2024字节跳动校招面试真题汇总及其解答(五)

17.TCP的拥塞控制TCP的拥塞控制是指在TCP连接中,发送端和接收端通过协作来控制网络中数据包的流量,避免网络拥塞。TCP的拥塞控制是TCP协议的重要组成部分,它可以确保TCP连接的稳定性和可靠性。TCP的拥塞控制主要有以下几个目的:防止网络拥塞:当网络中的数据包流量过大时,会导致网络拥塞,从而导致数据包丢失、延迟

热文推荐