用ffmpeg和denoiser來(lái)對(duì)視頻進(jìn)行AI降噪
前言
本文所指降噪也可以說(shuō)是人聲增強(qiáng),即人聲以外的所有聲音均為噪音
昨天想給兩段視頻降噪,降噪功能估計(jì)很多視頻剪輯軟件里面已經(jīng)集成了
但是我沒(méi)裝,也不想裝剪輯軟件 所以找了一下有沒(méi)有只輕便的使用開(kāi)源代碼工具就能對(duì)視頻降噪的方法。
搜索出來(lái)基本只有ffmpeg+sox的降噪方案
比如:https://www.bilibili.com/video/BV1Mp411f7F
sox是一種基于傳統(tǒng)降噪算法的工具,試了試并不能滿(mǎn)足我的需求
后面又折騰了一下AI降噪,用facebook開(kāi)源的denoiser以及ffmpeg對(duì)視頻完成了降噪,盡管denoiser主要是為視頻通話(huà)等場(chǎng)景開(kāi)發(fā)的實(shí)時(shí)降噪AI,但是用來(lái)處理視頻效果也挺不錯(cuò)的
下面這段視頻作為例子展示了denoiser的降噪效果
原視頻

降噪后

對(duì)視頻降噪處理
和之前的文章一樣,寫(xiě)了一個(gè)colab示例
https://colab.research.google.com/drive/1_TLwUNTIHkwXOW_JqoYYRWIv7KioP4WN?usp=sharing
沒(méi)有環(huán)境或者只是偶爾使用的同學(xué)在colab上處理視頻就足夠了
先安裝denoiser
把要處理的視頻放進(jìn)一個(gè)空文件夾做工作區(qū) 并在里面創(chuàng)建out和in兩個(gè)文件夾
之后用ffmpeg從視頻中分離音軌,因?yàn)閐enoiser是在采樣率16000上面訓(xùn)練的,所以將音頻采樣率轉(zhuǎn)為16000再進(jìn)行之后處理的話(huà)會(huì)有較好的效果
如果音軌太長(zhǎng)直接處理的話(huà),顯存會(huì)塞爆需要將音軌切片,音軌長(zhǎng)度可以從16秒到1分多不等 根據(jù)自己設(shè)備來(lái)調(diào)整,如果是無(wú)GPU環(huán)境的話(huà)最好調(diào)低點(diǎn)
這里將音軌以1分鐘為常讀切割成若干份
然后將分割前的音軌刪除,之后就可以用denoiser進(jìn)行降噪了,如果是無(wú)GPU環(huán)境就把 --device cuda 給去掉
本身是實(shí)時(shí)降噪的模型,所以GPU場(chǎng)景下處理速度非??欤珻PU則需要等待一段時(shí)間
處理好之后 out文件夾內(nèi)會(huì)有對(duì)應(yīng)的noisy文件和,enhanced文件,分別對(duì)應(yīng)噪聲和去噪的音頻。
噪聲文件沒(méi)什么用,所以可以直接刪除了。
為之后ffmpeg合成音軌,把文件路徑寫(xiě)入一個(gè)txt文件
然后用ffmpeg把enhanced文件合成
最后用合成后得到的降噪音軌替換視頻本身的音軌,就可以得到降噪的視頻了