news 2026/8/31 1:51:41

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用FFmpeg制作ニコカラ:从人声分离到MKV双音轨封装完整指南

在 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 vocaloff vocal视频即可。双音轨 MKV 更适合本地分发,适合熟悉 VLC、PotPlayer 的观众。

1.3 确定你的发布链路

在动手制作前,先确定发布方式,这会影响后期的编码参数和文件封装方式。

  • 如果发布到 Niconico,建议输出两个 MP4 文件,文件名明确写上onoff,例如Salt_Pepper_Birds_on.mp4
  • 如果做本地无损收藏,建议保留原始 WAV 音轨,同时输出一个 MKV 双音轨版本。
  • 如果只需要给乐队排练使用,左右声道分离可能更省事,但人声和伴奏会互相串扰,不推荐给对音质敏感的人。

选型确认后,再进入环境准备阶段。

2. 环境准备与前置工具链

2.1 工具清单

ニコカラ制作不是一个单一工具能完成的工作,通常需要视频处理、音频编辑、字幕制作和格式检查四类工具。下面是一套可以落地的常用组合。

工具用途可替代方案
FFmpeg音视频解封装、编码、合成、转码HandBrake、ShanaEncoder
Audacity音频降噪、增益调整、残留人声清理Adobe Audition、Reaper
AegisubASS 字幕制作、卡拉 OK 时间轴剪映的歌词字幕功能
Ultimate Vocal Remover人声分离生成伴奏Moises、VocalRemover 在线工具
任意视频剪辑软件拼接背景图、歌词卡、封面片头剪映、PR、Vegas

FFmpeg 是整条链路的核心,建议安装最新稳定版并加入系统 PATH。Audacity 用于处理人声分离后留下的残留问题,Aegisub 则负责输出可参与渲染的 ASS 字幕。

2.2 建立标准化目录结构

制作过程会产生多个中间文件,如果不整理目录,最后很容易混淆on_vocal.wavoff_vocal.wav。建议先创建如下结构:

mkdir -p karaoke/source mkdir -p karaoke/work mkdir -p karaoke/audio mkdir -p karaoke/subs mkdir -p karaoke/build
  • source:原始素材,只读,不在这里改文件。
  • 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 这样的离线工具,处理过程不会把音频上传到第三方服务器,隐私和版权风险更可控。

操作流程大致如下:

  1. 加载原曲。
  2. 选择模型,常见模型有 UVR-MDX-NET、VR Architecture 等。
  3. 选择输出格式为 WAV。
  4. 执行分离,得到vocals.wavinstrumental.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 可以通过“响度标准化”功能设置目标:

  1. 选择原唱音轨。
  2. 选择“效果 -> 响度标准化”。
  3. 目标响度设置为 -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

关键参数说明:

  • PlayResXPlayResY要和最终视频分辨率一致,避免字幕拉伸。
  • 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 将背景图片、原唱音轨和硬字幕合成一个 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 播放和切换测试

测试建议分三步:

  1. 用 PotPlayer 或 VLC 分别播放onoff两个 MP4,确认音频内容分别是原唱和伴奏。
  2. 在 VLC 中打开 MKV 双音轨文件,手动切换到第二音轨,确认切换后没有卡顿。
  3. 用手机播放器打开,确认画幅、字幕和音量正常。

如果音画不同步,优先检查背景图片的-framerate和音频采样率。

6.3 发布前检查清单

检查项具体内容
文件名是否包含onoff,是否易于识别
封面是否准备独立封面图,避免平台随机截帧
时长是否与原始曲目一致
音量两版本响度是否接近
字幕是否有错字、时间轴是否准确
版权是否已确认拥有合法使用权
编码是否符合目标平台的上传要求
音频切换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 + 硬字幕”最小流程,再逐步尝试多音轨封装和特效字幕。技术本身不复杂,关键是每一步都保留检查点,避免最后一步才发现音频和字幕有问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 1:51:32

nRF52实战:为BLE心率示例添加LED指示

如果你用 nRF52 跑过 SDK 里的 BLE_HeartRate(心率)示例,应该能感觉到它的"完整"其实带着一点空:手机连上、心率数字跳起来,但板子上的 LED 基本只在广播和连接时按固定逻辑亮一下,和心率数据本身…

作者头像 李华
网站建设 2026/8/31 1:50:20

技术教程写作:明确主题与技术栈的必备要素

如果您正在寻找的是关于宠物养护、三只小动物的日常记录,很遗憾,这类内容不适合作为技术教程输出。当前输入的项目标题“可爱的三小只~”没有提供任何技术栈、项目背景或可操作的内容,我无法在没有可靠材料的情况下虚构技术细节来撰写教程。为…

作者头像 李华
网站建设 2026/8/31 1:50:06

STM32H7双核调试卡死HAL_Delay?从SysTick到RCC的根因排查

“又卡住了,而且卡在 HAL_Delay() 里。”这句话对用 STM32H7 的朋友来说应该不陌生。尤其是调试 H745XI 这种双核芯片时,明明代码逻辑看起来没问题,全速运行却怎么也跑不过 HAL_Init(),走到 HAL_Delay(1) 就再也出不来。排除电源和…

作者头像 李华
网站建设 2026/8/31 1:46:38

MATLAB PortfolioCVaR实战:从VaR到CVaR的投资组合优化

简介:本资源是一套基于Matlab金融工具箱的CVaR投资组合优化实战代码,面向计算机、电子信息工程、数学等专业的本科生与研究生,用于课程设计、期末大作业及毕业设计中金融建模与风险量化实践。代码依托PortfolioCVaR对象实现条件风险价值&…

作者头像 李华
网站建设 2026/8/31 1:45:47

蓝色Salt Streaker:风火轮原创小比例车模的收藏与鉴赏

风火轮 Hot Wheels 小汽车系列里有一类车最容易被忽略,却最适合用来讲清楚美泰这家玩具巨头如何设计原创车型,那就是像 Salt Streaker(国内商家常译作盐滩冲击车)这样的蓝色小跑车。它没有授权品牌光环,没有真实跑车原…

作者头像 李华
网站建设 2026/8/31 1:43:44

列车靶场音频测试:用音乐验证车载广播系统

如果你路过轨道交通研发基地的试验大厅,看到有同事在“列车靶场”里循环播放某首歌,不要觉得那是在摸鱼。那大概率不是娱乐,而是一次车载广播系统的声学验证。列车靶场,是轨道交通研发领域对半实物仿真测试环境的通俗叫法&#xf…

作者头像 李华