這篇文章會介紹如何安裝和使用 Python 的 pydub 第三方函式庫,透過 pydub 取得聲音長度、聲道、音量...等基本資訊,以及如何將聲音輸出為不同格式 ( 例如讀取 wav 檔案後輸出為 mp3 格式 )。
原文參考:讀取聲音資訊、輸出聲音
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
輸入下列指令,就能安裝 pydub 函式庫 ( 依據每個人的作業環境不同,可使用 pip 或 pip3 或 pipenv )。
!pip install pydub
如果是使用 Anaconda 的環境,要額外輸入下列指令安裝 ffmpeg 和 ffprobe,不然執行後會發生找不到 ffprobe 的錯誤訊息 ( 使用 Colab 完全不用安裝額外套件 )。
conda install ffmpeg
!pip install ffprobe
參考「pydub Quickstart」說明,可以使用下列的方法,讀取不同格式的聲音檔案:
方法 | 說明 |
---|---|
AudioSegment.from_wav | 讀取 .wav |
AudioSegment.from_mp3 | 讀取 .mp3 |
AudioSegment.from_flv | 讀取 .flv |
如果要讀取影片的音軌檔案,可使用下列的方法:
方法 | 說明 |
---|---|
AudioSegment.from_file("test.mp4", "mp4") | 讀取 .mp4 |
AudioSegment.from_file("test.wma", "wma") | 讀取 .wma |
AudioSegment.from_file("test.aiff", "aiff") | 讀取 .aiff |
下方的程式碼執行後,會使用 from_mp3 方法,讀取資料夾中一個名為 test.mp3 的聲音檔案。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from pydub import AudioSegment
song = AudioSegment.from_mp3("oxxostudio.mp3") # 讀取 mp3 檔案
print(song) # <pydub.audio_segment.AudioSegment object at 0x7faaa545a7f0>
參考「pydub AudioSegment(…).export()」說明,輸出時可以設定以下幾個參數:
參數 | 說明 |
---|---|
format | 輸出格式,預設 mp3,可設定 wav 或 raw。 |
codec | 編碼器,預設自動判斷。 |
bitrate | 壓縮比率,預設 128k,可設定 32k、96k、128k、192k、256k、320k。 |
tags | 夾帶在聲音中的標籤,使用字典格式。 |
cover | 夾帶在聲音中的預覽圖,支援 jpg、png、bmp 或 tiff 格式。 |
下方的程式執行後,會先讀取一段 mp3 聲音檔,接著以 96k 的壓縮比輸出。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from pydub import AudioSegment # 載入 pydub 的 AudioSegment 模組
song = AudioSegment.from_mp3("oxxostudio.mp3") # 讀取 mp3 檔案
song.export("oxxostudio.wav", format="wav") # 輸出為 wav
print('ok') # 輸出後印出 ok
下方的程式執行後,會讀取 mp3 聲音檔並轉換成 wav 格式輸出。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from pydub import AudioSegment # 載入 pydub 的 AudioSegment 模組
song = AudioSegment.from_mp3("oxxostudio.mp3") # 讀取 mp3 檔案
song.export('output.wav', bitrate="96k") # 輸出壓縮比率為 96k 的 mp3 檔案
print('ok') # 輸出後印出 ok
使用 pydub AudioSegment 讀取 mp3 檔案後,可以使用下列方法取得聲音常用的資訊:
方法 | 說明 |
---|---|
.channels | 聲道數量,如果是一般左右聲道就是 2。 |
.duration_seconds | 聲音長度,單位是秒。 |
.frame_rate | 取樣頻率,常見值為 44100 ( CD )、48000 ( DVD )、22050、24000、12000 和 11025。 |
.raw_data | 原始數據。 |
.dBFS | 聲音響度。 |
下方的程式執行後,會先讀取一段 mp3 聲音檔,讀取後印出該聲音的聲道數量以及長度。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from pydub import AudioSegment # 載入 pydub 的 AudioSegment 模組
song = AudioSegment.from_mp3("oxxostudio.mp3") # 讀取 mp3 檔案
duration = song.duration_seconds # 讀取長度
channels = song.channels # 讀取聲道數量
print(channels, duration) # 印出資訊
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^