Python使用pydub實現(xiàn)M4A轉(zhuǎn)MP3轉(zhuǎn)換器
在現(xiàn)代數(shù)字生活中,我們常常需要處理不同格式的音頻文件。今天,我將與大家分享一個簡單的 Python 項目,它使用 wxPython 創(chuàng)建一個圖形用戶界面(GUI)應用程序,能夠?qū)?.m4a 文件轉(zhuǎn)換為 .mp3 文件。這個項目還將教你如何使用 pydub 庫進行音頻處理。
C:\pythoncode\new\m4atomp3.py
項目概述
我們的應用程序具備以下功能:
- 選擇源文件夾,包含需要轉(zhuǎn)換的 .m4a 文件。
- 選擇目標文件夾,保存轉(zhuǎn)換后的 .mp3 文件。
- 點擊按鈕進行文件轉(zhuǎn)換。
- 轉(zhuǎn)換完成后,打開目標文件夾以查看結(jié)果。
準備工作
在開始編碼之前,請確保你已安裝以下庫:
pip install pydub
此外,還需要安裝 ffmpeg,這是 pydub 進行音頻轉(zhuǎn)換所必需的。你可以從 FFmpeg 官方網(wǎng)站 下載并安裝。
編寫代碼
下面是完整的代碼示例:
import os import wx from pydub import AudioSegment class AudioConverter(wx.Frame): def __init__(self): super().__init__(parent=None, title='M4A to MP3 Converter') panel = wx.Panel(self) self.source_dir = '' self.target_dir = '' # 布局 self.source_button = wx.Button(panel, label='選擇源文件夾') self.target_button = wx.Button(panel, label='選擇目標文件夾') self.convert_button = wx.Button(panel, label='轉(zhuǎn)換') self.open_button = wx.Button(panel, label='打開目標文件夾') self.source_button.Bind(wx.EVT_BUTTON, self.on_select_source) self.target_button.Bind(wx.EVT_BUTTON, self.on_select_target) self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert) self.open_button.Bind(wx.EVT_BUTTON, self.on_open) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(self.source_button, flag=wx.EXPAND|wx.ALL, border=5) vbox.Add(self.target_button, flag=wx.EXPAND|wx.ALL, border=5) vbox.Add(self.convert_button, flag=wx.EXPAND|wx.ALL, border=5) vbox.Add(self.open_button, flag=wx.EXPAND|wx.ALL, border=5) panel.SetSizer(vbox) self.Show() def on_select_source(self, event): with wx.DirDialog(self, "選擇源文件夾") as dialog: if dialog.ShowModal() == wx.ID_OK: self.source_dir = dialog.GetPath() wx.MessageBox(f'選擇的源文件夾: {self.source_dir}') def on_select_target(self, event): with wx.DirDialog(self, "選擇目標文件夾") as dialog: if dialog.ShowModal() == wx.ID_OK: self.target_dir = dialog.GetPath() wx.MessageBox(f'選擇的目標文件夾: {self.target_dir}') def on_convert(self, event): if not self.source_dir or not self.target_dir: wx.MessageBox('請先選擇源文件夾和目標文件夾!') return for filename in os.listdir(self.source_dir): if filename.endswith('.m4a'): m4a_path = os.path.join(self.source_dir, filename) mp3_path = os.path.join(self.target_dir, f"{os.path.splitext(filename)[0]}.mp3") audio = AudioSegment.from_file(m4a_path, format='m4a') audio.export(mp3_path, format='mp3') wx.MessageBox('轉(zhuǎn)換完成!') def on_open(self, event): if self.target_dir: os.startfile(self.target_dir) # Windows # For Linux, use: subprocess.call(['xdg-open', self.target_dir]) # For Mac, use: subprocess.call(['open', self.target_dir]) else: wx.MessageBox('請先選擇目標文件夾!') if __name__ == '__main__': app = wx.App(False) frame = AudioConverter() app.MainLoop()
代碼解析
創(chuàng)建窗口:使用 wx.Frame 創(chuàng)建主窗口,并在窗口中添加按鈕。
選擇文件夾:通過 wx.DirDialog 允許用戶選擇源和目標文件夾。
轉(zhuǎn)換音頻:使用 pydub 庫的 AudioSegment 類,將 .m4a 文件轉(zhuǎn)換為 .mp3 文件。
打開目標文件夾:轉(zhuǎn)換完成后,利用 os.startfile() 打開目標文件夾,方便用戶查看結(jié)果。
運行程序
確保你已經(jīng)安裝了所需的庫和工具,運行代碼后,你將看到一個簡單易用的圖形界面。按照提示選擇文件夾,點擊轉(zhuǎn)換按鈕,即可完成音頻格式的轉(zhuǎn)換。
結(jié)果
到此這篇關于Python使用pydub實現(xiàn)M4A轉(zhuǎn)MP3轉(zhuǎn)換器的文章就介紹到這了,更多相關Python pydub M4A轉(zhuǎn)MP3內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python內(nèi)置數(shù)學函數(shù)和math模塊使用指南
這篇文章主要為大家介紹了Python數(shù)學函數(shù)math模塊使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11Django關于事務transaction.atomic()的使用方式
這篇文章主要介紹了Django關于事務transaction.atomic()的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08在pycharm中運行js文件以及附加node.js下載步驟
js文件需要用node來運行,所以首先要安裝node軟件,下面這篇文章主要給大家介紹了關于在pycharm中運行js文件以及附加node.js下載步驟的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-12-12python unittest實現(xiàn)api自動化測試
這篇文章主要為大家詳細介紹了python unittest實現(xiàn)api自動化測試的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04Django3.2 自動發(fā)現(xiàn)所有路由代碼詳解
這篇文章主要為大家介紹了Django自動發(fā)現(xiàn)所有路由的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12django model 條件過濾 queryset.filter(**condtions)用法詳解
這篇文章主要介紹了django model 條件過濾 queryset.filter(**condtions)用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Pandas數(shù)據(jù)操作分析基本常用的15個代碼片段
這篇文章主要介紹了Pandas數(shù)據(jù)操作分析基本常用的15個代碼片段,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09python將數(shù)據(jù)插入數(shù)據(jù)庫的代碼分享
在本篇文章里小編給大家整理的是關于python將數(shù)據(jù)插入數(shù)據(jù)庫的代碼內(nèi)容,有興趣的朋友們可以參考下。2020-08-08