读取声音信息、输出声音
这篇文章会介绍如何安装和使用 Python 的 pydub 第三方函数库,透过 pydub 取得声音长度、声道、音量...等基本信息,以及如何将声音输出为不同格式 ( 例如读取 wav 文件后输出为 mp3 格式 )。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
安装 pydub 函数库
输入下列指令,就能安装 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) # 印出資訊
参考数据
微信扫码关注
抖音扫码关注