文章目錄
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
從ffmpeg的輸出信息中可以看到,輸入的視頻文件中包含視頻流和音頻流,輸出信息中只有音頻流
從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
輸出文件夾內容:
在使用的時候會自動下載模型文件,也可以預先下載後放到文件夾/pretrained_models/2stems中,跟spleeter同級目錄
查看效果
輸出的.wav文件比原視頻要大不少,不過結果還是不錯的
能正確分離出來了人聲,背景聲雖然略帶人聲,但應該是做了模糊,會不那麼清晰
源文件和輸出文件可見百度雲下載:
csdn待補全
ffmpeg抽取音視頻文件中的H264視頻流
有時在視頻編輯場景中需要將視頻流提取出來進行編輯,比如給視頻重新配音等,這時就需要單獨提取視頻流了,用ffmpeg的命令提取出視頻文件的視頻流如下
ffmpeg.exe -i 1.mp4 -vcodec copy -an output.mp4
用-i查看輸出視頻,可看出僅有一個視頻流
ffmpeg抽取音視頻文件中的H265數據
首先需要看一下包含h265視頻的視頻流顯示的內容
提取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視頻
用支持的播放器,比如WMP即可直接播放