如何在 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} 秒")
输出
Duration: 10.00 秒
方法 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 秒
在此特定代码片段中,我们导入了 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} 秒")
输出
Duration: 10.00 秒
在此示例中,使用 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} 秒")
输出
Duration: 10.00 秒
在本例中,我们使用 ffmpeg.probe 函数获取与音频文件相关的元数据。随后,我们从流列表中过滤音频流,并从流字典中的"duration"字段中提取持续时间。
结论
在本文中,我们深入研究了使用 wave、pydub、librosa 和 ffmpeg-python 库在 Python 中获取音频文件持续时间的四种不同方法。每种方法都有自己的优点和局限性,库的选择取决于您的个人需求和倾向。这些代码示例旨在为您提供坚实的基础,以便在 Python 项目中实现音频持续时间计算。