用ffmpeg合併音頻文件

1 問題描述html

 

打電話的對話,被拆分紅了兩個PCM文件。其中主叫的錄音文件A.pcm,被叫的錄音爲B.pcm。linux

問題是怎麼合成一個混音的對話文件AB.wav。git

 

2 WAV文件的錄音格式github

 

常見的聲音文件主要有兩種,分別對應於單聲道(11.025KHz 採樣率、8Bit 的採樣值)和雙聲道(44.1KHz 採樣率、16Bit 的採樣值)。
採樣率是指:聲音信號在「模→數」轉換過程當中單位時間內採樣的次數。採樣值是指每一次採樣週期 。
WAVE 文件數據塊包含以脈衝編碼調製(PCM)格式表示的樣本。WAVE 文件是由樣本組織而成的。在單聲道 WAVE 文件中,聲道0表明左聲道,聲道1表明右聲道。
在多聲道WAVE文件中,樣本是交替出現的。

 

下面咱們具體地分析 WAV文件的格式centos

 

endian field name Size 說明 計算方式
big ChunkID 4 文件頭標識,通常就是" RIFF" 四個字母 ASCII 碼錶示的「RIFF」。(0x52494646)
little ChunkSize 4 整個數據文件的大小,不包括上面ID和Size自己 36+SubChunk2Size,或是4 + ( 8 + SubChunk1Size ) + ( 8 + SubChunk2Size ),這是整個數據塊的大小(不包括ChunkID和ChunkSize的大小)
big Format 4 通常就是" WAVE" 四個字母 ASCII 碼錶示的「WAVE」。(0x57415645)
big SubChunk1ID 4 格式說明塊,本字段通常就是"fmt " 新的數據塊(格式信息說明塊)ASCII 碼錶示的「fmt 」——最後是一個空格。(0x666d7420)
little SubChunk1Size 4 本數據塊的大小,不包括ID和Size字段自己 本塊數據的大小(對於PCM,值爲16)。
little AudioFormat 2 音頻的格式說明 PCM = 1 (好比,線性採樣),若是是其它值的話,則多是一些壓縮形式
little NumChannels 2 聲道數 1 => 單聲道  |  2 => 雙聲道
little SampleRate 4 採樣率 採樣率,如 8000,44100 等值
little ByteRate 4 比特率,每秒所須要的字節數 等於: SampleRate * numChannels * BitsPerSample / 8
little BlockAlign 2 數據塊對齊單元 等於:NumChannels * BitsPerSample / 8
little BitsPerSample 2 採樣時模數轉換的分辨率 採樣分辨率,也就是每一個樣本用幾位來表示,通常是 8bits 或是 16bits
big SubChunk2ID 4 真正的聲音數據塊,本字段通常是"data" 新數據塊,真正的聲音數據。ASCII 碼錶示的「data 「(0x64617461) 
little SubChunk2Size 4 本數據塊的大小,不包括ID和Size字段自己 數據大小,即,其後跟着的採樣數據的大小。
little Data N 音頻的採樣數據 真正的聲音數據

 

3 查看錄音的PCM文件ide

 

1 查看錄音的二進制文件
2 給出合成的思路。頭文件的字節數
3 JAVA源碼
4 安裝ffmpeg

 

pcm轉立體聲mp3
ffmpeg -i input1.pcm -i input2.pcm -filter_complex "amovie=input1.pcm [l]; amovie=input2.pcm [r]; [l] [r] amerge" output.mp3 



amr轉混音amr
ffmpeg -i input1.amr -i input2.amr -filter_complex amix=inputs=2:duration=longest  -ab 12.2k -ar 8000 -ac 1 output.amr


在後面加上 -loglevel quiet -y, 能夠覆蓋輸出文件,避免輸出日誌

如: ffmpeg -i input1.amr -i input2.amr -filter_complex amix=inputs=2:duration=longest  -ab 12.2k -ar 8000 -ac 1 output.amr -loglevel quiet -y

 

在作的過程當中,漸漸發現這一切早有工具實現。下面來看看ffmpeg工具。工具

 

 4 ffmpeg的安裝post

ffmpeg 安裝步驟

########################################################################################

root 用戶下安裝下列依賴軟件


1  下載 ffmpeg
wget http://ffmpeg.org/releases/ffmpeg-3.1.2.tar.bz2

2  下載mp3依賴庫libmp3lame
wget http://downloads.sourceforge.net/lame/lame-3.99.5.tar.gz

安裝libmp3lame
tar -zxvf lame-3.99.5.tar.gz
./configure
make
make install

3 安裝yasm 
yum install yasm 

4 安裝Xext 
yum install libXext-devel

5 安裝amr的依賴庫opencore-amr
wget --no-check-certificate https://sourceforge.net/projects/opencore-amr/files/opencore-amr/opencore-amr-0.1.3.tar.gz/download 
./configure
make
make install

6 安裝ffmpeg-3.1.2.tar.bz2
tar -jxvf ffmpeg-3.1.2.tar.bz2

./configure --enable-shared --enable-nonfree --enable-gpl --enable-decoder=aac --enable-demuxer=mov --enable-x11grab --enable-zlib --enable-protocol=http --enable-filter=aformat --enable-filter=volume --enable-filter=aresample --enable-version3 --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb

-----------
configue 必定要沒有錯誤,若是有錯誤,按照提示安裝相應的依賴軟件

make
make install
########################################################################################


安裝好後輸入ffmpeg 查看

若是報錯ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No 
root 下輸入命令
ldconfig

若是獲得
ffmpeg version 3.1.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
  configuration: --enable-shared --enable-nonfree --enable-gpl --enable-decoder=aac --enable-demuxer=mov --enable-x11grab --enable-zlib --enable-protocol=http --enable-filter=aformat --enable-filter=volume --enable-filter=aresample --enable-version3 --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

則安裝成功
ffmpeg安裝步驟

 

5 測試效果測試

 

5.1  1.amr 和 2.amr 是左右聲道的錄音,如今合成混音1_2.amrui

ffmpeg -i 1.amr -i 2.amr -filter_complex amix=inputs=2:duration=longest:dropout_transition=2  -ab 12.2k -ar 8000 -ac 1 1_2.amr

 

5.2  1.wav 和 2.wav是左右聲道的錄音,如今合成立體聲1_2.mp3,即左聲道是1的聲音,右聲道是2的聲音。

 

ffmpeg -i 1.wav -i 2.wav -filter_complex "amovie=1.wav [l]; amovie=2.wav [r]; [l] [r] amerge"  1_2.mp3

 

 

 

雙聲道的pcm轉換爲單聲道的amr,指定編解碼器

ffmpeg -y -f s16le -ar 8000 -ac 2 -i 1.pcm -acodec amr_nb -ab 12.2k -ar 8000 -ac 1 1.amr

 http://blog.csdn.net/xianglingchuan/article/details/54092584

 

 

 

參考資料

1 ffmpeg經常使用轉換命令,支持WAV轉AMR   http://www.cnblogs.com/xiaofengfeng/p/3573025.html

2 WAVE 文件格式分析   http://www.cnblogs.com/liyiwen/archive/2010/04/19/1715715.html

3 How to compile FFmpeg on CentOS, Fedora or RHEL http://ask.xmodulo.com/compile-ffmpeg-centos-fedora-rhel.html

4 Linux下ffmpeg的完整安裝 http://www.cnblogs.com/wanghetao/p/3386311.html

5 linux系統中ffmpeg安裝配置步驟 http://www.111cn.net/sys/linux/82964.htm 

6 error while loading shared libraries https://forum.ivorde.com/ffmpeg-error-while-loading-shared-libraries-libavdevice-so-52-cannot-open-shared-object-file-no-t129.html

7 FFmpeg Filters Documentation  http://ffmpeg.org/ffmpeg-filters.html

8 ffmpeg的中文文檔  https://wanglongqi.github.io/tools/2014/12/23/ffmpegdoc/

9 How to change ffmpeg -threads settings  http://superuser.com/questions/792525/how-to-change-ffmpeg-threads-settings

相關文章
相關標籤/搜索