Python實(shí)現(xiàn)輕松切割MP3文件
應(yīng)用場(chǎng)景
1.需要將大型MP3文件切割成較小的部分以便上傳或發(fā)送。
2.需要從MP3文件中提取特定的音頻片段,以便用于其他目的。
3.需要快速制作鈴聲或音樂片段,以用于手機(jī)等設(shè)備。
源代碼
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='開始時(shí)間(秒):') 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='結(jié)束時(shí)間(秒):') 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('請(qǐng)輸入有效的開始時(shí)間、結(jié)束時(shí)間、歌名,并選擇要切割的MP3文件!', '錯(cuò)誤', 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('切割失敗,請(qǐng)檢查輸入的時(shí)間是否正確!', '錯(cuò)誤', wx.OK | wx.ICON_ERROR) app = wx.App() MyFrame(None, title='MP3切割工具') app.MainLoop()
源代碼解釋
這個(gè)工具的核心邏輯是使用FFmpeg庫進(jìn)行音頻處理,以及使用wxPython庫構(gòu)建GUI。具體來說,F(xiàn)Fmpeg庫提供了強(qiáng)大的音頻處理功能,可以輕松地從音頻文件中提取、剪輯或轉(zhuǎn)碼音頻,而wxPython庫則提供了易于使用的GUI元素和布局管理器,幫助用戶創(chuàng)建美觀和易于使用的GUI。
需要注意的是,這個(gè)小工具使用了FFmpeg庫,因此在使用之前需要確保已經(jīng)安裝了FFmpeg庫,并且已經(jīng)將其添加到系統(tǒng)的環(huán)境變量中。同時(shí),這個(gè)小工具也只支持切割MP3文件,如果需要處理其他類型的音頻文件,則需要進(jìn)行相應(yīng)的修改。
效果如下
用戶可以按照以下步驟使用這個(gè)小工具:
運(yùn)行代碼并打開GUI界面。
通過點(diǎn)擊"選擇文件"按鈕選擇要切割的MP3文件。
輸入起始時(shí)間和結(jié)束時(shí)間,以及要輸出文件的名稱。
點(diǎn)擊"切割"按鈕,等待程序完成處理。
在輸出文件夾中找到切割后的MP3文件。
到此這篇關(guān)于Python實(shí)現(xiàn)輕松切割MP3文件的文章就介紹到這了,更多相關(guān)Python切割MP3文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python接口自動(dòng)化之request請(qǐng)求封裝源碼分析
這篇文章主要介紹了Python接口自動(dòng)化之request請(qǐng)求封裝源碼分析,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06Python實(shí)現(xiàn)打包成庫供別的模塊調(diào)用
這篇文章主要介紹了Python實(shí)現(xiàn)打包成庫供別的模塊調(diào)用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07淺談對(duì)python中if、elif、else的誤解
這篇文章主要介紹了淺談對(duì)python中if、elif、else的誤解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Python對(duì)稱的二叉樹多種思路實(shí)現(xiàn)方法
這篇文章主要介紹了Python對(duì)稱的二叉樹多種思路實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python3 + Appium + 安卓模擬器實(shí)現(xiàn)APP自動(dòng)化測(cè)試并生成測(cè)試報(bào)告
這篇文章主要介紹了Python3 + Appium + 安卓模擬器實(shí)現(xiàn)APP自動(dòng)化測(cè)試并生成測(cè)試報(bào)告,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01OpenCV+python實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測(cè)功能
這篇文章主要介紹了OpenCV+python實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測(cè)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Linux下通過python訪問MySQL、Oracle、SQL Server數(shù)據(jù)庫的方法
這篇文章主要介紹了Linux下通過python訪問MySQL、Oracle、SQL Server數(shù)據(jù)庫的方法,需要的朋友可以參考下2016-04-04使用python-pptx包批量修改ppt格式的實(shí)現(xiàn)
今天小編就為大家分享一篇使用python-pptx包批量修改ppt格式的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02python中用cantools和can工具包解析blf文件的方法
這篇文章主要給大家介紹了關(guān)于python中用cantools和can工具包解析blf文件的相關(guān)資料,blf數(shù)據(jù)不像mf4那樣自帶信號(hào)數(shù)據(jù)庫,因?yàn)樗怯浫罩居玫?一般情況下要盡可能的小,需要的朋友可以參考下2023-09-09