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


猜你喜欢
- 前言requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快。但是requests发送请求是串行的,即阻
- 出差到了中国雅虎,这里的风格和淘宝很不一样。和雅虎一比,淘宝的办公环境就是个菜市场,闹哄哄,到处是人,在走道里狂奔乱窜,在每个会议室争得面红
- 虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境。
- 本文实例讲述了Go语言中的range用法。分享给大家供大家参考。具体如下:for 循环的 range 格式可以对 slice 或者 map
- LDAP(Light Directory Access Portocol)是轻量目录访问协议,基于X.500标准,支持TCP/IP。LDAP
- 1、层次索引1.1 定义在某一个方向拥有多个(两个及两个以上)索引级别,就叫做层次索引。通过层次化索引,pandas能够以较低维度形式处理高
- SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf
- 前言硬要说这篇文章怎么来的,那得先从那几个吃野味的人开始说起…… 前天睡醒:假期还有几天;昨天睡醒:假期还有十几天;今天睡醒:假期还有一个月
- 数据增强的必要性深度学习在最近十年得以风靡得益于计算机算力的提高以及数据资源获取的难度下降。一个好的深度模型往往需要大量具有label的数据
- 概述Visdom:一个灵活的可视化工具,可用来对于 实时,富数据的 创建,组织和共享。支持Torch和Numpy还有pytorch。visd
- 之前刚开始做爬虫的时候遇到过登录验证码问题,看过很多帖子都没有解决我的问题,发现大多数帖子都是治标不治本,于是想分享一下自己的解决方案。本次
- 1-错误详情cmd下运行net start mysql启动MySQL服务:提示发生系统错误5。拒绝访问。cmd管理员模式运行可以启动MySQ
- 前言记得开始使用 OpenCV 的时候是在大学时期,当时用的是 C 语言,OpenCV 版本好像是1.1,随着时间的推移,后面 C++逐渐代
- PDO::getAvailableDriversPDO::getAvailableDrivers — 返回一个可用驱动的数组(PHP 5 &
- 这是个“懒人”用的办法,你没有时间更新主页,却又不能让三个月前的更新还标着"new",那么用这个js可以帮你的大忙!这个
- 前言今天是正月初九,也是活动的倒数第二天,复工都三天了,而我三篇春节文章还没写完,实在是太混了!这次带来的是一个春节抽福卡页面,采用卡牌翻转
- 散点图什么是散点图?散点图是指在数理统计回归分析中,数据点在直角坐标系平面上的分布图, 散点图表示因变量随自变量而变化的大致趋势,
- 本人野生程序员一名,了解了一些微服务架构、前后端分离、SPA的知识后就想试试做点什么东西。之前一直做后端,前端只是有基础知识。之前学习过an
- 内容摘要:现在博客很流行,相信应该上网时间稍微长点的朋友都会在这或者在那的有一个自己的博客。对于一些有一定能力的朋友,可能更喜欢自己去下载一
- 先导记得刚学ABAP的时候问这问那,问东问西,常常一个可能不怎么用的东西,扣了好久好久.群里的大佬就说,学那么多没必要,以后是会天天写ALV