如何使用ffmpeg给视频减震去抖

之前自己发过一些记录仪拍下来的画面,你们可能已经看过了,例如:

最适合骑行的罐装饮料

然而,自己这个骑行记录仪,仅仅是很低端的一款,防抖功能很差,远远比不了GoPro那些高端的户外运动记录仪,很多时候,自己骑行没什么感觉,而看自己录下来的画面就会抖震颠簸到晕车了,为此,我一咬牙,一跺脚,一狠心,买,买不起GoPro,就上Goo歌搜索了一下,软件去抖减震的方法,还真的有,并且是免费开源的工具ffmpeg,这东西恰好就是我长期以来一直喜欢用来做视频处理的工具,那就正合我意了。

先上一个例子

先用如下命令参数对原始视频文件做一下处理,生成一个分析记录抖动状态的transforms.trf的中间文件

ffmpeg -i 20230410_183306_USTB减震防抖.MOV -vf vidstabdetect=shakiness=7 -f null -

然后用下面的命令和参数再使用该中间数据文件对原始视频做处理,生成去抖减震的视频文件:

ffmpeg -i 20230410_183306_USTB减震防抖.MOV -vf vidstabtransform=smoothing=30:zoom=5:input="transforms.trf" 20230410_183306_USTB减震防抖版.MOV

处理前用potplayer生成的视频信息文件:

处理后用potplayer生成的视频信息文件:

免安装

看到这里就急着去百毒搜索下载安装ffmpeg的朋友们等等!不要急,ffmpeg十分可能已经躺在你自己电脑里面某个犄角旮旯的地方了,它经常被其它各种视频编辑器包括在自身的安装路径下面了,这些图形化界面的视频编辑器都是对ffmpeg在图形化界面上的封装,但是,封装就会只挑选最常用的功能封装,而去抖减震这种犄角旮旯的需求,很多常见的视频编辑器并没有提供界面直接用,我们所需要的仅仅就是深入安装路径里面找到ffmpeg.exe这个文件,直接在命令行里面去使用它这些强大的功能。

再来看看这些命令参数

第一步是vidstabdetect分析视频的抖动

shakiness 原始视频抖动的剧烈程度,1为抖动最小,10为抖动最大,默认是5,

accuracy 取值范围:1到15,设置检测过程的准确性,1表示低精度,15表示高精度,默认15

stepsize 设置搜索过程的间隔值(扫描尺度)。最低是1像素分辨率扫描,最高是32像素分辨率扫描,默认为6,取值越大,则扫描像素分辨率越粗,生成的trf文件体积越小,生成的速度越快,取值越小,则生成trf文件体积越大生成的速度越慢。

result 指定所生成的trf文件的文件名,可以省略, 默认名为transforms.trf

show 把内部转换生成的视频显示出来,默认不显示,设为1则会显示可视化出来。

-f null - 仅仅执行该第一步,不生成第二步的最终视频文件

第二步是vidstabtransform对视频减震去抖处理

input 使用第一步所生成的trf文件,指定文件名,可以省略,默认使用transforms.trf,比如我可以在第一步使用不同的参数来生成多个不同的trf文件,在第二步使用这多个不同的trf文件来生成不同的去抖减震视频来对比不同的效果,寻找对一个原始视频文件的最优参数

smoothing 默认值是10,表示减抖算法根据当前帧的前10帧和后10帧来处理当前帧,也就是前后加起来一共20帧来处理当前帧的抖动,该值越小,则减抖的力度越弱,该值越大,则减抖的力度越强,当然减抖越强,也就意味着如果是头戴式摄像头跟随脑袋转动目光视线而看向目标的加速度越小越弱,尤其是空战模拟的传统头瞄trackir的虚拟座舱视景或现代VR盔摄的绿幕前真实座舱真实杆、舵、手的画面就可能会卡晕,这个smoothing的值,可以有一个简单的计算依据,就是videofps/2,也就是原始视频帧频的一半,物理含义就是,减抖减小的是一秒以内的抖动,或者说是频率1Hz以上的抖动,或者说是人自己的脑袋无论是点头还是摇头不会快到频率1Hz以上,1Hz以上的高频抖动减去掉,只剩下1Hz一下的抖动在视频里面,这样的视频给人看应该不会感觉到难受,能那么快转脑袋还不会晕的大概只有鸟类:

也就是如果你做视频给鸟看这个数值可以很小,反过来如果减抖处理视频给树懒看则需要十秒长度以上的减抖……

zoom 视频缩放的比例,正数是放大,负数是缩小,默认是零。设定为负值让视频缩小,那么四周全部会包上黑边吗?不,ffmpeg默认的处理是在四边补足画面,用画面的边缘部分镜像延伸扩展,使得最终看起来好像没有黑边,但是更实用的是设定为正值,让视频画面放大,这样就不会有任何边缘扩展了,但是视频画面会裁剪四边,比如我上面的减抖处理视频的画面,原始视频使用骑行记录仪摄的,画面右下角有一串日期时间显示的文字,在用放大减抖处理后,整个时间显示的文字就全都被裁剪没了,但是对于我这个骑行记录仪来说又是很好的处理,因为骑行记录仪本身的设计制造是视场角非常大,远大于一般普通的摄录设备,因而人们在电脑上查看骑行记录仪的原始视频的时候就会觉得画面有变形,整体呈现一个凸面球形的世界,尤其是画面四周围变形严重,因此将骑行记录仪视频放大截掉四周围一部分画面后在来看就会舒适很多,并且裁剪画面会使最终生成的视频文件比原始文件更小。

用上面的各种参数来转换:

ffmpeg -i 三山五园绿道.MOV -vf vidstabdetect=stepsize=32:shakiness=10:accuracy=10:result=transform_vectors.trf -f null -
ffmpeg -i 三山五园绿道.MOV -y -vf vidstabtransform=input=transform_vectors.trf:zoom=0:smoothing=10 三山五园绿道稳定版.MOV

这个处理过的视频在这里:

软件减震去抖处理过的视频一则

最简化版本

能省略的参数都给省略掉,都使用ffmpeg所默认推荐的数值,懒人减抖命令是:

ffmpeg -i 骑车看飞机场.MOV -vf vidstabdetect -f null -

ffmpeg -i 骑车看飞机场.MOV -vf vidstabtransform 骑车看飞机场stabilized.MOV

额外:并列两视频

得到减震视频后,我们往往会把它和原始视频左右并列拼接合成为一个对比视频,只需要vstack和hstack两个过滤器参数即可。

垂直排布:

ffmpeg -i 原视频.mkv -i 减震视频.mkv  -filter_complex vstack 合并视频.mkv

水平排布:

ffmpeg -i 原视频.mkv -i 减震视频.mkv  -filter_complex hstack 合并视频.mkv

这两个stack参数是不是很眼熟?很像上一期我讲到的ONLYOFFICE表格中的新的矩阵操作函数:

如何在表格里面使用VSTACK、HSTACK等函数

友情提示

小抖怡情,中抖健身,强抖灰飞烟灭……

学会了软减抖之后,自己特意撸了一段搓板路,然后用ffmpeg减震去抖,效果如下:

搓板路颠簸的软减震效果

减抖后也变不成平滑柔顺如飘柔的样子,而减抖前可把我颠吐了,大家可千万不要跟我学!

参考文献:

vid.stab - Features

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt扫盲-QAbstractSeries理论总结

QAbstractSeries理论总结 一、概述二、常用函数1. 属性2. 设置功能3. 显示隐藏4. 与 绘图的交互 三、信号 一、概述 QAbstractSeries类是所有Qt图表线的基类。通常,特定于序列类型的继承类会被使用,而不是这个基类。这个基类只是提供了一些管理和控制这…

再聊 MySQL 聚簇索引

为什么是再次理解呢?因为松哥之前写过相关的文章介绍过聚簇索引,但是感觉还不够,因此今天想再来和小伙伴们聊一聊这个话题。 1. 什么是聚簇索引 数据库的索引从不同的角度可以划分成不同的类型,聚簇索引便是其中一种。 聚簇索引…

数据库基础篇 《4. 运算符》

目录 1. 算术运算符 1.加法与减法运算符 2.乘法与除法运算符 3.求模(求余)运算符 2. 比较运算符 1.等号运算符 2.安全等于运算符 3.不等于运算符 4. 空运算符 5. 非空运算…

【架构】微前端

文章目录 概述优劣优点缺点 微前端的整体架构微前端部署平台微前端运行时基于 SPA 的微前端架构 应用生命周期 方案qiankun 主应用qiankun微应用Vue 2 微应用 来源 概述 微前端不是单纯的前端框架或者工具,而是一套架构体系,这个概念最早在 2016 年底被…

helm部署相关服务过程中问题记录

在学习helm部署相关服务过程中出现一些相关问题,自己记录并供大家一起学习!!! 【问题1】部署helm 获取软件包失败 在通过wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz文件过程发现无法…

叔可忍婶不可忍!马斯克3月呼吁暂停人工智能,4月却创立TruthGPT

2018年马斯克退出了OpenAI团队。 2022年11月,ChatGPT在北美大陆问世。 2023年3月21日,马斯克在未来生命,签署并呼吁,暂停高级人工智能的研发。 2023年4月18日马斯克创立了TruthGPT。 同时,亚马逊,也创立了B…

RabbitMQ-消息模型

什么是MQ MQ全称是Message Queue,即消息对列!消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没…

AttributeError: ‘LTP‘ object has no attribute ‘init_dict‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Nginx专题-基于多网卡的主机配置

文章目录 Nginx 基于多网卡的主机实现一、虚拟机前置环境准备ifcfg-ens32配置文件的内容参考ifcfg-ens33配置文件的内容 二、案例演示修改nginx.conf配置文件解决中文乱码 Nginx 基于多网卡的主机实现 一、虚拟机前置环境准备 点击虚拟机右下角的 红色标框按钮,然后…

设计模式 -- 迭代器模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

Java的对象克隆

本节我们会讨论 Cloneable 接口,这个接口指示一个类提供了一个安全的 clone() 方法。 Object 类提供的 clone() 方法是 “浅拷贝”,并没有克隆对象中引用的其他对象,原对象和克隆的对象仍然会共享一些信息。深拷贝指的是:在对象中…

关于Netty使用中黏包拆包带来报错问题及解决

文章目录 问题现象解决总结 问题现象 业务场景:雷达作为客户端,平台作为服务端,采用TCP/IP协议的socket连接,数据包采用字节的二进制数据传输平台与雷达的通信和数据解析,在我接手时,已经开发完成&#xf…

如何开发一款用户体验优秀的语音交友app?

在数字时代,人们越来越依赖智能手机上的应用程序来与他人进行交流。其中,语音交友app成为了最受欢迎的应用之一。然而,开发一款成功的语音交友app需要深入了解用户需求与体验。本文将探讨如何开发一款用户体验优秀的语音交友app。 着眼于用户…

文心一格,百度AI作画产品

文章目录 AIGC什么是AI作画?Prompt文心一格使用方法注册账号使用AI绘图 AIGC的未来发展结语 AIGC AIGC(AI Generated Content)是指利用人工智能生成内容。是利用人工智能来生成你所需要的内容,GC的意思是创作内容。与之相对应的概…

Linux-驱动开发-基础温习

一、裸机开发和驱动开发的区别: 裸机开发:底层(相对于linux来说),库 二、linux驱动开发-根据各种框架进行开发 1、 外设比较多,资源多,资料非常少,官方的SDK;直接操作寄存器不显示…

JUC高级十二-ReentrantLock、ReentrantReadWriteLock、StampedLock

无锁→独占锁→读写锁→邮戳锁 1. 关于锁的大厂面试题 你知道Java里面有哪些锁?你说你用过读写锁,锁饥饿问题是什么?有没有比读写锁更快的锁?StampedLock知道吗?(邮戳锁/票据锁)ReentrantReadWriteLock有锁降级机制策略你知道吗&#xff1…

ChatGPT | 申请与使用new bing的实用教程

1. 教程参考: https://juejin.cn/post/7199557716998078522 2.在参考上述教程遇到的问题与解决 2.1 下载dev浏览器的网址打不开 egde dev下载地址(上面网站上的)我电脑打不开 换用下面的网址即可 https://www.microsoftedgeinsider.com/z…

九种 OOM 常见原因及解决方案(IT枫斗者)

九种 OOM 常见原因及解决方案(IT枫斗者) 什么是OOM? OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明:Thrown when the Java Virtual Machine canno…

代码随想录算法训练营第三十六天|435. 无重叠区间、763.划分字母区间 、56. 合并区间

文章目录 重叠问题435. 无重叠区间763.划分字母区间:star:56. 合并区间 重叠问题 这几道题都是判断区间重叠,区别就是判断区间重叠后的逻辑。 435. 无重叠区间 链接:代码随想录 解题思路: 这道题和射气球的题几乎思路一样 不断求出重叠的最小右区间&a…

通俗讲解什么是Socket通讯

Socket通讯原理 1、什么是Socket? Socket,即套接字。就是两台主机之间逻辑连接的端点。(通俗来说:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)。 Socket是一套…