Some checks failed
Upstream Sync / Sync latest commits from upstream repo (push) Has been cancelled
3.3 KiB
3.3 KiB
实时音频处理最佳方案(Demucs + RTX 3060)
一、方案对比
| 方案 | 版权规避率 | 延迟 | 算力 | 复杂度 |
|---|---|---|---|---|
| FFmpeg 纯滤波(当前) | 60-70% | 0 | 低 | 低 |
| Demucs 人声分离 | 90%+ | 4-8s | RTX 3060 | 中高 |
二、推荐架构:Demucs 实时管道
抖音流 ─┬─ FFmpeg 解复用 ─┬─ 视频 ─────────────────────────────┐
│ │ │
│ └─ 音频 ─→ Python Demucs ─→ 人声 ────┼─→ FFmpeg 复用 ─→ YouTube RTMP
│ (分块处理) │
└────────────────────────────────────────────────────┘
核心参数(RTX 3060 12GB)
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 模型 | htdemucs(单模型,非 _ft) |
速度最快,质量够用 |
| chunk 长度 | 2.5-3 秒 | 延迟 ≈ 2×chunk ≈ 5-6s |
| overlap | 0.25 | 减少接缝,质量更好 |
| shifts | 0 | 降低算力,实时必需 |
| segment | 7.8(默认)或更小 | 显存不足时减小 |
RTX 3060 算力
- 约 13 TFLOPS,高于 Demucs 实时所需 2 TFLOPS
- 12GB 显存足够 htdemucs(约 6-8GB)
- 预期:2-4× 实时速度,可满足直播
三、实现方式
方式 A:Python 自建管道(推荐)
# 伪代码流程
# 1. FFmpeg 从抖音拉流,输出: -vn -acodec pcm_s16le -ar 44100 -ac 1 pipe:1
# 2. 主进程读取音频块(2.5s = 110250 samples @ 44.1kHz)
# 3. 调用 demucs.separate_audio(model, chunk) 得到 vocals
# 4. 人声写入 pipe,FFmpeg 另一进程读取并与视频复用推流
依赖:
demucs
torch
torchaudio
模型加载:
from demucs.pretrained import get_model
model = get_model('htdemucs') # 单模型,非 htdemucs_ft
方式 B:GStreamer(若可用)
GStreamer 1.28+ 内置 demucs 元素,CPU 约 8× 实时:
# 需安装 gst-plugins-rs (含 demucs)
gst-launch-1.0 uridecodebin uri=抖音流 ! audioconvert ! demucs ! ...
四、分块处理要点
- 重叠:chunk 之间 25% 重叠,避免接缝
- 队列:双缓冲,一块处理时另一块接收
- 采样率:Demucs 默认 44100 Hz,与 FFmpeg 输出一致
- 延迟:总延迟 ≈ 2 × chunk 长度(约 5-6 秒可接受)
五、快速验证(离线测试)
# 安装
pip install demucs torch torchaudio
# 测试 30 秒音频分离速度
demucs -n htdemucs --two-stems=vocals -j 1 test_30s.mp3 -o output/
# 若 30s 在 10s 内完成 → 可实时
六、与当前方案的关系
- 当前:
douyin_youtube_ffplay.py纯 FFmpeg,60-70% 规避率 - 升级:可新增
douyin_youtube_demucs.py,集成 Demucs 管道 - 切换:通过 config 选择
mode = ffmpeg或mode = demucs
七、配置建议(config/youtube.ini)
[youtube]
key = xxx
# 音频模式: ffmpeg | demucs
; audio_mode = ffmpeg
# Demucs 专用
; demucs_chunk = 2.5
; demucs_model = htdemucs