当前位置: 首页 > article >正文

使用 Python 中的 pydub实现 M4A 转 MP3 转换器

在现代数字生活中,我们常常需要处理不同格式的音频文件。今天,我将与大家分享一个简单的 Python 项目,它使用 wxPython 创建一个图形用户界面(GUI)应用程序,能够将 .m4a 文件转换为 .mp3 文件。这个项目还将教你如何使用 pydub 库进行音频处理。
C:\pythoncode\new\m4atomp3.py

项目概述

我们的应用程序具备以下功能:

  1. 选择源文件夹,包含需要转换的 .m4a 文件。
  2. 选择目标文件夹,保存转换后的 .mp3 文件。
  3. 点击按钮进行文件转换。
  4. 转换完成后,打开目标文件夹以查看结果。
准备工作

在开始编码之前,请确保你已安装以下库:

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()

代码解析
  1. 创建窗口:使用 wx.Frame 创建主窗口,并在窗口中添加按钮。
  2. 选择文件夹:通过 wx.DirDialog 允许用户选择源和目标文件夹。
  3. 转换音频:使用 pydub 库的 AudioSegment 类,将 .m4a 文件转换为 .mp3 文件。
  4. 打开目标文件夹:转换完成后,利用 os.startfile() 打开目标文件夹,方便用户查看结果。
运行程序

确保你已经安装了所需的库和工具,运行代码后,你将看到一个简单易用的图形界面。按照提示选择文件夹,点击转换按钮,即可完成音频格式的转换。

结果

在这里插入图片描述

总结

这个项目不仅展示了如何使用 Python 和 wxPython 创建桌面应用程序,还教会了我们如何处理音频文件。希望这个小工具能帮助你更方便地管理音频文件格式!如果你有任何问题或改进建议,欢迎在评论区留言!


http://www.kler.cn/a/380353.html

相关文章:

  • 详解数据字典及其主要条目
  • 【C/C++】【三种方法】模拟实现strlen
  • (七)JavaWeb后端开发——Maven
  • ISUP协议视频平台EasyCVR视频融合平台接入各类摄像机的方法
  • Rust 力扣 - 2461. 长度为 K 子数组中的最大和
  • 规范:项目、目录、文件、样式、事件、变量、方法、url参数、注释、git提交 命名规范及考证
  • element-plus按需引入报错IconsResolver is not a function
  • 经纬恒润车载TSN网络测试仪TestBase-ATT全新上线!
  • C#、C和C++的主要区别
  • Python | Leetcode Python题解之第530题二叉搜索树的最小绝对差
  • 将Notepad++添加到右键菜单【一招实现】
  • Rust 力扣 - 1297. 子串的最大出现次数
  • 使用python爬取某新闻网并进行数据分析
  • 【论文阅读笔记】Wavelet Convolutions for Large Receptive Fields
  • 论文阅读(一种基于球面投影和特征提取的岩石点云快速配准算法)
  • [ DOS 命令基础 4 ] DOS 命令命令详解-端口进程相关命令
  • 【ROS2】hbm_img_msgs/msg/HbmMsg1080P 转 opencv cv::Mat
  • 江协科技STM32学习- P32 MPU6050
  • PHP不良事件上报系统源码,医院安全不良事件管理系统,基于 vue2+element+ laravel框架开发
  • 前端页面整屏滚动fullpage.js简单使用
  • 儿童安全座椅行业全面深入分析
  • 【Linux】将 bin 目录添加到环境变量 LD_LIBRARY_PATH
  • 【【简单systyem verilog 语言学习使用二--- 新adder加法器 】】
  • 【Rust中的错误处理】
  • (十二)JavaWeb后端开发——MySQL数据库
  • SpringBoot框架:新闻稿件管理技术进阶