之前自己发过一些记录仪拍下来的画面,你们可能已经看过了,例如:
算了,该视频上传了不让发出来………………
然而,自己这个骑行记录仪,仅仅是很低端的一款,防抖功能很差,远远比不了 GoPro 那些高端的户外运动记录仪,很多时候,自己骑行没什么感觉,而看自己录下来的画面就会抖震颠簸到晕车了,为此,我一咬牙,一跺脚,一狠心,买,买不起 GoPro,就上 Goo 歌搜索了一下,软件去抖减震的方法,还真的有,并且是免费开源的工具 ffmpeg,这东西恰好就是我长期以来一直喜欢用来做视频处理的工具,那就正合我意了。
(相关资料图)
先用如下命令参数对原始视频文件做一下处理,生成一个分析记录抖动状态的 transforms.trf 的中间文件
然后用下面的命令和参数再使用该中间数据文件对原始视频做处理,生成去抖减震的视频文件:
处理前用 potplayer 生成的视频信息文件:
处理后用 potplayer 生成的视频信息文件:
看到这里就急着去百毒搜索下载安装 ffmpeg 的朋友们等等!不要急,ffmpeg 十分可能已经躺在你自己电脑里面某个犄角旮旯的地方了,它经常被其它各种视频编辑器包括在自身的安装路径下面了,这些图形化界面的视频编辑器都是对 ffmpeg 在图形化界面上的封装,但是,封装就会只挑选最常用的功能封装,而去抖减震这种犄角旮旯的需求,很多常见的视频编辑器并没有提供界面直接用,我们所需要的仅仅就是深入安装路径里面找到 ffmpeg.exe 这个文件,直接在命令行里面去使用它这些强大的功能。
shakiness
原始视频抖动的剧烈程度,1 为抖动最小,10 为抖动最大,默认是 5,
accuracy
取值范围:1 到 15,设置检测过程的准确性,1 表示低精度,15 表示高精度,默认 15
stepsize
设置搜索过程的间隔值(扫描尺度)。最低是 1 像素分辨率扫描,最高是 32 像素分辨率扫描,默认为 6,取值越大,则扫描像素分辨率越粗,生成的 trf 文件体积越小,生成的速度越快,取值越小,则生成 trf 文件体积越大生成的速度越慢。
result
指定所生成的 trf 文件的文件名,可以省略, 默认名为transforms.trf
show
把内部转换生成的视频显示出来,默认不显示,设为 1 则会显示可视化出来。
-f null -
仅仅执行该第一步,不生成第二步的最终视频文件
input
使用第一步所生成的 trf 文件,指定文件名,可以省略,默认使用transforms.trf
,比如我可以在第一步使用不同的参数来生成多个不同的 trf 文件,在第二步使用这多个不同的 trf 文件来生成不同的去抖减震视频来对比不同的效果,寻找对一个原始视频文件的最优参数
smoothing
默认值是 10,表示减抖算法根据当前帧的前 10 帧和后 10 帧来处理当前帧,也就是前后加起来一共 20 帧来处理当前帧的抖动,该值越小,则减抖的力度越弱,该值越大,则减抖的力度越强,当然减抖越强,也就意味着如果是头戴式摄像头跟随脑袋转动目光视线而看向目标的加速度越小越弱,尤其是空战模拟的传统头瞄 trackir 的虚拟座舱视景或现代 VR 盔摄的绿幕前真实座舱真实杆、舵、手的画面就可能会卡晕,这个 smoothing 的值,可以有一个简单的计算依据,就是videofps/2
,也就是原始视频帧频的一半,物理含义就是,减抖减小的是一秒以内的抖动,或者说是频率 1Hz 以上的抖动,或者说是人自己的脑袋无论是点头还是摇头不会快到频率 1Hz 以上,1Hz 以上的高频抖动减去掉,只剩下 1Hz 一下的抖动在视频里面,这样的视频给人看应该不会感觉到难受,能那么快转脑袋还不会晕的大概只有鸟类:
也就是如果你做视频给鸟看这个数值可以很小,反过来如果减抖处理视频给树懒看则需要十秒长度以上的减抖……
zoom
视频缩放的比例,正数是放大,负数是缩小,默认是零。设定为负值让视频缩小,那么四周全部会包上黑边吗?不,ffmpeg 默认的处理是在四边补足画面,用画面的边缘部分镜像延伸扩展,使得最终看起来好像没有黑边,但是更实用的是设定为正值,让视频画面放大,这样就不会有任何边缘扩展了,但是视频画面会裁剪四边,比如我上面的减抖处理视频的画面,原始视频使用骑行记录仪摄的,画面右下角有一串日期时间显示的文字,在用放大减抖处理后,整个时间显示的文字就全都被裁剪没了,但是对于我这个骑行记录仪来说又是很好的处理,因为骑行记录仪本身的设计制造是视场角非常大,远大于一般普通的摄录设备,因而人们在电脑上查看骑行记录仪的原始视频的时候就会觉得画面有变形,整体呈现一个凸面球形的世界,尤其是画面四周围变形严重,因此将骑行记录仪视频放大截掉四周围一部分画面后在来看就会舒适很多,并且裁剪画面会使最终生成的视频文件比原始文件更小。
这个处理过的视频在这里:
能省略的参数都给省略掉,都使用 ffmpeg 所默认推荐的数值,懒人减抖命令是:
得到减震视频后,我们往往会把它和原始视频左右并列拼接合成为一个对比视频,只需要 vstack 和 hstack 两个过滤器参数即可。
垂直排布:
水平排布:
这两个 stack 参数是不是很眼熟?很像上一期我讲到的 ONLYOFFICE 表格中的新的矩阵操作函数:
算了,没有发在B站上……
小抖怡情,中抖健身,强抖灰飞烟灭……
学会了软减抖之后,自己特意撸了一段搓板路,然后用 ffmpeg 减震去抖,效果如下:
减抖后也变不成平滑柔顺如飘柔的样子,而减抖前可把我颠吐了,大家可千万不要跟我学!
[1] vid.stab - Features: http://public.hronopik.de/vid.stab/features.php?lang=en
X 关闭
Copyright © 2015-2022 欧洲餐饮网版权所有 备案号:沪ICP备2022005074号-23 联系邮箱: 58 55 97 3@qq.com