wav文件格式及ffmpeg處理命令


wav文件頭詳解

符合RIFF(Resource Interchange File Format)規范的wav文件的文件頭記錄了音頻流的編碼參數等基本信息。wav文件由多個塊組成,至少包含RIFF標志塊、格式塊、數據頭塊和數據塊,所有數據均以小端模式存儲。(小端模式:按順序讀取時,先讀取的是數據的低位部分,后讀取的是數據的高位部分。如數據0x11, 0x00代表的是十六進制數0x0011,也就是3)。

一般的wav文件頭由以下數據組成:

偏移地址 字節數 數據類型 內容
00H ~ 03H 4 char "RIFF", 資源交換文件RIFF標志,固定不變
04H ~ 07H 4 long

文件長度,從下個字節開始到文件結束的總字節數。

計算結果為文件大小(可以從文件屬性中看)+8個字節(00H~07H)

08H ~ 0BH 4 char "WAVE", WAVE文件標志,固定不變
0CH ~ 0FH 4 char "fmt ", fmt標志(最后一位為空格),固定不變
10H ~ 13H 4 long 格式長度,一般為00000010H(=16),代表16PCM(量化結果為16bit)
14H ~ 15H 2 int 格式類別,1表示線性PCM編碼
16H ~ 17H 2 int 通道數,1為單聲道,2為雙聲道
18H ~ 1BH 4 long 采樣頻率(每秒的樣本數)
1CH ~ 1FH 4 long 每秒字節數,其值為:采樣頻率*通道數*樣本數據位數/8
20H ~ 21H 2 int DATA數據塊的調整數(字節),其值為:通道數*樣本數據位數/8
22H ~ 23H 2 int 樣本數據位數,0010H即16,代表一個量化兩本占2字節
24H ~ 27H 4 char "data", data數據塊標志,固定不變
28H ~ 2BH 4 long wav文件音頻數據所占大小
2CH ~ ... ...   真正存儲的音頻數據(不屬於文件頭了)

上面是一般wav文件的文件頭數據,而通過ffmpeg轉碼的wav文件於此有些差距,在格式塊和數據頭塊之間添加了一些ffmpeg的信息,如下圖。

偏移地址 字節數 數據類型 內容
00H ~ 23H 36   同上表的00H~23H一致
24H ~ 27H 4 char "LIST", LIST塊標志,固定不變
28H ~ 2BH 4 long LIST塊占用的字節數,在這里為26字節
2CH ~ 45H 26   LIST塊內容
46H ~ 49H 4 char "data", data數據塊標志,固定不變
4AH ~ 4DH 4 long wav文件音頻數據所占大小

 

ffmpeg處理命令

1. 將格式不正確的wav文件轉碼為ffmpeg格式的wav文件:

  ffmpeg -i "sourceFile" -y "targetFile"

2. 將mp3文件轉碼為ffmpeg格式的wav文件(編碼格式為16PCM、小端模式):

  ffmpeg -i "sourceFile" -acodec pcm_s16le -y "targetFile"

 3. 音頻切割:

  ffmpeg -i "sourceFile" -ss startTime -to endTime -y "targetFile"(按起點和終點切割)

  ffpmeg -i "sourceFile" -ss startTime -t duration -y "targetFile"(按起點和持續時間切割)

 

參考文章

1. WAV文件格式

2. wav文件詳解

3. wav文件格式分析

4. FFmpeg介紹及參數詳細說明

5. java切割wav音頻文件

6. java讀取wav文件(波形文件)並繪制波形圖的方法

7. WAV格式中常見的壓縮編碼

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM