如何在 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.