使用Python脚本和简单的图形用户界面轻松切割MP3文件

应用场景:

  • 需要将大型MP3文件切割成较小的部分以便上传或发送。
  • 需要从MP3文件中提取特定的音频片段,以便用于其他目的。
  • 需要快速制作铃声或音乐片段,以用于手机等设备。

源代码:

import subprocess
import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, title=title, size=(400, 600))
        panel = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        start_label = wx.StaticText(panel, label='开始时间(秒):')
        hbox1.Add(start_label, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
        self.start_input = wx.TextCtrl(panel)
        hbox1.Add(self.start_input, flag=wx.ALL, border=5)
        vbox.Add(hbox1, flag=wx.EXPAND | wx.ALL, border=10)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        end_label = wx.StaticText(panel, label='结束时间(秒):')
        hbox2.Add(end_label, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
        self.end_input = wx.TextCtrl(panel)
        hbox2.Add(self.end_input, flag=wx.ALL, border=5)
        vbox.Add(hbox2, flag=wx.EXPAND | wx.ALL, border=10)

        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        btn_browse = wx.Button(panel, label='选择文件', size=(100, 30))
        btn_browse.Bind(wx.EVT_BUTTON, self.on_browse)
        hbox3.Add(btn_browse, flag=wx.ALL, border=5)
        vbox.Add(hbox3, flag=wx.ALIGN_CENTER | wx.ALL, border=10)

        hbox4 = wx.BoxSizer(wx.HORIZONTAL)
        name_label = wx.StaticText(panel, label='歌名:')
        hbox4.Add(name_label, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
        self.name_input = wx.TextCtrl(panel)
        hbox4.Add(self.name_input, flag=wx.ALL, border=5)
        vbox.Add(hbox4, flag=wx.EXPAND | wx.ALL, border=10)

        hbox5 = wx.BoxSizer(wx.HORIZONTAL)
        btn_cut = wx.Button(panel, label='切割', size=(100, 30))
        btn_cut.Bind(wx.EVT_BUTTON, self.on_cut)
        hbox5.Add(btn_cut, flag=wx.ALL, border=5)
        vbox.Add(hbox5, flag=wx.ALIGN_CENTER | wx.ALL, border=10)

        panel.SetSizer(vbox)
        self.Show()

    def on_browse(self, event):
        dlg = wx.FileDialog(self, "选择MP3文件", wildcard="MP3文件 (*.mp3)|*.mp3", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
        if dlg.ShowModal() == wx.ID_OK:
            selected_file = dlg.GetPath()
            self.input_file = selected_file
        dlg.Destroy()

    def on_cut(self, event):
        start_time = self.start_input.GetValue()
        end_time = self.end_input.GetValue()
        name = self.name_input.GetValue()

        if not start_time or not end_time or not name or not hasattr(self, 'input_file'):
            wx.MessageBox('请输入有效的开始时间、结束时间、歌名,并选择要切割的MP3文件!', '错误', wx.OK | wx.ICON_ERROR)
            return
        output_file = f'{name}.mp3'

        # 使用FFmpeg切割音频文件
        cmd = f'D://ffmpeg//bin//ffmpeg -i {self.input_file} -ss {start_time} -to {end_time} -c copy {output_file}'
        print(cmd)
        try:
            subprocess.call(cmd, shell=True)
            wx.MessageBox('切割成功!', '提示', wx.OK | wx.ICON_INFORMATION)
        except subprocess.CalledProcessError:
            wx.MessageBox('切割失败,请检查输入的时间是否正确!', '错误', wx.OK | wx.ICON_ERROR)

app = wx.App()
MyFrame(None, title='MP3切割工具')
app.MainLoop()

源代码解释:

这个工具的核心逻辑是使用FFmpeg库进行音频处理,以及使用wxPython库构建GUI。具体来说,FFmpeg库提供了强大的音频处理功能,可以轻松地从音频文件中提取、剪辑或转码音频,而wxPython库则提供了易于使用的GUI元素和布局管理器,帮助用户创建美观和易于使用的GUI。

需要注意的是,这个小工具使用了FFmpeg库,因此在使用之前需要确保已经安装了FFmpeg库,并且已经将其添加到系统的环境变量中。同时,这个小工具也只支持切割MP3文件,如果需要处理其他类型的音频文件,则需要进行相应的修改。

效果如下:

用户可以按照以下步骤使用这个小工具:

  1. 运行代码并打开GUI界面。
  2. 通过点击"选择文件"按钮选择要切割的MP3文件。
  3. 输入起始时间和结束时间,以及要输出文件的名称。
  4. 点击"切割"按钮,等待程序完成处理。
  5. 在输出文件夹中找到切割后的MP3文件。

 

猜你喜欢

转载自blog.csdn.net/winniezhang/article/details/131008897