Python实现轻松切割MP3文件
作者:winfredzhang 发布时间:2023-09-23 21:40:32
标签:Python,切割,MP3
应用场景
1.需要将大型MP3文件切割成较小的部分以便上传或发送。
2.需要从MP3文件中提取特定的音频片段,以便用于其他目的。
3.需要快速制作铃声或音乐片段,以用于手机等设备。
源代码
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文件,如果需要处理其他类型的音频文件,则需要进行相应的修改。
效果如下
用户可以按照以下步骤使用这个小工具:
运行代码并打开GUI界面。
通过点击"选择文件"按钮选择要切割的MP3文件。
输入起始时间和结束时间,以及要输出文件的名称。
点击"切割"按钮,等待程序完成处理。
在输出文件夹中找到切割后的MP3文件。
来源:https://blog.csdn.net/winniezhang/article/details/131008897
0
投稿
猜你喜欢
- 书 名:细节决定交互设计的成败国际书号:ISBN 978-7-121-08232-0作 &nb
- 数据库服务器主要用于存储、查询、检索企业内部的信息,因此需要搭配专用的数据库系统,对服务器的兼容性、可靠性和稳定性等方面都有很高的要求。下面
- 方法一【推荐】、用js插入flash,可防止虚线框激活建立一个ShowFlash.js文件,拷贝以下代码:function sho
- 学习目的: 掌握文本框的用法 初次接触try…catch…语法 今天内容很轻松,用一个例子,输入年月日,判断输入是否正确 图片如下: 用个
- 现在我们已经知道了,fixtures是一个非常强大的功能。那么有的时候,我们可能会写一个fixture,而这个fixture所有的测试函数都
- 相关推荐:完整的sql中文参考手册(chm)下载 DB2 提供了关连式资料库的查询语言 sql (Structured Query
- HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一个字节的位置和最后一个字节的位
- 一、is_numberic函数简介国内一部分CMS程序里面有用到过is_numberic函数,我们先看看这个函数的结构bool is_num
- 又一个js加密工具:js混淆,完整源代码如下,有点长呵呵:<HTML><HEAD><TITLE>Cunf
- 内容摘要:为什么要什么XML文件:其优势就是处理该XML数据的文档可以是静态文档,比如HTML文件通过Javascript、XMLDOM来解
- 在本章中,我们将重点介绍RSA密码加密的不同实现及其所涉及的功能.您可以引用或包含此python文件以实现RSA密码算法实现.加密算法模块&
- 在此之前,我写了两篇关于ASP结合XML的贴子,分别介绍了用XML取代数据库和用XML整合数据库这两方面的技术,让数据库在某种情况下不再是我
- 字体的处理在网页设计中无论怎么强调也不为过, 毕竟网页使用来传递信息的, 而最经典最直接的信息传递方式就是文字,&nbs
- 想查找mac下python的site-packages目录,如果用网上搜的安装目录之类的去找,进去每一层很多都是软链接形式存在,比较浪费时间
- python 与 C++ dlib人脸检测结果对比,供大家参考,具体内容如下说明:由于项目需求发现Linux下c++使用dlib进行人脸检测
- 首先将ORACLE 10g的安装光盘放入光驱,如果自动运行,一般会出现如图1安装界面: 图1 单击“开始安装”,就可以安装ORACLE 10
- 是在CSDN论坛看到的一个问题,平常我也没有注意,或者说没有这样用吧。看代码 <body id="ww
- 内容摘要: 首先来讲讲 Session 的好处,它可以用来记录客户端私有的
- 众所周知IE6不支持position:fixed,这个bug与IE6的双倍margin和不支持PNG透明等bug一样臭名昭著。前些天我做自己
- 阅读上一章:Chapter 6 短语元素Chapter 7 锚点HTML中的链接,正确的说法应该称作"锚点",它不仅让我