一、基礎概念
- 採樣頻率(Sampling Rate),單位時間內採集的樣本數,是採樣週期的倒數,指兩個採樣之間的時間間隔。
採樣頻率必須至少是信號中最大頻率分量頻率的兩倍,否則就不能從信號採樣中恢復原始信號,這其實就是著名的香農採樣定理。
CD音質(一般的音頻)採樣率爲 44.1 kHz,人耳只能聽到20Hz到20khz範圍的聲音。
-
量化深度,表示一個樣本的二進制的位數,即樣本的比特數。
-
聲道數,記錄聲音時,如果每次生成一個聲波數據,稱爲單聲道;每次生成兩個聲波數據,稱爲雙聲道(立體聲)。
-
文件大小(B)=採樣頻率(Hz)×錄音時間(S)×(量化深度/8)× 聲道數
如:錄製1分鐘採樣頻率爲44.1KHz,量化深度爲16位,立體聲的聲音(CD音質),文件大小爲:
44.1×1000×60×(16/8)×2=10584000B≈10.09M
-
單位
- dBSPL,通常所說的dB,使用聲壓作爲被測量,選擇20μPa作爲基準值。
- dBm,使用功率作爲被測量,選擇1mW作爲基準值。
- dBu,使用電壓作爲被測量,選擇0.775V作爲基準值。
- dBV,和dBu一樣,使用電壓作爲被測量,選擇1V作爲基準值。
- dBFS,和上面的量都不相同,上面的量都是測量模擬值的,dBFS是測量數字音頻的,其選擇的基準值爲sample的最大值爲0dBFS,其他的值都爲負值。
-
PCM(Pulse Code Modulation)編碼,即通過脈衝編碼調製方法生成數字音頻數據的技術或格式,是一種無損編碼格式,是音頻模擬信號數字化的一種方法,需要經過採樣、量化和編碼過程,以實現音頻模擬信號數字化。
-
參考
二、FFmpeg
- 參考
https://trac.ffmpeg.org/wiki/Concatenate
https://blog.csdn.net/leixiaohua1020/article/details/15811977
2.1、基礎說明
- ffmpeg 輸入文件由 -i 參數指定,可以指定多個。
2.2、Filters
官網: http://www.ffmpeg.org/ffmpeg-filters.html
命令參數爲: -filter_complex
- Filter中需要使用到輸入文件時則需要用到 [] 來指定流操作。
- 輸入文件中的某個流
[{輸入文件編號}:{音頻流a或視頻流v}:{多個流中的第幾個流}]
如: [0:a:0]
- 流名稱,一般爲組合命令過程中的輸出流。
[{流名稱}]
如: [czb]
- 操作格式
一個 Filter 操作包含3個部分:
- 輸入流
- 指令
- 輸出流
指令中的參數以冒號 ( : ) 隔開。
如: “[in] amix=inputs=2:duration=first [out]”
多個 Filter 可以組合使用。以分號 ( ; ) 隔開。
音頻混合: amix
inputs: 一共有多少個輸入,默認爲2
duration: 輸出的時長定義枚舉
longest 等於最長的輸入的長度 (默認值)
shortest 等於最短的輸入的長度
first 等於第一個輸入的長度
dropout_transition: 結束時淡出的持續時間(秒) 默認爲 2 秒
音頻循環: aloop
loop: 循環次數, -1 表示無限循環, 默認 爲 0
size: 樣本的最大的大小, 默認爲 0
start: 循環的第一個樣本, 默認爲0
一般來說循環時 size 要足夠大, 否則沒有辦法循環, 一般直接設爲 2e+9
拼接: concat
n: 輸入的個數
v: 輸出視頻流的數量
a: 輸入音頻流的數量
音量調節
[in] volume=X [out]
X值爲調節的倍數
如原始音量爲1, 增大一倍爲2, 縮小一倍爲0.5
2.3 其他
- 獲取音頻文件信息
ffprobe -v quiet -print_format json -show_format -show_streams {file_name}
- 獲取ffmpeg支持的音視頻格式
ffmpeg -formats
- 按照長度分割音頻
ffmpeg -i {輸入音頻} -f segment -segment_time {每一段的長度} -ac 1 -ar 16000 {輸出音頻 如:audio%02d.wav}
- 音頻拼接
ffmpeg -i {輸入文件0} ... -i {輸入文件n} -filter_complex "[{輸入文件編號}:{音頻流a或視頻流v}:{第幾個流}] ... concat=n={一共多少個輸入}:v={每個輸入有多少個視頻流輸出}:a={每個輸入有多少個音頻流輸出} {輸出流的名稱}" -map "{輸出流的名稱}" {輸出文件}
如: ffmpeg -i part1.m4a -i part2.m4a -i part3.m4a -filter_complex "[0:a:0] [1:a:0] [2:a:0] concat=n=3:v=0:a=1 [czb]" -map "[czb]" output.m4a
三、pydub
3.1、安裝
https://github.com/jiaaro/pydub
pip install pydub
3.2、基礎使用
- 主要使用的是SegmentAudio類
from pydub import AudioSegment
- 引入文件
ogg_version = AudioSegment.from_ogg("never_gonna_give_you_up.ogg")
flv_version = AudioSegment.from_flv("never_gonna_give_you_up.flv")
mp4_version = AudioSegment.from_file("never_gonna_give_you_up.mp4", "mp4")
wma_version = AudioSegment.from_file("never_gonna_give_you_up.wma", "wma")
aac_version = AudioSegment.from_file("never_gonna_give_you_up.aiff", "aac")
-
音量調節可以直接使用+/-來操作增減db
-
導出音頻
{AudioSegment Object}.export("{filename}.mp3", format="mp3", bitrate="{bitrate}")