图像与设计
已有音乐轨需自动避让人声/对白时,用 Sonilo…
当已有独立音乐轨和配音、对白或视频人声轨,需要自动在说话处降低音乐并在间隙回升后输出混音时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
已有音乐轨需自动避让人声/对白时,用 S特定
解决思路
- 先按 setup-api-key 技能完成 Sonilo 认证,确保可用 MCP 工具或已登录的 `sonilo` CLI,并具备 `sonilo login`、托管 OAuth 插件或 `SONILO_API_KEY` 凭据。
- 会话开始时二选一传输方式并固定:MCP 或 CLI;不要在单个任务里混用,也不要主动宣告选择。
- 若当前会话可见 Sonilo MCP 工具(如 `audio_ducking`),优先用它;无需 shell,且是唯一能撑过很长生成长度的路径。若调用因认证失败而非输入失败,视为该传输不可用,转用 CLI,不要重试。
- 若没有可用的 Sonilo MCP 工具,但 `sonilo account` 退出码为 0,则使用 CLI 命令;它与 MCP 共用 API、账号和凭据文件。用 `sonilo account` 探测,不要用 `sonilo whoami`,因为 whoami 在未登录时也退出 0,无法区分状态。
- 若 MCP 和 CLI 都不可用,停止并运行 setup-api-key;不要用 curl 直接调 `api.sonilo.com` 绕过,因为两种传输会处理上传、轮询和重试,裸请求不会。
- MCP 快速调用:`audio_ducking(voice_path="~/Desktop/interview.mp4", music_path="~/Desktop/background-track.wav")`,自动在 voice 说话处压低 music。
- Python 方式:`pip install "sonilo>=0.13"`,然后 `from sonilo import Sonilo`,`client = Sonilo()`(读取 `SONILO_API_KEY`),调用 `client.audio_ducking.generate(voice="interview.mp4", music="background-track.wav")`(也支持 `voice_url=`/`music_url=`),最后按输出类型保存:`result.save("ducked.mp4" if result.output_type == "video" else "ducked.wav")`。
- JavaScript/TypeScript 方式:`npm install sonilo@>=0.14`,导入 `SoniloClient, download` 和 `writeFile`,创建 `new SoniloClient()`(读取 `SONILO_API_KEY`),调用 `client.audioDucking.generate({voice:"./interview.mp4", musicUrl:"https://example.com/background-track.wav"})`,再按 `result.output_type` 写文件:`ducked.mp4` 或 `ducked.wav`,用 `download(result.output_url!)` 下载。
- CLI 方式:安装 `npm install -g sonilo-cli` 或 `pip install sonilo-cli`,运行 `sonilo audio-ducking --voice interview.mp4 --music-url https://example.com/background-track.wav`。CLI 底层始终异步,会代为提交并轮询。
- CLI 参数约束:`--voice`/`--voice-url` 恰好一个,`--music`/`--music-url` 恰好一个;默认输出名随返回类型变化(`output.wav`,voice 输入为视频时 `output.mp4`),可用 `--output` 覆盖。本地 `--music` 文件必须有音频扩展名,CLI 会像 MCP 工具一样提前拒绝视频。
- cURL 裸 REST 方式:`curl -X POST "https://api.sonilo.com/v1/audio-ducking" -H "Authorization: Bearer $SONILO_API_KEY" -F "voice_file=@interview.mp4" -F "music_file=@background-track.wav"`,返回 `{"task_id": "..."}` 后用 `GET /v1/tasks/{task_id}` 轮询。本地文件用 `voice_file`/`music_file` multipart 字段,远程源用 `voice_url`/`music_url` 表单字段,两个输入可自由混搭。
- 工具签名:`audio_ducking(voice_path? | voice_url?, music_path? | music_url?, output_directory?)`,用于把 `music` 混到 `voice` 下,并在 voice 说话处自动 ducking。
- 参数 `voice_path`:绝对路径或相对于 `SONILO_MCP_BASE_PATH`;可为音频或视频,扩展名如 `.wav/.mp3/.m4a/.aac/.ogg/.flac` 或 `.mp4/.mov/.avi/.wmv/.webm/.mkv`。
- 参数 `voice_url`:HTTPS URL 指向 voice 音频/视频;`voice_path`/`voice_url` 二选一。
- 参数 `music_path`:绝对路径或相对于 base path;仅音频,视频不会被特殊处理且会被错误处理。
- 参数 `music_url`:HTTPS URL 指向音乐音频;`music_path`/`music_url` 二选一。
- 参数 `output_directory`:默认 `SONILO_MCP_BASE_PATH`。
- 每个输入上限 360 秒(6 分钟),并受账号上传大小限制(通常 300 MB)。
- 本工具只接收两条已存在的轨道,不生成音乐或 SFX;若要先生成音乐床,先用 text-to-music 或 video-to-music 技能(`text_to_music`/`video_to_music`),再把结果作为 `music_path` 传入。
- voice 输入可以是视频;如果用户给的是 talking-head 片段或 interview 加单独音乐文件,直接把视频作为 `voice_path` 传入,Sonilo 会提取音轨、压低音乐,并自动把 ducked mix 重新封装回新视频。
- 如果音乐本身也是为同一个视频而生成,优先用 video-to-sound 或 `video_to_music(ducking=true)`,它们在生成过程中内部 ducking;只有当音乐轨是固定/外部的、只需要混音时才用 `audio_ducking`。
- 该工具后端提交异步任务;若调用超时,错误会带 `task_id`,任务继续运行(已计费)。稍后调用 `get_sfx_task(task_id)`(托管服务器上用 `get_generation_task(task_id)`)恢复;见 task-recovery。
- 输出为单个文件:voice 输入是音频则 `.wav`,voice 输入是视频则 `.mp4`(ducked mix 已重新封装)。文件名跟随 voice 输入,如 `interview.mp4` -> `interview-ducked.mp4`,回退为 `ducked-<task id 前 8 个字符>`。
- 常见错误处理:`401` 无效 key,`402` 余额不足/试用耗尽,`413` 文件过大,`422` 无效参数,`429` 限流;见 account 技能。
适用边界 · 注意事项
- 需要生成音乐或音效本身时不要用 audio_ducking;先使用 text-to-music 或 video-to-music 生成音乐床,再把它作为 music 输入。
- 当音乐本身也要为同一视频生成时,不要额外调用 audio_ducking;优先用 video-to-sound 或 video_to_music(ducking=true),它们会在生成中内部 ducking。
- 没有可用 Sonilo MCP 工具且 `sonilo account` 不是退出 0 时,不要用 curl 直连 api.sonilo.com 绕过;先运行 setup-api-key 完成认证。