如何在 Python 中獲取音訊時長?


近年來,音訊處理領域得到了長足發展,Python 已成為音訊處理任務中普遍使用的語言選擇。音訊處理中的一項常見任務是確定音訊檔案的長度,這在各種應用中都很有用。例如建立播放列表、音訊資料分析或開發音訊編輯工具。

在本文中,您將學習各種從基礎到高階的技術,以使用 Python 獲取音訊時長。在此過程中將提供真實的程式碼示例。在深入研究主題之前,瞭解與音訊處理相關的基本概念和術語至關重要。這將為您實施本文後面介紹的各種方法奠定必要的基礎。讓我們從音訊時長的定義開始,然後探討計算音訊時長的語法和演算法。

術語“音訊時長”指的是音訊檔案播放的時間量,通常以秒或分鐘為單位進行測量。此值受定義音訊檔案的一系列特徵的影響,包括樣本數量、通道和取樣率。全面掌握這些知識對於包括但不限於轉錄、分析和音訊編輯在內的各種應用至關重要。

語法

Python 提供了各種用於管理音訊檔案處理的庫。這些庫包括 wave、pydub 和 librosa,每個庫都有其自己的獨特語法和函式用於上傳音訊檔案並測量其時間長度。確定音訊檔案時長的典型過程包括以下步驟 -

  • 匯入必需的庫。

  • 讀取音訊檔案。

  • 提取檔案的特徵(例如取樣率、樣本數量和通道數量)。

  • 利用提取的特徵計算時長。

演算法

要獲取 Python 中音訊檔案的時長,可以實現以下演算法 -

  • 實現適當的庫來上傳音訊檔案。

  • 提取音訊檔案的相關特徵,包括取樣率、通道數量和幀數。

  • 透過將幀數除以取樣率來計算音訊檔案的時長。

  • 透過列印或返回值來輸出時長值。

方法

我們現在將探討幾種在 Python 中確定音訊檔案時長的技術。將介紹以下方法 -

  • 使用 wave 庫。

  • 使用 pydub 庫。

  • 使用 librosa 庫。

  • 使用 ffmpeg-python 庫。

方法 1:使用 wave 庫

wave 庫是一個內建的 Python 模組,它為 WAV 檔案提供支援。以下是如何使用 wave 庫獲取音訊檔案時長的完整程式碼示例 -

示例

import wave
def get_duration_wave(file_path):
   with wave.open(file_path, 'r') as audio_file:
      frame_rate = audio_file.getframerate()
      n_frames = audio_file.getnframes()
      duration = n_frames / float(frame_rate)
      return duration
file_path = 'example.wav'
duration = get_duration_wave(file_path)
print(f"Duration: {duration:.2f} seconds")

輸出

Duration: 10.00 seconds

方法 2:使用 pydub 庫

pydub 庫是一個常用的且易於使用的音訊處理工具。為了使用 pydub,您必須首先透過 pip install pydub 進行安裝。以下是如何使用 pydub 獲取時長的程式碼示例 -

示例

from pydub import AudioSegment
def get_duration_pydub(file_path):
   audio_file = AudioSegment.from_file(file_path)
   duration = audio_file.duration_seconds
   return duration
file_path = 'example.wav'
duration = get_duration_pydub(file_path)
print(f"Duration: {duration:.2f} seconds")

輸出

Duration: 10.00 seconds

在此程式碼片段中,我們匯入了來自 pydub 庫的 AudioSegment 類,用於讀取和修改音訊檔案。為了載入音訊檔案,我們呼叫了 from_file 函式,並且使用 duration_seconds 屬性以秒為單位獲取音訊檔案的長度。

方法 3:使用 librosa 庫

Librosa 是另一個用於使用 Python 處理音訊的著名庫,主要側重於音樂和聲音分析。透過在您的終端或命令提示符中鍵入“pip install librosa”,您可以輕鬆快速地安裝它。以下是如何使用 librosa 獲取時長的程式碼示例 -

示例

import librosa
def get_duration_librosa(file_path):
   audio_data, sample_rate = librosa.load(file_path)
   duration = librosa.get_duration(y=audio_data, sr=sample_rate)
   return duration
file_path = 'example.wav'
duration = get_duration_librosa(file_path)
print(f"Duration: {duration:.2f} seconds")

輸出

Duration: 10.00 seconds

在此示例中,librosa.load 函式用於讀取音訊檔案並獲取音訊資料和取樣率。然後使用 librosa.get_duration 函式根據音訊資料和取樣率計算時長。

方法 4:使用 ffmpeg-python 庫

FFmpeg 是一個在各種平臺上用於處理音訊和影片的常用工具。ffmpeg-python 庫充當 FFmpeg 命令列介面的 Python 包裝器,可以使用 pip install ffmpeg-python 進行安裝。以下是演示如何使用 ffmpeg-python 獲取音訊檔案時長的示例程式碼 -

示例

import ffmpeg
def get_duration_ffmpeg(file_path):
   probe = ffmpeg.probe(file_path)
   stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'audio'), None)
   duration = float(stream['duration'])
   return duration
file_path = 'example.wav'
duration = get_duration_ffmpeg(file_path)
print(f"Duration: {duration:.2f} seconds")

輸出

Duration: 10.00 seconds

在這種情況下,我們使用 ffmpeg.probe 函式獲取有關音訊檔案的元資料。隨後,我們從流列表中過濾音訊流,並從流字典中存在的“duration”欄位中提取時長。

結論

在本文中,我們深入探討了四種不同的方法,使用 wave、pydub、librosa 和 ffmpeg-python 庫在 Python 中獲取音訊檔案的時長。每種方法都有其自身的優點和侷限性,庫的選擇取決於您的特定需求和偏好。這些程式碼示例旨在為您提供堅實的基礎,以便在您的 Python 專案中實現音訊時長計算。

更新於:2023年7月24日

5K+ 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.