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

news2025/4/4 8:30:47

应用场景:

  • 需要将大型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文件。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常微分方程ODE和Neural Ordinary Differential Equations

微分方程(英語:Differential equation,DE)是一種數學方程,用來描述某一類函数與其导数之间的关系。微分方程的解是一個符合方程的函數。而在初等数学的代数方程裡,其解是常数值。 常微分方程(英…

蓝桥杯青少组python:第十二届国赛

选择题 1、设s"Hi LanQiao",运行一下哪个选项代码可以输出"LanQiao"子串() A、print(S[-7:]) B、print(s[-6:-1]) C、print(s[-7:0]) D、print(s[-7:0]) 2、已知a2021.0529,运行一下代码选项可以输出2021.0…

c# vs2013 制作水晶报表并导出为 pdf

一两年前接触的,当时没有记录,现在把他写下来。 vs2013制作水晶报表,应该要用到插件安装,可以自行搜索安装插件。 在Views/RPT文件夹下创建.rpt后缀的水晶报表文件(这里的文件夹位置根据自身随意更改)。 在…

JavaScript数组去重的常见方法 Set filter indexOf

JavaScript实现对象深拷贝的方法(5种) 知识回调(不懂就看这儿!)场景复现实现数组去重的五种方法1.Set()Array.from()2.filter() indexOf()3.for 嵌套 for,splice 去重4.利用Map()5.利用includes 实际开发问…

如何入门编程

随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢?欢迎大家积极讨论 一、自学编程需要注意什么? 对于我个人的理解,其实自学编程最重要的就是兴趣。你得培养编程兴趣。 所以在学…

linuxOPS基础_linux文本文件统计及查找

wc命令 显示文件信息 语法 \# wc [选项] 文件名称选项选项说明-l表示lines,行数(以回车/换行符为标准)-w表示words,单词数 依照空格来判断单词数量-c表示bytes,字节数(空格,回车,换…

【LED子系统深度剖析】十、详细实现流程(番外篇)

个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、LED驱动初始化流程1.1 LED驱动匹配以及设备的创建1.1.1 gpio_led_probe1.1.2 gpi…

[SpringBoot]Service与Controller层

目录 关于Service 关于Controller 关于各组件的处理流程 补充: Service保证数据完整性是怎么体现的? 以下代表复制属性,把来源adminAddNewParam复制到目标 admin里面 关于Service Service的核心价值在于:组织业务流程&#…

gaussDB的schema创建查询,及其查询下面的表列,修改列类型

修改列类型与众不同 alter table adqm_safe_data_encrypt_job_instance alter COLUMN state TYPE INT4 alter COLUMN state TYPE INT4 pg_catalog.pg_namespace来查看当前数据库中全部的Schema select oid,* from pg_catalog.pg_namespace; 创建schema create schema gs_d…

vscode 配置rust、golang代码格式化方法

一共分三步: 点击左下角齿轮按钮,点击Settings,如下图:点击右上角切换到Settings.json文件。如下图增加rust、golang 配置如下,假如存在默认格式化配置请注释或删除。重启vscode ide,​尝试编写rust、gola…

HTML5+CSS3+JS小实例:简约的垂直选项卡

实例:简约的垂直选项卡 技术栈:HTML+CSS+JS 字体图标库:font-awesome 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="v…

【LED子系统深度剖析】八、小试牛刀

个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、硬件管脚确定2、设备树配置3、子系统配置4、编译烧录5、验证5.1 设备树验证5.2 驱…

MySQL — 主从复制介绍

文章目录 主从复制一、概述二、原理三、 搭建主从复制结构3.1 服务器准备3.2 主库配置3.3 从库配置 主从复制 一、概述 ​ 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;…

16-Vue3中常用的 Composition API

目录 1、什么是组合式 API&#xff1f;2、拉开序幕的setup3、ref函数4、reactive函数5、Vue3.0中的响应式原理5.1 vue2.x的响应式5.2 Vue3.0的响应式 6、reactive对比ref7、setup的两个注意点8、计算属性与监视8.1 computed函数8.2 watch函数8.3 watchEffect函数 9、 生命周期1…

chatgpt赋能python:用Python编写AI:从入门到精通

用Python编写AI&#xff1a;从入门到精通 人工智能&#xff08;AI&#xff09;一直是计算机科学领域的热门话题。随着AI技术的成熟&#xff0c;越来越多的公司开始在其业务中应用AI。Python是机器学习和人工智能领域最流行的编程语言之一&#xff0c;Python提供了众多强大的库…

探索C++与Live555实现RTSP服务器的艺术

探索C与Live555实现RTSP服务器的艺术 一、引言&#xff08;Introduction&#xff09;1.1 RTSP服务器的重要性&#xff08;Importance of RTSP Server&#xff09;1.2 C与Live555库的优势&#xff08;Advantages of C and Live555&#xff09;1.3 可能用到的类和接口介绍 二、C与…

LLM时代,探索式数据分析的升级之路有哪些新助攻?

在这个信息爆炸的时代&#xff0c;数据已经成为我们生活、工作中不可或缺的重要资源。大量的数据犹如一座座金矿&#xff0c;蕴藏着无尽的价值。然而&#xff0c;如果无法从数据中提取出知识和信息并加以有效利用&#xff0c;那么数据本身并不能驱动和引领技术应用取得成功。如…

Java程序设计入门教程 -- 一维数组

目录 一维数组创建 1.声明数组 2.分配数组内存空间 3.数组元素访问 数组初始化 1.静态初始化 2.动态初始化 一维数组的拷贝 1.数组元素的拷贝 2.数组名的拷贝 一维数组创建 1.声明数组 声明一个一维数组的方法很简单&#xff0c;格式如下&#xff1a; 数据类型名[ ] …

解决使用json配置文件删除k8s中namespace解析json报错的问题

报错提示如下&#xff1a; C:\Users\jiangcheng>curl -k -H "Content-Type: application/json" -X PUT --data-binary dev.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize { "kind": "Status", "apiVersion": "…

Unity2D骨骼动画制作之单张图片编辑

1、打开骨骼制作面板 在Sprite Editor左侧选项&#xff0c;选择Skinning Editor 2、 &#xff08;1&#xff09;骨骼制作 Preview Pose 预览模式&#xff0c;可以预览动作并不会真正的改变设置 Reset Pose 将角色骨骼和关节恢复到原始位置 Edit Bone 编辑骨骼&#xff0c;…