使用 Python 中的 pydub实现 M4A 转 MP3 转换器
在现代数字生活中,我们常常需要处理不同格式的音频文件。今天,我将与大家分享一个简单的 Python 项目,它使用 wxPython
创建一个图形用户界面(GUI)应用程序,能够将 .m4a
文件转换为 .mp3
文件。这个项目还将教你如何使用 pydub
库进行音频处理。
C:\pythoncode\new\m4atomp3.py
项目概述
我们的应用程序具备以下功能:
- 选择源文件夹,包含需要转换的
.m4a
文件。 - 选择目标文件夹,保存转换后的
.mp3
文件。 - 点击按钮进行文件转换。
- 转换完成后,打开目标文件夹以查看结果。
准备工作
在开始编码之前,请确保你已安装以下库:
pip install pydub
此外,还需要安装 ffmpeg
,这是 pydub
进行音频转换所必需的。你可以从 FFmpeg 官方网站 下载并安装。
编写代码
下面是完整的代码示例:
import os
import wx
from pydub import AudioSegment
class AudioConverter(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='M4A to MP3 Converter')
panel = wx.Panel(self)
self.source_dir = ''
self.target_dir = ''
# 布局
self.source_button = wx.Button(panel, label='选择源文件夹')
self.target_button = wx.Button(panel, label='选择目标文件夹')
self.convert_button = wx.Button(panel, label='转换')
self.open_button = wx.Button(panel, label='打开目标文件夹')
self.source_button.Bind(wx.EVT_BUTTON, self.on_select_source)
self.target_button.Bind(wx.EVT_BUTTON, self.on_select_target)
self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert)
self.open_button.Bind(wx.EVT_BUTTON, self.on_open)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(self.source_button, flag=wx.EXPAND|wx.ALL, border=5)
vbox.Add(self.target_button, flag=wx.EXPAND|wx.ALL, border=5)
vbox.Add(self.convert_button, flag=wx.EXPAND|wx.ALL, border=5)
vbox.Add(self.open_button, flag=wx.EXPAND|wx.ALL, border=5)
panel.SetSizer(vbox)
self.Show()
def on_select_source(self, event):
with wx.DirDialog(self, "选择源文件夹") as dialog:
if dialog.ShowModal() == wx.ID_OK:
self.source_dir = dialog.GetPath()
wx.MessageBox(f'选择的源文件夹: {self.source_dir}')
def on_select_target(self, event):
with wx.DirDialog(self, "选择目标文件夹") as dialog:
if dialog.ShowModal() == wx.ID_OK:
self.target_dir = dialog.GetPath()
wx.MessageBox(f'选择的目标文件夹: {self.target_dir}')
def on_convert(self, event):
if not self.source_dir or not self.target_dir:
wx.MessageBox('请先选择源文件夹和目标文件夹!')
return
for filename in os.listdir(self.source_dir):
if filename.endswith('.m4a'):
m4a_path = os.path.join(self.source_dir, filename)
mp3_path = os.path.join(self.target_dir, f"{os.path.splitext(filename)[0]}.mp3")
audio = AudioSegment.from_file(m4a_path, format='m4a')
audio.export(mp3_path, format='mp3')
wx.MessageBox('转换完成!')
def on_open(self, event):
if self.target_dir:
os.startfile(self.target_dir) # Windows
# For Linux, use: subprocess.call(['xdg-open', self.target_dir])
# For Mac, use: subprocess.call(['open', self.target_dir])
else:
wx.MessageBox('请先选择目标文件夹!')
if __name__ == '__main__':
app = wx.App(False)
frame = AudioConverter()
app.MainLoop()
代码解析
- 创建窗口:使用
wx.Frame
创建主窗口,并在窗口中添加按钮。 - 选择文件夹:通过
wx.DirDialog
允许用户选择源和目标文件夹。 - 转换音频:使用
pydub
库的AudioSegment
类,将.m4a
文件转换为.mp3
文件。 - 打开目标文件夹:转换完成后,利用
os.startfile()
打开目标文件夹,方便用户查看结果。
运行程序
确保你已经安装了所需的库和工具,运行代码后,你将看到一个简单易用的图形界面。按照提示选择文件夹,点击转换按钮,即可完成音频格式的转换。
结果
总结
这个项目不仅展示了如何使用 Python 和 wxPython 创建桌面应用程序,还教会了我们如何处理音频文件。希望这个小工具能帮助你更方便地管理音频文件格式!如果你有任何问题或改进建议,欢迎在评论区留言!