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

寻求可本地处理大音视频文件的音乐识别库(需提取时间戳)

本地提取大型音视频文件中歌曲时间戳的方案

第一步:预处理音视频文件(提取音频并标准化)

大型视频文件(如Twitch VOD)需先提取音频并转成适合处理的格式,用ffmpeg即可高效完成本地处理:

# 从视频中提取音频,保存为WAV格式
ffmpeg -i input_vod.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 output_audio.wav

参数说明:-vn忽略视频流,-ar设置44100Hz采样率,-ac设置双声道,这些参数能保证后续识别的准确性。

第二步:使用本地音乐指纹库Dejavu

Dejavu是纯本地的音乐指纹识别系统,可离线建立歌曲指纹库,匹配音频片段并输出时间戳,完全适配大文件本地处理需求。

配置与使用步骤:

  1. 安装依赖:pip install dejavu,确保系统已安装ffmpeg和sqlite3(多数系统默认自带)。
  2. 建立参考歌曲指纹库:
    • 新建文件夹存放需要识别的参考歌曲(如歌曲A、B、C的音频文件)。
    • 运行代码初始化指纹库:
      from dejavu import Dejavu
      from dejavu.config import DEFAULT_CONFIG
      
      # 配置本地SQLite数据库存储指纹
      config = DEFAULT_CONFIG
      djv = Dejavu(config)
      
      # 为参考歌曲生成指纹
      djv.fingerprint_directory("path/to/your/reference_songs", [".mp3", ".wav"])
      
  3. 识别目标音频并输出时间戳:
    # 处理预处理后的音频文件
      results = djv.recognize("file", "output_audio.wav")
    
      # 转换时间格式并输出
      def sec_to_hms(seconds):
          h = int(seconds // 3600)
          m = int((seconds % 3600) // 60)
          s = int(seconds % 60)
          return f"{h}:{m:02d}:{s:02d}"
    
      for match in results['matches']:
          song_name = match['song_name']
          start_sec = match['offset_seconds']
          end_sec = start_sec + match['song_duration']
          print(f"{song_name}: {sec_to_hms(start_sec)} - {sec_to_hms(end_sec)}")
    

备选方案:librosa结合自定义指纹匹配

若需要更灵活的控制,可使用librosa提取音频特征,自行实现指纹匹配逻辑:

  1. 安装librosa:pip install librosa
  2. 核心逻辑:
    • 为参考歌曲提取梅尔频谱特征作为指纹。
    • 滑动窗口遍历目标音频的特征,与参考库匹配,筛选相似度最高的片段并记录时间戳。
    • 该方案需自行编写匹配逻辑,适合有一定编程基础的用户。

注意事项

  • 参考歌曲的音频质量需与目标文件中的歌曲尽可能一致(减少背景噪音),否则识别准确率会下降。
  • 对于数小时的超长音频,Dejavu会自动分块处理,无需担心内存溢出问题。
  • 若识别结果误差较大,可调整Dejavu的指纹参数(如fingerprint_limit)优化效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:00:06