ffmpeg音視頻文件音視頻流抽取,初步嘗試人聲分離

ffmpeg抽取音視頻文件中的音頻流

音頻流類型

音頻流主流上可分爲AAC、m4a、mp3,

AAC與m4a的區別

AAC是一種音頻編碼形式,m4a是一種封裝形式。打個比方,如同橙汁可以被封裝在易拉罐裏一樣,aac如同橙汁,m4a如同易拉罐。m4a是一種多功能的封裝工具,可以裝進無損的 Apple Lossless 音樂(就是蘋果手機裏的無損音樂),甚至MP3也可以封裝進m4a裏。

aac有兩種,DVD時代的 MPEG-2 AAC 和 高清時代的 MPEG-4 AAC。比較老的 MPEG-2 AAC 標準已經淘汰了,這種編碼的音頻通常用 .aac 後綴;現在的 aac 音頻都是 MPEG-4 AAC 標準的,一般都是用 m4a 來封裝,後綴是 .m4a 。

m4a最早就是蘋果用來封裝它自己的 Apple Lossless 的,蘋果的全系列設備都可以完美支持。

採用AAC音頻編碼形式並且擴展名有AAC.M4A.MP4這三種,不同的硬件可能支持不同的擴展名.如果遇到你的播放器支持播放AAC卻不能播放你放進去的AAC歌曲時.可以改正下擴展名就可以了。

綜上所述M4A與AAC的區別就是,他是屬於AAC衆多編碼中的一種,而且是屬於編碼衆多編碼中優化最好的一種,所以通過該編碼壓縮處理的音樂,音質也是極好極好的。

AAC與mp3的區別

兩者都是有損壓縮音頻編碼的方式,但市面上顯然mp3的普及度要比aac高的多

用ffmpeg查看視頻的信息

使用-i參數可以在命令行中顯示視頻的信息,包含視頻文件的音視頻編解碼格式,視頻時長,比特率等,方便我們做進一步的處理

ffmpeg.exe -i 1.mp4

輸出如下

在這裏插入圖片描述

用ffmpeg抽取AAC音頻流

在命令行中使用命令

ffmpeg.exe -i 1.mp4 -vn -acodec copy output.aac

即可從1.mp4中抽取出音頻流output.aac

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0vpsVlzr-1582979785026)(F2079A73B6A54F36932F67F2EEFDA706)]

從ffmpeg的輸出信息中可以看到,輸入的視頻文件中包含視頻流和音頻流,輸出信息中只有音頻流

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FWyb2jaZ-1582979785026)(E9A06FE9301646499F213F8181C52D24)]

從AAC文件中獲取音軌

音軌是什麼東西

音軌就是在音序器軟件中看到的一條一條的平行“軌道”。每條音軌分別定義了該條音軌的屬性,如音軌的音色,音色庫,通道數,輸入/輸出端口,音量等

分離人聲和背景聲

提取音軌與分離人聲和背景聲可能不是一回事,嘗試使用一個叫做spleeter把一個視頻中人聲和背景聲區分開來

測試系統介紹

  • 系統版本爲:ubuntu14.04.5
  • ffmpeg版本:採用apt-get ffmpeg自動安裝
  • Python版本:3.6.5(anaconda3 5.2自帶版本)

安裝

因爲是測試,所以沒有使用GPU版本,採用的是CPU版本,可以通過pip來安裝

pip install spleeter

需要使用的TensorFlow版本爲1.4,對應的python版本最大爲3.6

測試

測試使用兩個文件,第一個爲自帶音頻文件的audio_example.mp3;第二個爲視頻文件2.mp4

分別使用命令,在文件夾output得到運行後的結果

./spleeter separate -i audio_example.mp3 -p spleeter:2stems -o output
./spleeter separate -i 2.mp4 -p spleeter:2stems -o output

輸出文件夾內容:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-anM6t27u-1582979785026)(F3FE22CAFF7148B2B025AD6C2D67E267)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QQbkaBWU-1582979785026)(5CCA40A84EEB4EA1B9A6C0F330812ED4)]

在使用的時候會自動下載模型文件,也可以預先下載後放到文件夾/pretrained_models/2stems中,跟spleeter同級目錄

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-D5Dox8ca-1582979785026)(1BAE799B729D40EA88D76990EFD9B027)]

查看效果

輸出的.wav文件比原視頻要大不少,不過結果還是不錯的

能正確分離出來了人聲,背景聲雖然略帶人聲,但應該是做了模糊,會不那麼清晰

源文件和輸出文件可見百度雲下載:

csdn待補全

ffmpeg抽取音視頻文件中的H264視頻流

有時在視頻編輯場景中需要將視頻流提取出來進行編輯,比如給視頻重新配音等,這時就需要單獨提取視頻流了,用ffmpeg的命令提取出視頻文件的視頻流如下

ffmpeg.exe -i 1.mp4 -vcodec copy -an output.mp4

用-i查看輸出視頻,可看出僅有一個視頻流

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KMWEQwrM-1582979785026)(2D9FC4BABD294403BDAFB55C821949F7)]

ffmpeg抽取音視頻文件中的H265數據

首先需要看一下包含h265視頻的視頻流顯示的內容

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NqdVRElY-1582979785027)(DD5385EA03454241ACD346515FCC79C7)]

提取h265視頻流的方式則對應爲

ffmpeg.exe -i video-h265.mkv -vcodec copy -an 2.mkv

如果h265視頻包含在mp4容器裏,需要使用如下命令

ffmpeg.exe -i video-h265.mp4 -vcodec copy -an -bsf hevc_mp4toannexb -f hevc

因爲在mp4中存儲的視頻數據並不是標準的annexb格式,需要將mp4的視頻存儲格式存儲爲annexb格式

來看看提取出來的h265視頻

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-csvI3nnP-1582979785027)(C4F5866CFF5C471AB27D92B8240E82B8)]

用支持的播放器,比如WMP即可直接播放

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-66plenEa-1582979785027)(58AD4FD4848243E596DD85F602296F45)]

參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章