Python使用pydub模塊轉(zhuǎn)換音頻格式以及對音頻進行剪輯
前言
近端時間看了一個短視頻,覺得視頻的背景音樂片段很不錯,想把這個背景音樂得到,雖然小編運用Python爬蟲肯定能得到這首音樂,但是這個音樂片段肯定是得不到的,于是網(wǎng)上看一下相關(guān)官方文檔,沒想到python真的有模塊可以滿足要求,這又讓我想起自己CSDN界面的那段話了,“在Python面前,只有你想不到的,沒有Python做不到的”。
1.需要下載的Python模塊和ffmpeg多媒體處理工具
需要的Python模塊是標(biāo)題上提到的那個,pydub,這個模塊可以實現(xiàn)對音頻文件的剪輯、轉(zhuǎn)換音頻格式等。pydub是python的高級一個音頻處理庫,自帶的wave模塊只能處理 wav 格式的音頻文件,如果要想處理類似MP3格式的文件,就得要裝 ffmpeg或者libav了。pydub依賴于ffmpeg,這里選擇安裝ffmpeg。
下載命令,在cmd上輸入pip install pydub即可
除了下載pydub這個模塊之外,還需要下載ffmpeg這個多媒體處理工具,否則,即使在代碼中指定音頻文件路徑?jīng)]有錯誤,運行結(jié)構(gòu)也會報錯。如下:
下載這個之后,就不會報這個錯誤了,下載網(wǎng)址為:ffmpeg
在這個網(wǎng)址下面找一個和自己電腦系統(tǒng)一樣的版本下載即可,下載完成之后,解壓,好像不配置環(huán)境變量,程序也可以正常執(zhí)行,不過,最好還是配置環(huán)境變量。
2.實現(xiàn)音頻剪輯和轉(zhuǎn)換音頻格式代碼
其實,實現(xiàn)音頻剪輯和轉(zhuǎn)換音頻格式的代碼總共就幾行代碼,只不過需要輸入一些參數(shù)值,因此代碼量相對而言多了起來。
關(guān)鍵代碼為:
from pydub import AudioSegment sound=AudioSegment.from_file(file='./music/刺客.mp3',format='mp3') sound=sound[start:end] # start,end兩個參數(shù)用于對音頻進行剪輯 sound.export(out_f='./music/刺客.wav', format='wav') # 用于保存剪輯之后的音頻文件
當(dāng)然讀者想了解更多有關(guān)這個模塊的使用,可以來看看官方文檔??!
文檔連接為:pydub
文檔中講了有關(guān)音頻合并、音頻重復(fù)等知識點喔!。
最終實現(xiàn)代碼:
from pydub import AudioSegment import sys class Music(object): def __init__(self,file,file_type,start,end,save_file,save_file_type): self.sound = AudioSegment.from_file(file=file, format=file_type) self.start=start # 剪輯音頻文件開始時間 self.end=end # 剪輯音頻文件的結(jié)束時間 self.save_file=save_file # 保存音頻文件的路徑 self.save_file_type=save_file_type # 保存音頻文件的類型 def editedMusic(self): # 定義方法用于剪輯音頻 # 對于傳入的start,end參數(shù)進行一些字符串處理 ## 對傳入的開始時間進行字符串處理 if self.start=='0' or self.start=='': # 從頭開始處理音頻文件 start_time=0 elif ":" in self.start:# 從音頻中間處理 list_1=self.start.split(":") start_time=int(list_1[0])*60+int(list_1[1]) else: # 如果是其他情況,提示錯誤,并退出程序 print("你輸入的初始截取時間有問題") sys.exit() start_time*=1000 # 毫秒作為單位,需要在原來秒數(shù)的基礎(chǔ)上再乘以1000 if start_time>=len(self.sound): # 如果初始截取時間大于或等于音頻文件總時間 print('你輸入的初始截取時間大于該音頻文件總時間,故無法進行剪輯操作') sys.exit() ## 對傳入的結(jié)束時間進行字符串處理 if self.end=='': end_time=len(self.sound) # 如果輸入結(jié)束時間為空,表示截取到音頻文件最后 elif ':' in self.end: list_2=self.end.split(':') end_time=int(list_2[0])*60+int(list_2[1]) else: print("你輸入的結(jié)束截取時間有問題") sys.exit() end_time*=1000 self.sound=self.sound[start_time:end_time] # 對音頻文件進行剪輯 self.saveFile() def saveFile(self): self.sound.export(out_f=self.save_file,format=self.save_file_type) # 保存已經(jīng)進行剪輯的音頻文件 print('已成功轉(zhuǎn)換!') if __name__ == '__main__': print('1.可以將音頻文件轉(zhuǎn)換其他格式的音頻文件\n2.可用剪輯音頻文件\n') print('='*50) file=input('建議:\n(1.音頻文件和運行文件在同一個文件夾下面,最好使用相對路徑)\n(2.音頻文件和運行文件不在同一個文件夾下面,最好用絕對路徑)\n請輸入要剪輯的文件路徑:') file_type=file[file.rfind('.')+1:] # 音頻文件類型 mp3、wav start=input("(可用輸入0,空格,(1:1,1分1秒):)\n輸入開始截取時間:") end=input("(可用輸入空格,(1:1,1分1秒):)\n輸入結(jié)束截取時間:") save_file=input("請輸入剪輯之后保存的文件路徑:") save_file_type=save_file[save_file.rfind('.')+1:] music=Music(file,file_type,start,end,save_file,save_file_type) music.editedMusic() # 1:12 1:36
當(dāng)然,這個模塊好像還可以滿足一些用戶改變音樂音質(zhì)的需求,export()方法里面有一個參數(shù)bitrate比特率,百度了一下這個東西,好像對音頻音質(zhì)有一定影響。
3.總結(jié)
到此這篇關(guān)于Python使用pydub模塊轉(zhuǎn)換音頻格式以及對音頻進行剪輯的文章就介紹到這了,更多相關(guān)Python轉(zhuǎn)換音頻格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python的time模塊一些常用功能(各種與時間相關(guān)的函數(shù))
Python的time模塊提供了各種與時間相關(guān)的函數(shù),包括獲取當(dāng)前時間、處理時間間隔、執(zhí)行時間測量等,這篇文章主要介紹了Python的time模塊——各種與時間相關(guān)的函數(shù),需要的朋友可以參考下2025-04-04Python os.rename() 重命名目錄和文件的示例
今天小編就為大家分享一篇Python os.rename() 重命名目錄和文件的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10Python xlrd/xlwt 創(chuàng)建excel文件及常用操作
這篇文章主要介紹了Python xlrd/xlwt 創(chuàng)建excel文件及常用操作,幫助大家更好的理解和使用python辦公,感興趣的朋友可以了解下2020-09-09Python人工智能實戰(zhàn)之對話機器人的實現(xiàn)
本文將通過Python開發(fā)一個可以講笑話的機器人,可以自由定制功能,想講幾個笑話就講幾個笑話。文中的示例代碼講解詳細,感興趣的可以動手試一試2022-02-02Python中Matplotlib的點、線形狀、顏色以及繪制散點圖
與線型圖類似的是,散點圖也是一個個點集構(gòu)成的,下面這篇文章主要給大家介紹了關(guān)于Python中Matplotlib的點、線形狀、顏色以及繪制散點圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-04-04Pytorch使用Visdom進行數(shù)據(jù)可視化的示例代碼
pytorch Visdom可視化,是一個靈活的工具,用于創(chuàng)建,組織和共享實時豐富數(shù)據(jù)的可視化,這個博客簡要介紹一下在使用Pytorch進行數(shù)據(jù)可視化的一些內(nèi)容,感興趣的朋友可以參考下2023-12-12