在视频中使用 Sidon on Modal 清理语音
使用 Sidon v0.1(Hugging Face 上的 sarulab-speech/sidon-v0.1)进行语音修复,这是一种音频到音频模型,可在 48 kHz 下重新合成语音。需要 GPU,因此模型在 Modal 上运行;其余步骤(音频提取、响度处理、重新混流)均在本地机器上使用 ffmpeg 完成。视频流不会被重新编码。
Modal 任务位于本插件的 scripts/sidon_enhance.py(${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py)。
模型选择(为什么选择 Sidon)
| 模型 | 评价 |
|---|---|
| Sidon v0.1 | 默认选项。轻量;一个 11 分钟的文件在 L4 级 GPU 上运行一次任务仅需几美分。输出干净、全频段、48 kHz。 |
| NVIDIA RE-USE | 保留更多说话者自身的频谱细节,但在长文件上会耗尽 GPU 内存(在 11 分钟文件的第二个 30 秒片段失败)。仅适用于短片段。 |
| DeepFilterNet | 已排除:语音存在可闻失真。 |
Sidon 会重新生成 8 kHz 以上的所有内容,因此结果语音中不会残留任何房间声或背景声。音轨中的音乐和其他非语音声音会丢失。如果视频包含背景音乐,应先清理语音再加入音乐。
首选项
读取 remote-video-editing/preferences.json,位置为第一个存在的数据根目录:$CLAUDE_USER_DATA,然后是 ~/.claude-user-data,然后是 ${XDG_DATA_HOME:-~/.local/share}/claude-plugins。键:
| 键 | 默认值 | 含义 |
|---|---|---|
modal_command | modal | 运行 Modal 应用的命令(可以使用包装器来选择配置文件或工作区) |
run_notes | 无 | 关于在何处运行 Modal(例如持有认证的另一台主机)以及文件如何到达该主机的自由文本说明。请遵循这些说明。 |
loudness_lufs | -14 | 集成的响度目标(YouTube 风格) |
true_peak_db | -1.5 | 真实峰值上限 |
如果文件不存在且 modal token 未设置(modal profile current 失败),则停止并告知用户先运行 modal setup。
步骤
在源视频旁边的文件夹中工作。IN=<video>, MODAL=<modal_command, 默认 modal>。
- 提取音频为单声道 48 kHz FLAC:
ffmpeg -v error -y -i "$IN" -vn -ac 1 -ar 48000 -c:a flac -sample_fmt s16 audio.flac - 先测试 30 秒。 从包含语音的部分(不要从开头几秒)剪辑一个片段:
将两个文件交给用户收听。在用户批准声音之前,不要运行完整文件。ffmpeg -v error -y -ss 60 -t 30 -i audio.flac -c:a flac test30.flac $MODAL run "${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py" --src test30.flac --out test30_sidon.flac - 运行完整音轨:
任务每处理 96 秒的块打印一行。首次运行会构建镜像(需要几分钟);后续运行会复用镜像。$MODAL run "${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py" --src audio.flac --out audio_sidon.flac - 测量响度(两遍
loudnorm的第一遍):ffmpeg -hide_banner -nostats -i audio_sidon.flac \ -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null - 2>&1 | grep -A12 '^{' - 重新混流,使用测量值。视频流复制:
对于需要在 Apple 播放器中播放的 HEVC 源,添加ffmpeg -v error -y -i "$IN" -i audio_sidon.flac -map 0:v -map 1:a -c:v copy \ -af "loudnorm=I=-14:TP=-1.5:LRA=11:measured_I=<input_i>:measured_TP=<input_tp>:measured_LRA=<input_lra>:measured_thresh=<input_thresh>:offset=<target_offset>:linear=true,aresample=48000" \ -c:a aac -b:a 192k -movflags +faststart "<name>_clean.mp4"-tag:v hvc1。 - 验证: 使用
ffprobe检查时长是否与源视频匹配(应在帧级别一致),并在相同偏移处剪辑一对 30 秒前后片段(-vn -c:a copy)供用户比较。
脚本库
如果用户有脚本库(find-script, save-script),请在修改 Modal 任务前进行检查,并在之后保存任何修改过的版本。
费用与限制
- 脚本中的 GPU 列表:L4, A10G, L40S(Modal 上空闲的均可)。超时 1 小时。
- 整个文件作为字节发送到函数。对于长达一两小时的单声道 FLAC 语音音轨适用;对于更长的素材,请分割音频,分别运行各部分,然后使用 ffmpeg 的
concat连接它们。 - 每次冷启动时从 Hugging Face 下载权重(公开,无需 token)。
相关
关于本地编辑、渲染和音频工作(Kdenlive, melt, ffmpeg 预设, 静音剪切),请参阅此插件中的 complementary-plugins 技能。