You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有Python代码可将MP3文件转换为含[秒数][频率]列的DataFrame?

MP3每秒频率计算Python实现

前置依赖安装

  • 安装Python依赖包:pip install pydub numpy pandas
  • 安装FFmpeg解码器:用于读取MP3文件,各系统可搜索对应安装教程配置,完成后即可正常调用。

完整代码

from pydub import AudioSegment
import numpy as np
import pandas as pd

def get_second_frequency(mp3_path):
    # 读取MP3文件,转单声道简化计算
    audio = AudioSegment.from_mp3(mp3_path).set_channels(1)
    sample_rate = audio.frame_rate
    # 取整计算总秒数
    total_seconds = int(audio.duration_seconds)
    result = []
    
    for sec in range(total_seconds):
        # 截取当前秒对应的音频片段
        start_ms = sec * 1000
        end_ms = (sec + 1) * 1000
        current_segment = audio[start_ms:end_ms]
        # 音频转numpy数组格式
        samples = np.array(current_segment.get_array_of_samples())
        # FFT计算频率
        fft_values = np.fft.fft(samples)
        fft_frequencies = np.fft.fftfreq(len(samples), 1/sample_rate)
        # 筛选正频率区间,取幅值最高的主频率
        positive_mask = fft_frequencies > 0
        positive_freqs = fft_frequencies[positive_mask]
        positive_amplitude = np.abs(fft_values[positive_mask])
        dominant_freq = positive_freqs[np.argmax(positive_amplitude)]
        # 存入结果列表
        result.append({"秒数": sec + 1, "频率": round(dominant_freq, 2)})
    
    # 转换为DataFrame返回
    return pd.DataFrame(result)

# 调用示例
if __name__ == "__main__":
    # 替换为你的MP3文件路径
    freq_df = get_second_frequency("test.mp3")
    print(freq_df)
    # 可直接导出为CSV文件
    # freq_df.to_csv("每秒频率结果.csv", index=False)

补充说明

  • 代码默认输出每秒的主频率(幅值最高的频率点),如果需要其他频率统计规则,可修改FFT计算部分的逻辑
  • 转单声道是为了简化计算,若需要处理多声道音频,删除set_channels(1)的调用后分别计算各声道频率即可

内容的提问来源于stack exchange,提问作者Ali Alamri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:27:03