在 Niconico 等弹幕视频平台上,ニコカラ一直是为翻唱、练歌、填词翻配而制作的视频类型。标题【ニコカラ】Salt, Pepper, Birds, and the Thought Police(on/off vocal)里有几个关键信息:Salt, Pepper, Birds, and the Thought Police是曲目标题,ニコカラ表示这是卡拉 OK 向内容,on/off vocal说明视频包含原唱版和伴奏版两种形态。制作这类视频并不只是在视频上叠一行歌词,它涉及音频分离、响度匹配、时间轴字幕、视频压制、双音轨封装和播放器兼容性判断。这篇文章会围绕这个标题,从零走一遍标准制作流程。即使你手里的曲目不是这一首,这套流程同样适用。适合刚想尝试制作练习向视频、或需要给社团或现场演出准备伴奏素材的开发者参考。
1. 先理解ニコカラ的组成和 on/off vocal 的实现方式
1.1 从标题拆解需求
【ニコカラ】Salt, Pepper, Birds, and the Thought Police(on/off vocal)可以拆成三个部分:
【ニコカラ】:表示视频用途是 Niconico 卡拉 OK 向内容,核心价值是让观众跟唱。Salt, Pepper, Birds, and the Thought Police:这是曲目标题,可以是歌曲、Vocaloid 作品或翻唱作品。on/off vocal:表示同时提供带人声的原唱音轨和不带人声的伴奏音轨。
拆完需求后,制作目标就很清楚:你需要产出一个能用于演唱练习的媒体文件,让使用者可以根据需要切换“是否听到人声”。这里的技术难点不在“播放两遍”,而在于伴奏音轨如何获得、如何保证人声与伴奏音量匹配、以及如何在目标平台上让用户方便地切换。
1.2 三种 main 实现方式对比
常见做法有三种,它们各有适用场景,制作前必须根据发布平台和播放器能力做选择。
| 实现方式 | 文件结构 | 播放器兼容性 | 文件体积 | 制作复杂度 | 适用场景 |
|---|---|---|---|---|---|
| 双视频文件 | 一个 on_vocal.mp4,一个 off_vocal.mp4 | 几乎所有平台都能播放 | 两份视频占用双倍空间 | 较低,只需合成两次 | Niconico、B 站、YouTube 等在线平台 |
| 单文件双音轨 | 一个 MKV 内部包含两条音频轨道 | 本地播放器如 VLC、PotPlayer 支持 | 接近单文件体积 | 中等,需要精确封装 | 本地收藏、压制组发布 |
| 左右声道分离 | 一个音频中左声道人声、右声道伴奏 | 播放器切换声道简单 | 最小 | 较高,需要处理中置声像 | 电话会议、窄带宽直传场景 |
对于标题中明确标注on/off vocal的ニコカラ视频,最稳妥的方案是“双视频文件”。在线视频平台通常没有多音轨切换的完整生态,观众下载或在线观看时,直接选择on vocal或off vocal视频即可。双音轨 MKV 更适合本地分发,适合熟悉 VLC、PotPlayer 的观众。
1.3 确定你的发布链路
在动手制作前,先确定发布方式,这会影响后期的编码参数和文件封装方式。
- 如果发布到 Niconico,建议输出两个 MP4 文件,文件名明确写上
on和off,例如Salt_Pepper_Birds_on.mp4。 - 如果做本地无损收藏,建议保留原始 WAV 音轨,同时输出一个 MKV 双音轨版本。
- 如果只需要给乐队排练使用,左右声道分离可能更省事,但人声和伴奏会互相串扰,不推荐给对音质敏感的人。
选型确认后,再进入环境准备阶段。
2. 环境准备与前置工具链
2.1 工具清单
ニコカラ制作不是一个单一工具能完成的工作,通常需要视频处理、音频编辑、字幕制作和格式检查四类工具。下面是一套可以落地的常用组合。
| 工具 | 用途 | 可替代方案 |
|---|---|---|
| FFmpeg | 音视频解封装、编码、合成、转码 | HandBrake、ShanaEncoder |
| Audacity | 音频降噪、增益调整、残留人声清理 | Adobe Audition、Reaper |
| Aegisub | ASS 字幕制作、卡拉 OK 时间轴 | 剪映的歌词字幕功能 |
| Ultimate Vocal Remover | 人声分离生成伴奏 | Moises、VocalRemover 在线工具 |
| 任意视频剪辑软件 | 拼接背景图、歌词卡、封面片头 | 剪映、PR、Vegas |
FFmpeg 是整条链路的核心,建议安装最新稳定版并加入系统 PATH。Audacity 用于处理人声分离后留下的残留问题,Aegisub 则负责输出可参与渲染的 ASS 字幕。
2.2 建立标准化目录结构
制作过程会产生多个中间文件,如果不整理目录,最后很容易混淆on_vocal.wav和off_vocal.wav。建议先创建如下结构:
mkdir -p karaoke/source mkdir -p karaoke/work mkdir -p karaoke/audio mkdir -p karaoke/subs mkdir -p karaoke/buildsource:原始素材,只读,不在这里改文件。work:中间工程文件,比如 Audacity 工程、UV R 输出结果。audio:最终使用的两个 WAV 音轨。subs:ASS 字幕文件。build:最终输出的 MP4、MKV 文件。
这样的好处是,出问题时可以快速定位是原始素材问题,还是中间处理问题。
2.3 原始资料检查
拿到原始音频后,不要急着分离人声,先用 FFprobe 查看基础信息:
ffprobe -v error -show_format -show_streams source/original.flac重点检查以下几个字段:
duration:决定视频长度是否与音频一致。sample_rate:推荐统一为 48000 Hz 或 44100 Hz。channels:如果是立体声,人声分离工具更容易处理。bit_rate:低于 192 kbps 时,后期人声分离的损失会比较明显。
如果原曲采样率是 44100 Hz,而后面的视频背景是 30 fps,合成时 FFmpeg 会自动处理采样率,但不建议过度依赖自动转换,尽量提前统一。
注意:原始音频文件质量直接决定最终成品质量。如果是低码率 MP3,人声分离后伴奏会出现明显金属感;尽量找无损或高码率源文件。
3. 制作伴奏音轨:从原曲分离到响度匹配
3.1 使用人声分离工具生成初步伴奏
Salt, Pepper, Birds, and the Thought Police这类曲目如果没有现成伴奏,就需要自己从原曲中分离人声。推荐使用 Ultimate Vocal Remover 这样的离线工具,处理过程不会把音频上传到第三方服务器,隐私和版权风险更可控。
操作流程大致如下:
- 加载原曲。
- 选择模型,常见模型有 UVR-MDX-NET、VR Architecture 等。
- 选择输出格式为 WAV。
- 执行分离,得到
vocals.wav和instrumental.wav。
模型选择没有绝对最优,建议先导出一次 30 秒片段试听,观察人声是否清晰地落在vocals.wav,伴奏中是否残留明显人声。
这一步的输出放在work/instrumental_raw.wav,不要直接作为最终素材。
3.2 在 Audacity 中修正残留人声
人声分离算法做不到 100% 分离,尤其是混响重的曲目,伴奏轨里经常有“闷闷的人声”或者“齿音”。这时需要打开 Audacity,导入instrumental_raw.wav,按以下顺序处理:
- 选择有残留人声的段落,用效果菜单里的“降噪”消除细微底噪。
- 如果某一句人声残留较强,直接在频谱视图下选中该片段,用“静音”或“删除”处理。
- 检查低频段,如果低频过重导致发闷,可用“均衡”对 200 Hz 以下做轻微衰减。
- 混响过重时,用“压缩器”配合“限制器”控制动态范围。
处理完成后,执行:
ffmpeg -i work/instrumental_raw.wav -af aresample=48000,pan=stereo|c0=c0|c1=c1 audio/off_vocal.wav这条命令把音频统一到 48 kHz 采样率、立体声,并输出为无损 WAV。
3.3 原唱音轨的响度匹配
原唱音轨一般保留原始人声即可,但要和伴奏音量匹配。你可以在 Audacity 中同时导入原曲和净化后的伴奏,对比播放音量。
推荐目标响度为 -16 LUFS,这是在线视频平台比较常见的响度标准。如果原曲整体响度偏高,伴奏会显得很弱;反之伴奏会盖过人声。
Audacity 可以通过“响度标准化”功能设置目标:
- 选择原唱音轨。
- 选择“效果 -> 响度标准化”。
- 目标响度设置为 -16 LUFS。
之后把原唱音轨导出为audio/on_vocal.wav。
不要只用人耳判断,响度计才能避免不同播放器之间的音量差异。
3.4 音轨检查点
导出两个 WAV 后,播放一遍完整内容,重点确认:
- 伴奏轨没有人声残响。
- 原唱轨人声清晰,没有因响度标准化产生削波。
- 两轨时长一致,适合后续合成。
4. 制作字幕和时间轴
4.1 获取歌词与时间轴
ニコカラ最重要的信息是歌词,观众需要跟着唱,所以字幕不仅要准确,还要能看清。字幕时间轴可以来自 LRC 歌词文件,也可以手动在 Aegisub 中逐句标记。
如果手头有 LRC:
[00:12.34]Salt, pepper, birds [00:15.67]And the thought police在 Aegisub 中导入 LRC,可以快速转成 ASS 基础行。手动制作时,则一边播放音频,一边按 Ctrl+1、Ctrl+2 标记开始和结束时间。
4.2 生成基础的 ASS 字幕
一个最小可用的 ASS 文件内容如下:
[Script Info] ScriptType: v4.00+ PlayResX: 1280 PlayResY: 720 [V4+ Styles] Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding Style: Default,Microsoft YaHei,60,&H00FFFFFF,&H000000FF,&H00282828,&H80000000,-1,0,0,0,100,100,0,0,1,3,2,2,30,30,20,1 [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:12.34,0:00:15.67,Default,,0,0,0,,Salt, pepper, birds Dialogue: 0,0:00:15.67,0:00:19.00,Default,,0,0,0,,And the thought police关键参数说明:
PlayResX和PlayResY要和最终视频分辨率一致,避免字幕拉伸。Fontname要匹配系统已安装字体。PrimaryColour是主文字颜色,OutlineColour是描边颜色。Alignment为 2 表示底部居中,适合常规歌词。
保存为 UTF-8 编码,扩展名为.ass。
4.3 添加卡拉 OK 逐字效果
如果要做出“逐字变色”的卡拉 OK 特效,ASS 支持\k标签。时间轴需要细化到字,例如:
Dialogue: 0,0:00:12.34,0:00:15.67,Default,,0,0,0,,{\k30}Salt{\k20}, {\k20}pepper{\k20}, {\k20}birds\k30表示该字持续 30 厘秒。这样观众可以看到歌词逐字跳色,跟唱体验更好。
逐字制作在 Aegisub 中按“卡拉 OK 模板”自动化处理,不需要手工输入所有\k。如果只需要基础功能,普通逐句字幕也完全可用。
4.4 软字幕还是硬字幕
字幕有两种交付方式:
- 软字幕:字幕作为外挂文件或独立轨道,播放时可关闭,但在线视频平台通常不加载软字幕。
- 硬字幕:FFmpeg 渲染时把字幕烧录进画面,观众无法关闭,但所有平台都能显示。
ニコカラ适合硬字幕,因为歌词本身就是画面的一部分。等待最终合成时,用 FFmpeg 将 ASS 直接渲染进视频。
5. 合成视频并封装双版本或双音轨
5.1 准备背景素材和输出参数
背景可以是静态图片、循环视频或图片序列。最常用的是静态背景图加轻微特效,简单稳定且体积小。
建议输出参数:
| 项目 | 推荐值 | 说明 |
|---|---|---|
| 分辨率 | 1920x1080 或 1280x720 | 取决于素材清晰度和平台限制 |
| 帧率 | 30 fps | 静态背景下足够流畅 |
| 视频编码 | H.264 | 兼容性最好 |
| 音频编码 | AAC 或 FLAC | AAC 用于在线,FLAC 用于无损 |
| 音频采样率 | 48 kHz | 平台通用 |
5.2 合成 on vocal 版本
使用 FFmpeg 将背景图片、原唱音轨和硬字幕合成一个 MP4:
ffmpeg -y \ -loop 1 -framerate 30 -i bg.jpg \ -i audio/on_vocal.wav \ -vf "ass=subs/lyrics.ass:f=2" \ -c:v libx264 -preset medium -crf 18 \ -c:a aac -b:a 320k \ -shortest \ build/Salt_Pepper_Birds_on.mp4参数解释:
-loop 1 -framerate 30 -i bg.jpg:把静态图循环成 30 fps 视频源。-vf "ass=subs/lyrics.ass":渲染 ASS 字幕为硬字幕。-preset medium -crf 18:中等编码速度,18 是视觉无损的常见 CRF 值。-shortest:以音频长度为最终时长,避免背景图无限循环。
5.3 合成 off vocal 版本
同样的命令,换一下音频轨路径和输出文件名:
ffmpeg -y \ -loop 1 -framerate 30 -i bg.jpg \ -i audio/off_vocal.wav \ -vf "ass=subs/lyrics.ass:f=2" \ -c:v libx264 -preset medium -crf 18 \ -c:a aac -b:a 320k \ -shortest \ build/Salt_Pepper_Birds_off.mp4这一步的关键是保证两个版本使用同一张背景图、同一个字幕文件、同一条编码参数,避免观众切换版本时感觉到画面差异。
5.4 可选:封装 MKV 双音轨
如果希望在本地播放器中用单文件切换原唱与伴奏,可以从上面两个 MP4 中提取视频流和音频流,再封装成 MKV:
ffmpeg -y \ -i build/Salt_Pepper_Birds_on.mp4 \ -i build/Salt_Pepper_Birds_off.mp4 \ -map 0:v -map 0:a -map 1:a \ -c:v copy -c:a copy \ -metadata:s:a:0 language=jpn \ -metadata:s:a:1 language=chi \ build/Salt_Pepper_Birds_dual.mkv命令的含义是:取第一个文件的视频流和第一音轨,取第二个文件的第一音轨作为第二音轨,最终封装为一个 MKV。VLC 播放时可以通过音轨菜单切换。
这个方案在线平台通常不适用,因为平台不会显示多音轨切换按钮。
6. 运行验证和发布检查
6.1 用 ffprobe 检查输出文件
不要直接上传,先检查最终文件的结构:
ffprobe -v error -show_streams build/Salt_Pepper_Birds_on.mp4预期输出中应该有一个codec_type=video的 H.264 视频流,一个codec_type=audio的 AAC 音频流,并且duration与原曲时长一致。
检查 MKV 双音轨文件时,需要看到两条音频流:
ffprobe -v error -show_streams -select_streams a build/Salt_Pepper_Birds_dual.mkv如果只看到一条音轨,说明-map参数没有生效。
6.2 播放和切换测试
测试建议分三步:
- 用 PotPlayer 或 VLC 分别播放
on和off两个 MP4,确认音频内容分别是原唱和伴奏。 - 在 VLC 中打开 MKV 双音轨文件,手动切换到第二音轨,确认切换后没有卡顿。
- 用手机播放器打开,确认画幅、字幕和音量正常。
如果音画不同步,优先检查背景图片的-framerate和音频采样率。
6.3 发布前检查清单
| 检查项 | 具体内容 |
|---|---|
| 文件名 | 是否包含on和off,是否易于识别 |
| 封面 | 是否准备独立封面图,避免平台随机截帧 |
| 时长 | 是否与原始曲目一致 |
| 音量 | 两版本响度是否接近 |
| 字幕 | 是否有错字、时间轴是否准确 |
| 版权 | 是否已确认拥有合法使用权 |
| 编码 | 是否符合目标平台的上传要求 |
| 音频切换 | MKV 双音轨版本是否可正常切换 |
确认无误后,再进入正式发布流程。
7. 常见问题与排查
7.1 人声分离后伴奏发闷
现象:伴奏轨道低频过重,人声虽被去除但整体音色浑浊。
原因:人声分离模型在处理低频时容易把一部分乐器声也移除,导致中高频过少、低频残留突出。
排查方式:用 Audacity 打开伴奏轨,查看频谱图,观察 200 Hz 以下是否大量集中。
处理建议:
- 使用 Audacity 的均衡器对 100 Hz 到 200 Hz 做 3 dB 到 5 dB 衰减。
- 如果伴奏缺少高频,可对 8 kHz 以上做轻微提升。
- 重新导出 WAV,再试听。
7.2 音画不同步
现象:背景画面与歌词或鼓点对不上,歌词逐字效果明显滞后。
原因:最常出现在-shortest参数使用不当,或音频流与视频流的时间基准不一致。
排查方式:
- 用
ffprobe对比原曲和成品的start_time。 - 在播放器中跳到 1 分钟处,与原始音频对比。
处理建议:
- 确保视频帧率和音频采样率在合成前已经统一。
- 不要同时使用
-shortest和多段循环素材,必要时先用-t指定时长。
7.3 ASS 字幕乱码或字体缺失
现象:字幕显示为方框或乱码,中文字符缺失。
原因:ASS 文件保存为 GBK 编码,或系统中没有指定字体。
排查方式:
- 用文本编辑器打开 ASS 文件,确认字符是否正常。
- 在 FFmpeg 命令中加上
:fontsdir=...指定字体目录。
处理建议:
- ASS 文件统一保存为 UTF-8。
- 字体选择系统中存在的字体,如
Microsoft YaHei。 - 如果目标观众使用不同的操作系统,可在压制时嵌入字体文件,或直接修改
ForceStyle使用通用字体。
7.4 上传后画质下降
现象:本地播放清晰,上传平台后画面变模糊或码率不足。
原因:平台会二次压缩,如果源文件码率太高,压缩后会产生细节损失。
排查方式:
- 查看平台推荐的视频码率。
- 对比本地播放时静态画面和动态画面。
处理建议:
- 在线平台推荐 H.264 编码,CRF 18 到 20 之间比较稳妥。
- 如果平台限制高码率,可以适当提升
-preset veryslow提高压缩效率,而不是无脑增加码率。 - 保留原始工程文件和中间文件,平台压缩后不满意时重新压制。
8. 最佳实践与扩展方向
8.1 用脚本固化工作流
每次手动敲 FFmpeg 命令容易拼错。推荐把整个流程写成 Bash 脚本,通过变量控制文件名和参数:
#!/bin/bash SONG="Salt_Pepper_Birds" BG="bg.jpg" ASS="subs/lyrics.ass" ffmpeg -y -loop 1 -framerate 30 -i "$BG" \ -i "audio/on_vocal.wav" \ -vf "ass=$ASS:f=2" \ -c:v libx264 -preset medium -crf 18 \ -c:a aac -b:a 320k -shortest \ "build/${SONG}_on.mp4" ffmpeg -y -loop 1 -framerate 30 -i "$BG" \ -i "audio/off_vocal.wav" \ -vf "ass=$ASS:f=2" \ -c:v libx264 -preset medium -crf 18 \ -c:a aac -b:a 320k -shortest \ "build/${SONG}_off.mp4"这样每次更换歌曲时,只需要修改顶部变量。
8.2 保留工程目录和中间产物
人声分离后的 WAV、ASS 字幕、背景图以及工程文件都要保留,不要只保留最终 MP4。原因很简单:如果平台改变编码要求,或者某个字幕时间轴需要修正,只需要改动对应中间文件再重新合成,不需要重新分离人声。
建议在工程目录中加入README.md,记录以下信息:
- 原始音频来源和采样率。
- 人声分离使用的模型。
- 响度标准化目标值。
- 字幕字体和时间轴版本。
这个文件不会影响发布,但能帮你几个月后重新理解工程。
8.3 版权与发布合规
制作ニコカラ时,一定要确认以下问题:
- 原始歌曲是否允许制作二次创作内容。
- 伴奏分离是否在你的使用范围内。
- 发布到公开平台时,是否声明了原曲信息。
- 是否获得了作者的转载许可。
如果是翻唱作品,很多平台要求标注原唱、作词、作曲、编曲信息。发布前把这些信息写入视频简介,避免后续纠纷。
8.4 扩展方向
这套流程并不局限于静态背景图。将bg.jpg替换为循环视频,加入片头片尾、歌词段落标记、多级字幕模板,就能扩展出更丰富的ニコカラ效果。进一步还可以:
- 使用 Python 批量处理多首歌,自动生成曲目标题和文件名。
- 结合 FFmpeg 的
filter_complex,在一个命令内完成双版本合并。 - 将 MKV 双音轨文件嵌入到播放器页面,实现浏览器内音轨切换。
对于刚接触ニコカラ制作的人,先跑通本文的“双 MP4 + 硬字幕”最小流程,再逐步尝试多音轨封装和特效字幕。技术本身不复杂,关键是每一步都保留检查点,避免最后一步才发现音频和字幕有问题。