0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Pydub:一個基于ffmpeg的Python音頻處理模塊

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-21 10:40 ? 次閱讀

Pydub是一個基于ffmpeg的Python音頻處理模塊,封裝了許多ffmpeg底層接口,因此用它來做音樂歌曲文件格式轉(zhuǎn)換會非常方便。

如果你閱讀過我們之前的文章:《剪輯音樂要很久?3行語句Python瞬間搞定》,你就知道 Pydub 有多么強(qiáng)大了。

今天給大家介紹它的音樂文件格式轉(zhuǎn)換功能,幾乎支持所有音樂音頻格式,非常牛逼。

1.安裝

安裝Pydub前需要先安裝 ffmpeg :

**(可選一) Mac ** (打開終端(Terminal), 用 homebrew 安裝):

brew install ffmpeg --with-libvorbis --with-sdl2 --with-theora

(可選二) Linux:

apt-get install ffmpeg libavcodec-extra

(可選三) Windows:

  1. 進(jìn)入 http://ffmpeg.org/download.html#build-windows,點擊 windows 對應(yīng)的圖標(biāo),進(jìn)入下載界面點擊 download 下載按鈕。
  2. 解壓下載好的zip文件到指定目錄。
  3. 將解壓后的文件目錄中 bin 目錄(包含 ffmpeg.exe )添加進(jìn) path 環(huán)境變量中。

**(必須) **按照上述ffmpeg安裝步驟成功后就可以打開命令提示符(cmd)或終端(Terminal),安裝pydub:

pip install pydub

2.mp3轉(zhuǎn)wav或其他格式

將單個mp3音頻文件轉(zhuǎn)化為wav音頻格式:

from pydub import AudioSegment
def trans_mp3_to_wav(filepath):
    """
    將mp3文件轉(zhuǎn)化為wav格式
    Args:
        filepath (str): 文件路徑
    """
    song = AudioSegment.from_mp3(filepath)
    filename = filepath.split(".")[0]
    song.export(f"{filename}.wav", format="wav")

可以繼續(xù)封裝該函數(shù),將單個mp3文件轉(zhuǎn)化為任意其他音樂音頻格式:

from pydub import AudioSegment
def trans_mp3_to_any_audio(filepath, audio_type):
    """
    將mp3文件轉(zhuǎn)化為任意音頻文件格式
    Args:
        filepath (str): 文件路徑
        audio_type(str): 文件格式
    """
    song = AudioSegment.from_mp3(filepath)
    filename = filepath.split(".")[0]
    song.export(f"{filename}.{audio_type}", format=f"{audio_type}")

如ogg格式:

trans_mp3_to_any_audio("Alone.mp3", "ogg")

只要是ffmpeg支持的音樂音頻格式,它都可以轉(zhuǎn)換,支持的格式長達(dá)幾十個,下面我簡單列一些:

wavavimp4flv
oggflacapemp2
aiffvocau

3.更加通用的轉(zhuǎn)換函數(shù)

剛剛是mp3轉(zhuǎn)任意音頻格式,我希望把它寫成任意音頻格式轉(zhuǎn)任意音頻格式:

from pydub import AudioSegment
def trans_any_audio_types(filepath, input_audio_type, output_audio_type):
    """
    將任意音頻文件格式轉(zhuǎn)化為任意音頻文件格式
    Args:
        filepath (str): 文件路徑
        input_audio_type(str): 輸入音頻文件格式
        output_audio_type(str): 輸出音頻文件格式
    """
    song = AudioSegment.from_file(filepath, input_audio_type)
    filename = filepath.split(".")[0]
    song.export(f"{filename}.{output_audio_type}", format=f"{output_audio_type}")

比如將ogg音樂音頻格式轉(zhuǎn)化為flv音樂音頻格式:

trans_any_audio_types("Alone.ogg", "ogg", "flv")

或者M(jìn)P4格式,總之,一般你需要的格式它都能滿足。

trans_any_audio_types("Alone.ogg", "ogg", "mp4")

4.批量轉(zhuǎn)化音頻格式

現(xiàn)在,嘗試將一個文件夾下的所有非mp3音頻格式的文件轉(zhuǎn)化為mp3音頻格式:

def trans_all_file(files_path, target="mp3"):
    """
    批量轉(zhuǎn)化音頻音樂格式
    Args:
        files_path (str): 文件夾路徑
        target (str, optional): 目標(biāo)音樂格式. Defaults to "mp3".
    """
    for filepath in os.listdir(files_path):
        # 路徑處理
        modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
        datapath = os.path.join(modpath, files_path + filepath)
        # 分割為文件名字和后綴并載入文件
        input_audio = os.path.splitext(datapath)
        song = AudioSegment.from_file(datapath, input_audio[-1].split(".")[-1])
        # 導(dǎo)出
        song.export(f"{input_audio[0]}.{target}", format=target)

只要輸入文件夾名稱,即可全部轉(zhuǎn)化該文件夾下的音樂文件格式為mp3格式:

trans_all_file("F:push20200607music")

看了我們今天的教程,學(xué)會這招后,你再也不用擔(dān)心格式之間的轉(zhuǎn)化問題,通過使用** pydub**模塊你能輕易地解決這些問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 終端
    +關(guān)注

    關(guān)注

    1

    文章

    1135

    瀏覽量

    29889
  • 音頻處理
    +關(guān)注

    關(guān)注

    0

    文章

    85

    瀏覽量

    17775
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84695
  • ffmpeg
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    7403
收藏 人收藏

    評論

    相關(guān)推薦

    如何移植FFmpeg

    ?FFmpeg款專門用于處理數(shù)字音頻和視頻,支持錄制、轉(zhuǎn)換,并能將這些媒體內(nèi)容轉(zhuǎn)化為實時流數(shù)據(jù)的開源計算機(jī)程序。它遵循LGPL或GPL許可協(xié)議,為用戶提供了涵蓋音視頻錄制、格式轉(zhuǎn)換
    的頭像 發(fā)表于 06-07 15:28 ?1677次閱讀
    如何移植<b class='flag-5'>FFmpeg</b>

    K510能做哪些音頻處理?支持了什么python音頻處理庫?

    麻煩問下,K510 能做哪些音頻處理?支持了什么python 音頻處理庫?我們想用K510來做
    發(fā)表于 09-14 07:32

    介紹FFmpeg是什么?與關(guān)于FFmpeg的問題回答

    FFmpeg誕生于十幾年前,最初是作為MPlayer播放器的子項目出現(xiàn)。因為當(dāng)時的播放器有需要支持各種各樣解碼的需求, 其中有
    的頭像 發(fā)表于 07-28 09:10 ?2.4w次閱讀
    介紹<b class='flag-5'>FFmpeg</b>是什么?與關(guān)于<b class='flag-5'>FFmpeg</b>的問題回答

    Julia 和Python一個更強(qiáng)

    Julia和Python之間的關(guān)鍵區(qū)別是處理特定問題的方式。
    發(fā)表于 12-17 11:49 ?2202次閱讀

    關(guān)于FFmpeg深度學(xué)習(xí)相關(guān)內(nèi)容的技術(shù)分享

    首先,為什么需要FFmpeg深度學(xué)習(xí)模塊,FFmpeg對輸入的碼流,首先進(jìn)行解碼,解碼后得到一個個的視頻幀,以及相應(yīng)的音頻數(shù)據(jù)等。經(jīng)過
    的頭像 發(fā)表于 09-04 10:52 ?1854次閱讀
    關(guān)于<b class='flag-5'>FFmpeg</b>深度學(xué)習(xí)相關(guān)內(nèi)容的技術(shù)分享

    Python模塊Addit屬性設(shè)置

    Addit 是Python模塊,除了提供標(biāo)準(zhǔn)的字典語法外,Addit 生成的字典的值既可以使用屬性來獲取,也可以使用屬性進(jìn)行設(shè)置。 這意味著你 不用 再寫這樣的字典了: body
    的頭像 發(fā)表于 11-17 10:15 ?1399次閱讀

    在QT上構(gòu)建ffmpeg環(huán)境實現(xiàn)音頻的解碼

    在QT上構(gòu)建ffmpeg環(huán)境,實現(xiàn)音頻的解碼
    發(fā)表于 06-09 09:05 ?1161次閱讀
    在QT上構(gòu)建<b class='flag-5'>ffmpeg</b>環(huán)境實現(xiàn)<b class='flag-5'>音頻</b>的解碼

    關(guān)于python中非常實用的圖像處理庫 1

    PIL:Python Imaging Library,是Python環(huán)境下最受歡迎的圖像處理庫,木有之。然而,在Python2.7之后不再
    的頭像 發(fā)表于 02-08 17:18 ?1343次閱讀

    關(guān)于python中非常實用的圖像處理庫 2

    PIL:Python Imaging Library,是Python環(huán)境下最受歡迎的圖像處理庫,木有之。然而,在Python2.7之后不再
    的頭像 發(fā)表于 02-08 17:18 ?1100次閱讀

    Python-模塊與包

    模塊Python 程序架構(gòu)的核心概念
    的頭像 發(fā)表于 02-16 14:55 ?777次閱讀
    <b class='flag-5'>Python</b>-<b class='flag-5'>模塊</b>與包

    Hello FFmpeg

    ffmpeg跨平臺的音視頻錄制、轉(zhuǎn)換、編解碼的庫。使用C語言編寫而成,可在主流移動與PC平臺上使用。ffmpeg不僅提供可嵌入到App中的庫,還提供了可以直接使用的工具。
    的頭像 發(fā)表于 03-03 09:52 ?624次閱讀
    Hello <b class='flag-5'>FFmpeg</b>

    優(yōu)化指南-FFmpeg構(gòu)建和優(yōu)化

    FFmpeg免費(fèi)開源的完整跨平臺解決方案,用于記錄、轉(zhuǎn)換和流傳輸音頻和視頻。
    的頭像 發(fā)表于 06-15 09:04 ?1376次閱讀

    Python 梯度計算模塊如何實現(xiàn)邏輯回歸模型

    AutoGrad 是老少皆宜的 Python 梯度計算模塊。 對于初高中生而言,它可以用來輕易計算條曲線在任意
    的頭像 發(fā)表于 10-21 11:01 ?501次閱讀
    <b class='flag-5'>Python</b> 梯度計算<b class='flag-5'>模塊</b>如何實現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個</b>邏輯回歸模型

    Pydub音樂文件格式轉(zhuǎn)換功能介紹

    Pydub基于ffmpegPython音頻處理
    的頭像 發(fā)表于 10-31 14:51 ?829次閱讀

    python如何導(dǎo)入模塊

    Python種強(qiáng)大的編程語言,它支持模塊化編程,使得開發(fā)者可以將代碼分解為可重用且獨立的模塊。模塊
    的頭像 發(fā)表于 11-22 14:46 ?960次閱讀