Python 如何获取音频的时长

Python 如何获取音频的时长

音频处理领域在近年来得到了大幅扩展,而Python已成为围绕音频处理任务的常用语言选择。在处理音频时,常见的一个任务是确定音频文件的长度,这在各种应用中都非常有用,比如创建播放列表、音频数据分析或开发音频编辑工具。

在本文中,将向您介绍一系列从基本到高级的技术,以使用Python获取音频的时长。我们将提供真实的代码示例。在深入研究主题之前,我们首先要了解与音频处理相关的基本概念和术语。这将为您实现后面文章中介绍的各种方法提供必要的基础。让我们从音频时长的定义开始,然后探索计算它的语法和算法。

术语“音频时长”指的是音频文件播放的时间,通常以秒或分钟为单位。这个值受到定义音频文件的一系列特征的影响,包括样本数量、声道数量和采样率等。对这些知识的全面掌握对于多种应用至关重要,包括但不限于转录、分析和音频编辑。

语法

Python提供了多样的库来处理音频文件。这些库包括wave、pydub和librosa,每个库都有自己独特的语法和函数以上传音频文件并测量其时长。确定音频文件时长的典型过程包括以下步骤:

  • 导入必要的库。

  • 读取音频文件。

  • 提取文件的特征(例如采样率、样本数量和声道数量)。

  • 使用提取的特征计算时长。

算法

要在Python中获取音频文件的时长,可以实现以下算法:

  • 使用适当的库上传音频文件。

  • 提取音频文件的相关特征,包括采样率、声道数量和帧数。

  • 通过将帧数除以采样率来计算音频文件的时长。

  • 通过打印或返回时长值输出。

方法

现在我们将探索几种在Python中确定音频文件时长的技术。将涵盖以下方法:

  • 使用wave库。

  • 使用pydub库。

  • 使用librosa库。

  • 使用ffmpeg-python库。

方法1:使用wave库

波浪库是一个内置的Python模块,提供对WAV文件的支持。以下是使用波浪库获取音频文件持续时间的完整代码示例 −

示例

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

在这个特定的代码片段中,我们导入了AudioSegment类,它来自pydub库,目的是读取和修改音频文件。为了加载音频文件,我们调用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项目中实现音频持续时间计算提供坚实的基础。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程