用FFmpeg制作ニコカラ:从人声分离到MKV双音轨封装完整指南

📅 发布时间:2026/8/31 1:51:53
用FFmpeg制作ニコカラ:从人声分离到MKV双音轨封装完整指南
在 Niconico 等弹幕视频平台上ニコカラ一直是为翻唱、练歌、填词翻配而制作的视频类型。标题【ニコカラ】Salt, Pepper, Birds, and the Thought Policeon/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 Policeon/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、ShanaEncoderAudacity音频降噪、增益调整、残留人声清理Adobe Audition、ReaperAegisubASS 字幕制作、卡拉 OK 时间轴剪映的歌词字幕功能Ultimate Vocal Remover人声分离生成伴奏Moises、VocalRemover 在线工具任意视频剪辑软件拼接背景图、歌词卡、封面片头剪映、PR、VegasFFmpeg 是整条链路的核心建议安装最新稳定版并加入系统 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 音轨。subsASS 字幕文件。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 aresample48000,panstereo|c0c0|c1c1 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 基础行。手动制作时则一边播放音频一边按 Ctrl1、Ctrl2 标记开始和结束时间。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 或 FLACAAC 用于在线FLAC 用于无损音频采样率48 kHz平台通用5.2 合成 on vocal 版本使用 FFmpeg 将背景图片、原唱音轨和硬字幕合成一个 MP4ffmpeg -y \ -loop 1 -framerate 30 -i bg.jpg \ -i audio/on_vocal.wav \ -vf asssubs/lyrics.ass:f2 \ -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 asssubs/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 asssubs/lyrics.ass:f2 \ -c:v libx264 -preset medium -crf 18 \ -c:a aac -b:a 320k \ -shortest \ build/Salt_Pepper_Birds_off.mp4这一步的关键是保证两个版本使用同一张背景图、同一个字幕文件、同一条编码参数避免观众切换版本时感觉到画面差异。5.4 可选封装 MKV 双音轨如果希望在本地播放器中用单文件切换原唱与伴奏可以从上面两个 MP4 中提取视频流和音频流再封装成 MKVffmpeg -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 languagejpn \ -metadata:s:a:1 languagechi \ build/Salt_Pepper_Birds_dual.mkv命令的含义是取第一个文件的视频流和第一音轨取第二个文件的第一音轨作为第二音轨最终封装为一个 MKV。VLC 播放时可以通过音轨菜单切换。这个方案在线平台通常不适用因为平台不会显示多音轨切换按钮。6. 运行验证和发布检查6.1 用 ffprobe 检查输出文件不要直接上传先检查最终文件的结构ffprobe -v error -show_streams build/Salt_Pepper_Birds_on.mp4预期输出中应该有一个codec_typevideo的 H.264 视频流一个codec_typeaudio的 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 SONGSalt_Pepper_Birds BGbg.jpg ASSsubs/lyrics.ass ffmpeg -y -loop 1 -framerate 30 -i $BG \ -i audio/on_vocal.wav \ -vf ass$ASS:f2 \ -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:f2 \ -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 硬字幕”最小流程再逐步尝试多音轨封装和特效字幕。技术本身不复杂关键是每一步都保留检查点避免最后一步才发现音频和字幕有问题。