关于 audio-acquisition
audio-acquisition 是 video-studio-engine 的技能,用于决定视频旁白、音乐和音效的来源或生成方式,并测量、混合音频。它强调音频授权、实测时长,以及发现混音过轻或听不见的检查。
主要功能
- 01选择旁白与音乐来源
- 02发布前核查授权
- 03测量时长和音乐能量
- 04标准化音频响度
- 05检查音乐底音与人声的平衡
适用场景
- 01规划解说视频的音频
- 02为音乐主导的剪辑选曲
- 03发布配乐前检查授权
- 04渲染后排查音量过低
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scrollmark/ social-skills --skill audio-acquisition安装后在 Claude Code 中输入/audio-acquisition确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/voice-landmines.mdscripts/measure.pynormalize_audio.py详细介绍
音频采集
音频是一个问题,绝不是可以忽略的事。每次都要询问,包括没有旁白的格式——一段静音内容之所以静音,应该是有人做出了这个选择,而不是因为没人提起。这里有三个决定,而且每个决定都有截然不同的答案。
依赖项
scripts/measure.py(测量时长和音轨逐秒的能量结构)以及 scripts/normalize_audio.py(响度)随此技能一同提供。两者都只使用标准库,并且要求 PATH 中有 ffmpeg/ffprobe;要让下面「测量而非信任」的规范能够实际执行,而非停留在理想层面,不需要安装其他任何东西。
此处不提供合成和素材来源功能。运行 pip install 'video-studio-engine[audio] @ https://github.com/scrollmark/social-skills/archive/refs/heads/master.tar.gz',即可添加 tts_kokoro(本地语音及词级时间戳)和 gen_music(配乐);不带 [audio] 的同一命令足以安装 stock_freesound(经过许可证筛选的音效)。使用 video-studio tts_kokoro … 运行它们。同一个 [audio] 选项还包含
duck_music(逐帧音量包络,可在旁白期间降低背景音乐音量)和
music_catalog(从你已获得许可的曲目中确定性地选取音乐,
确保重新渲染时配乐不会改变)。对于本工作室未录制的旁白——
录制的朗读或提供的音轨——可通过 gen_captions 获取词级时间戳;该工具
需要 [captions] 选项。跳过此安装的用户将无法使用语音、音乐和经过许可证筛选的音效——下面的分级仍会告诉他们应购买哪项服务以及需要检查什么,但不会合成任何内容。现在也有了 ElevenLabs 脚本——video-studio tts_eleven——但它按字符计费,并且需要 ELEVENLABS_API_KEY,所以只有在本地语音确实无法满足需求时才使用:例如 Kokoro 不支持的语言,或客户已确认的特定表达方式。它不会返回词级时间戳,因此 ElevenLabs 朗读的字幕需通过 gen_captions 生成。
语音
默认使用本地语音,而且免费。 它可以离线运行,无需密钥,而且——从结构上来说最重要的是——会返回词级时间戳,字幕正是由此驱动的。对于带字幕的格式,没有其他选择。
只有当朗读本身就是交付内容时,才使用付费语音:品牌影片、客户指定的语音,或任何可能有人抱怨表达平淡的内容。它按字符计费(约 1,100 个字符对应 90 秒脚本),并且不会返回词级时间戳,因此带字幕的格式仍需要在底层使用本地语音。
两者都会缓存:文本、语音和设置完全相同,就不会重复处理,而是报告 cached: true;因此,修订时重新运行所有场景不会产生费用,只有修改过的台词才会重新合成。不要为了「确保内容是最新的」而强制重新渲染——重新合成的结果可能相差几毫秒,从而导致后续每个剪辑点都发生偏移。
旁白要在素材之前首先合成,因为测得的旁白时长就是场景的时钟。绝不要向合成器写入空行;应让它生成经过测量的静音,这样下游拼接才能保持同步。
配乐评分——先考虑权利,再考虑品味
这是唯一一个质量领先者并非正确答案的类别,而且必须在围绕曲目构建剪辑之前作出选择。
- 如果作品将来会发布,请使用拥有授权曲库的生成器。 ElevenLabs 音乐模型基于已获授权的曲库训练,相关条款在上线前已确定;商业用途的起步费用约为每月 6 美元——因此,权利方面的注意事项属于定价问题,而非限制。它也是唯一一个能将精确时长作为参数的工具。
- Lyria 符合 Google 的条款,并且与视频和图像生成器共用同一个密钥,因此无需额外注册账号。它的免费套餐配额实际上为零,会返回始终无法消除的 429 错误。
- MiniMax 音乐免费,不计费,且其再分发权利尚不明确——训练数据未公开,条款也未明确授予对生成内容的再分发权。可用于内部和演示工作,绝不可用于客户项目;而且只能通过名称指定,不应自动选择。
- 听起来最好的选项反而应当避免。 训练数据方面的诉讼尚无定论,而且大多没有可供自动化调用的公开 API。
各服务的费用和许可条款列于 studio-setup 技能的 SERVICES.md 中——发布前应查看权利列,而不是价格列。
对于以音乐为主导的形式,配乐应是访谈中的第一个问题,而非最后一个。 场景时长要根据曲目的能量曲线来剪辑,因此太晚选曲就意味着必须重新调整每个场景的时长。先选曲、绘制曲线,然后再设置时长。
音效
通常不需要。只有在形式需要且音效来源确实可用时才提供。Freesound 的许可因音效而异——包括 CC0、CC-BY、CC-BY-NC——因此默认只接受 CC0,不会给后续环节带来任何义务;若放宽到 CC-BY,则必须附上返回的署名信息。非商业许可的音效绝不能用于客户项目。
测量,而非轻信
请求的时长只是参考,不是承诺。 大多数音乐生成器会在提示词中接收时长,却会忽略它——请求 35 秒,返回的音频却有约 115 秒。只有那个授权曲库接受真正的时长参数。测量每个返回的文件;切勿将计划时长写入时间线。
根据曲目实际发生变化的位置剪辑。 scripts/measure.py --music 会报告逐秒响度曲线和转折点——即某个窗口相较于前 3 秒至少跳升或下降 3 dB 的位置。这些就是骤降和升高的位置,也是唯一有依据的段落切换点。按网格放置段落,不到 20 秒就会逐渐错拍,显得随意;在最后一段副歌前的安静小节中淡出,会让人觉得视频被截断了,因为事实确实如此。
添加音乐会悄无声息地损失 6 dB。 混音器会将各输入轨相加后除以输入数量,因此一条音乐轨会将输入从 1 路变成 2 路,并使所有内容(包括旁白)音量减半。实测:无音乐时语音为 -17.3 dB,有音乐时为 -23.5 dB;整段视频则从 -14.4 LUFS 降至 -20.3 LUFS。表面上看不出任何问题。渲染成功,且两路音源同比例缩放,所以平衡正确;结果只是音量偏低——这是唯一一种能躲过所有视觉检查的缺陷。任何包含音乐的渲染完成后,都要运行 scripts/normalize_audio.py --in <render>;它会将响度恢复到约 -14 LUFS,同时保留平衡。生成的音乐也可能以 0 dBFS 的峰值输出,因此没有可供损失的余量。
通过探测来混合背景音乐,不要靠猜。 一段以 -15 LUFS 生成、增益设为 -17 dB 并使用强侧链的背景音乐,最终完全听不见;每次电平探测的读数都与未加背景音乐的混音相差不超过 ±0.2 dB——日志里没有任何提示。请将语音间隙中的 RMS 与大声语音下的 RMS 对比测量,以此验证:背景音乐应使间隙音量提高约 6 dB,并在最响的台词下消失。
语音相关的陷阱——标点如何写入时间文件、为什么缓存的 WAV 没有时间信息、为什么两词短句会变得含混——详见 references/voice-landmines.md。
反模式
- 凭听感选配乐,之后才发现版权问题。 剪辑完成后才发现版权问题,就意味着必须重新剪辑,而不是重新标注。
- 因疏忽而出现静音。 先询问;之后,静音片段才是一种选择。
- 将计划时长写入时间线。 实测音频才是计时依据。计划时长会让音频、视频和字幕逐渐失去同步。
- 不测量就宣布混音完成。 音量偏低和听不见的音频都能成功渲染,而且你检查的每一帧看起来都毫无问题。