064. 编写一个函数,实现简单的音频处理功能,音量调整、格式转换
在 Python 中,可以使用 pydub
库来实现简单的音频处理功能,包括音量调整和格式转换。pydub
是一个简单易用的音频处理库,支持多种音频格式,并且可以轻松地调整音量和转换格式。
安装依赖库
在开始之前,请确保你已经安装了 pydub
和 ffmpeg
。ffmpeg
是一个强大的多媒体处理工具,pydub
依赖它来处理音频文件。
安装 pydub
:
pip install pydub
安装 ffmpeg
:
- 在 Linux 上:
sudo apt-get install ffmpeg
- 在 macOS 上:
brew install ffmpeg
-
在 Windows 上:
-
下载
ffmpeg
的预编译版本:FFmpeg Download -
将
ffmpeg
的可执行文件路径添加到系统的环境变量中。
示例代码
以下代码定义了一个函数 process_audio
,支持加载音频文件、调整音量和转换格式。
from pydub import AudioSegment
from pydub.playback import play
def process_audio(input_path, output_path, volume_change=0, output_format="mp3"):
"""
简单的音频处理函数,支持音量调整和格式转换
:param input_path: 输入音频文件的路径
:param output_path: 输出音频文件的路径
:param volume_change: 音量调整(单位为分贝,dB),正值增大音量,负值减小音量,默认为 0
:param output_format: 输出音频格式,默认为 'mp3'
"""
try:
# 加载音频文件
audio = AudioSegment.from_file(input_path)
# 调整音量
if volume_change != 0:
audio = audio + volume_change # 增加或减少音量
# 转换格式并保存
if output_format.lower() == "mp3":
audio.export(output_path, format="mp3")
elif output_format.lower() == "wav":
audio.export(output_path, format="wav")
elif output_format.lower() == "ogg":
audio.export(output_path, format="ogg")
else:
raise ValueError("不支持的输出格式!")
print(f"音频处理完成,已保存到 {output_path}")
except Exception as e:
print(f"音频处理失败:{e}")
# 示例用法
if __name__ == "__main__":
input_path = "input.mp3" # 替换为你的输入音频路径
output_path = "output.wav" # 替换为你的输出音频路径
volume_change = +6 # 增加 6 分贝
output_format = "wav" # 输出格式
process_audio(input_path, output_path, volume_change, output_format)
代码说明
- 加载音频文件:使用
AudioSegment.from_file()
加载音频文件。pydub
支持多种格式,包括 MP3、WAV、OGG 等。 - 调整音量:使用
audio + volume_change
来调整音量。volume_change
是一个分贝值,正值表示增加音量,负值表示减小音量。 - 转换格式并保存:使用
audio.export()
方法保存处理后的音频文件。通过format
参数指定输出格式。 - 异常处理:使用
try-except
捕获可能的异常,例如文件不存在、格式错误等。
示例输出
假设输入音频文件为 input.mp3
,增加 6 分贝音量,并将输出格式转换为 WAV,处理后的音频将保存为 output.wav
,并打印以下信息:
音频处理完成,已保存到 output.wav
扩展功能
pydub
还支持以下音频处理功能:
- 裁剪音频:
start_time = 0 # 开始时间(毫秒)
end_time = 5000 # 结束时间(毫秒)
audio = audio[start_time:end_time]
- 拼接音频:
audio1 = AudioSegment.from_file("audio1.mp3")
audio2 = AudioSegment.from_file("audio2.mp3")
combined_audio = audio1 + audio2
combined_audio.export("combined.mp3", format="mp3")
- 播放音频:
play(audio)
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)