用ffmpeg和denoiser来对视频进行AI降噪
前言
本文所指降噪也可以说是人声增强,即人声以外的所有声音均为噪音
昨天想给两段视频降噪,降噪功能估计很多视频剪辑软件里面已经集成了
但是我没装,也不想装剪辑软件 所以找了一下有没有只轻便的使用开源代码工具就能对视频降噪的方法。
搜索出来基本只有ffmpeg+sox的降噪方案
比如:https://www.bilibili.com/video/BV1Mp411f7F
sox是一种基于传统降噪算法的工具,试了试并不能满足我的需求
后面又折腾了一下AI降噪,用facebook开源的denoiser以及ffmpeg对视频完成了降噪,尽管denoiser主要是为视频通话等场景开发的实时降噪AI,但是用来处理视频效果也挺不错的
下面这段视频作为例子展示了denoiser的降噪效果
原视频

降噪后

对视频降噪处理
和之前的文章一样,写了一个colab示例
https://colab.research.google.com/drive/1_TLwUNTIHkwXOW_JqoYYRWIv7KioP4WN?usp=sharing
没有环境或者只是偶尔使用的同学在colab上处理视频就足够了
先安装denoiser
把要处理的视频放进一个空文件夹做工作区 并在里面创建out和in两个文件夹
之后用ffmpeg从视频中分离音轨,因为denoiser是在采样率16000上面训练的,所以将音频采样率转为16000再进行之后处理的话会有较好的效果
如果音轨太长直接处理的话,显存会塞爆需要将音轨切片,音轨长度可以从16秒到1分多不等 根据自己设备来调整,如果是无GPU环境的话最好调低点
这里将音轨以1分钟为常读切割成若干份
然后将分割前的音轨删除,之后就可以用denoiser进行降噪了,如果是无GPU环境就把 --device cuda 给去掉
本身是实时降噪的模型,所以GPU场景下处理速度非常快,CPU则需要等待一段时间
处理好之后 out文件夹内会有对应的noisy文件和,enhanced文件,分别对应噪声和去噪的音频。
噪声文件没什么用,所以可以直接删除了。
为之后ffmpeg合成音轨,把文件路径写入一个txt文件
然后用ffmpeg把enhanced文件合成
最后用合成后得到的降噪音轨替换视频本身的音轨,就可以得到降噪的视频了

