做了个 AI 音频分离站,从模型选型到部署的一些踩坑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
codeugar

做了个 AI 音频分离站,从模型选型到部署的一些踩坑

  •  
  •   codeugar Apr 28 907 views

    背景

    之前自己练琴想扒一首歌的贝斯线,市面上的工具要么只能分 4 轨 ( vocals/drums/bass/other ),要么订阅一个月用两次就忘了取消。 看到 Meta AI 的 htdemucs_6s 模型能分 6 轨(多了 guitar 和 piano ), 就花了几个月做了个站。

    技术上踩了一些坑,分享出来给可能也想做类似东西的同学参考。

    一、模型选型:为什么是 htdemucs

    主流开源音频分离模型:

    • spleeter ( Deezer ,2019 ):老但稳,质量一般,4 轨
    • Demucs v3 ( Meta ,2021 ):CNN ,质量好,4 轨
    • htdemucs ( Meta ,2022 ):Hybrid Transformer ,2022 Sony MDX 冠军,4 轨
    • htdemucs_6s ( Meta ,2022 ):上面那个的 6 轨版本,多了 guitar/piano
    • BS-RoFormer ( ZFTurbo 等,2024 ):当前 SOTA ,但模型大、推理慢

    对比测了 spleeter / htdemucs / BS-RoFormer:

    • 跟 spleeter 比:人声分离清洁度提升非常明显,特别是中频段
    • 跟 BS-RoFormer 比:质量差距小(盲听基本难分),但推理时间是后者的 1/3 , 对面向 C 端的服务来说,60 秒出结果 vs 3 分钟出结果差别太大

    如果是离线批处理或专业制作,BS-RoFormer 应该是更好的选择。

    二、推理平台:为什么是 Replicate

    最早自己开了 RunPod 4090 实例跑,跑通没问题,但有几个问题:

    1. 没人用的时候 GPU 还在烧钱,每小时 $0.40 起步
    2. 自己得维护容器、模型权重、队列、错误重试一整套
    3. 流量高峰时单实例扛不住,要做多实例 + 负载均衡

    后来转去 Replicate ,按秒计费,没人用就 0 成本。 htdemucs 一首 3 分钟的歌大概 25-40 秒推理时间, 按 A40 GPU 计费下来单首 GPU 成本大概 2-3 美分。 对于一个早期阶段、流量不稳定的产品,按需付费比固定 GPU 划算太多。

    对比过的几家:

    • Modal:冷启动比 Replicate 慢一点,但定价灵活,适合复杂 pipeline
    • HuggingFace Inference Endpoints:贵且冷启动慢,pass
    • 自部署 RunPod / Vast.ai:除非月流水稳定上量否则不划算

    三、几个非模型层面的坑

    1. YouTube 链接处理:用户贴 URL 比让他下载文件转格式 UX 好太多。 yt-dlp 是必备,但要处理大量 edge case (年龄限制、地区限制、live 流), 还得加超时和文件大小限制防滥用。

    2. 多轨同步播放器:6 个 stem 同时播放还要支持 mute/solo/seek , 一开始用 howler.js 单实例切换完全不行( latency 差几十 ms 听得出来), 最后用 Web Audio API 自己写了个共享 AudioContext 的播放器。

    3. 格式转换:用户上传可能是 MP3/WAV/FLAC/M4A/OGG/WEBM 各种格式, htdemucs 只吃 WAV 。前置 ffmpeg 转码层是必须的, 但 ffmpeg 在 Replicate 容器里跑得慢, 后来改成在自己服务器转码完再丢给 Replicate ,整体延迟降了 30%。

    4. BPM/key 检测:用 librosa 自己算的,但 librosa 的 key detection 在电子乐上准确率一般,准备后续接入 essentia 重做。

    四、成品

    站点:aistemsplitter.org

    有免费额度,够分两三首歌看看质量。如果想多跑几首, V2EX 的同学可以在结账页用 v2ex 这个码,我加了点额度主要是 想多收一些技术圈的反馈,特别是中文歌的分离效果。

    主要想问几个问题:

    1. 有没有人在生产环境用过 BS-RoFormer 跑 C 端?延迟是怎么解的?
    2. Replicate 之外有没有更便宜的 GPU serverless 平台值得试? (需要支持自定义模型权重)
    3. 中文歌(特别是有混响/自动调音的)分离效果一般, 有没有什么改进思路?是该等更好的开源模型,还是有 预处理/后处理的方法可以缓解?

    谢各位,欢迎拍砖。

    10 replies    2026-04-29 15:08:12 +08:00
    yanhuqing666
        1
    yanhuqing666  
       Apr 28
    订阅问题“Replicate 之外有没有更便宜的 GPU serverless 平台值得试?”结论
    LuliYanng
        2
    LuliYanng  
       Apr 29
    我之前也搞过 不过那时候好像这些 GPU serverless 还不成熟,我还是租国内云 GPU 厂商的 7 天特惠 T4 GPU 玩的。至于你说的分离效果,有能力你当然可以自己改进模型 不过感觉近些年好像也没什么进展了 当时还想着有没有模型能够强大到把节奏吉他和主奏吉他给分离出来的,不过等了两三年了,似乎没什么消息,估计已经发展到头了吧(至少对于这个领域的需求来说)
    AuYuHui
        3
    AuYuHui  
       Apr 29
    murmur
        4
    murmur  
       Apr 29
    @AuYuHui msst 是壳,里面还是跑的模型
    StubbornHuang
        5
    StubbornHuang  
       Apr 29
    有用户付费吗。。。
    andlp
        6
    andlp  
       Apr 29
    ffmpeg 能处理吗
    codeugar
        7
    codeugar  
    OP
       Apr 29
    @AuYuHui 这个要自托管,本质上也是各种模型组合的应用项目
    codeugar
        8
    codeugar  
    OP
       Apr 29
    @StubbornHuang 别说这么悲伤的话
    codeugar
        9
    codeugar  
    OP
       Apr 29
    @LuliYanng 需求太小众了 目前也还没有
    codeugar
        10
    codeugar  
    OP
       Apr 29
    @andlp 不能分离出不同乐器的声音,我记得 ffmpeg 功能比较简单
    About     Help     Advertise     Blog     API     FAQ     Solana     2822 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 09:22 PVG 17:22 LAX 02:22 JFK 05:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86