最近在整理阿萨Aza直播歌切素材时,发现不少朋友对“歌切”制作流程感兴趣,尤其是《Simon》这类歌曲,现场状态和录音棚版本区别很大,切片处理得好不好,几乎直接决定投稿的听感。但网上关于歌切的教程大多是成品展示,真正把“从录播到成品”的每一步讲清楚的很少。这篇文章就从零开始,完整拆解一版《Simon》歌切的制作流程,包含工具选择、音频截取、降噪处理、响度标准化、频谱封面生成和发布检查清单,新人可以照着做,老手也可以用来优化自己的处理链路。
1. 背景与核心概念
1.1 什么是“歌切”
“歌切”是虚拟主播、唱见社区里很常见的二次创作形式,全称是“歌曲切片”。简单说,就是把主播在直播中演唱的某首歌,从整场录播里切出来,单独制作成一段音频或视频投稿。和直接录屏相比,歌切更聚焦,观众能直接听到完整的歌,不用在几个小时的录播里找位置。
阿萨Aza作为B站虚拟艺人,直播内容包括唱歌、杂谈、游戏等,唱歌环节经常是观众最喜欢的部分。Aza在直播中演唱《Simon》后,很多粉丝会制作相应歌切。但直播环境的录音条件相对复杂,观众弹幕、耳机返听、房间混响、设备底噪都会混进音轨,简单剪切的效果往往不理想,这就需要一套相对固定的音频处理流程。
1.2 歌切制作的技术链路
一个完整歌切项目不是“把音频剪出来”这么简单。制作过程中涉及的关键技术点包括:
- 从录播文件中定位歌曲起止位置;
- 音频流提取与格式转换;
- 底噪、观众噪声的降噪处理;
- 混响和人声通透度的平衡;
- 响度标准化,避免投稿后音量忽大忽小;
- 频谱图或封面素材生成;
- 发布前的成片检查。
每一步都有对应的工具和参数。只要理解了链路,做任何歌切都能复用同一套方法,区别只在于素材和曲目不同。下面选择“阿萨Aza《Simon》歌切”作为实操案例,原因是这首歌的切片需求在社区里比较常见,而且歌曲中间有情绪起伏,能很好展示响度标准化和动效控制的作用。
1.3 学习目标
读完这篇文章,你可以掌握以下内容:
- 用 FFmpeg 从直播录播中截取指定时间段音频;
- 用 Audacity 完成降噪、增益、压缩等基础处理;
- 用响度标准化保证成品在不同设备上听感一致;
- 制作基础的波形/频谱封面,让投稿更有辨识度;
- 建立一套发布前检查清单,减少返工。
整个流程以免费工具为主,不需要购买专业音频软件,适合个人二次创作场景。
2. 环境准备与工具说明
2.1 系统和硬件要求
本文的操作步骤在 Windows / macOS / Linux 上都可以完成。音频处理对 CPU 和内存有一定要求,尤其是处理几 GB 的直播录播时,建议电脑内存不低于 8GB。如果你的录播文件是 1080P 高码率视频,截取时 FFmpeg 的 I/O 吞吐比较大,建议预留足够的磁盘空间。
硬件方面,监听耳机或普通耳机都可以,不过最好避免用外放来检查底噪和音量,因为外放会掩盖细节。如果条件允许,一副监听耳机能让降噪参数调节得更准确。
2.2 软件准备
| 工具 | 用途 | 是否必须 |
|---|---|---|
| FFmpeg | 视频/音频流处理、截取、转码、响度标准化 | 必须 |
| Audacity | 可视化降噪、增益、压缩、人声处理 | 必须 |
| Python 3 + matplotlib / numpy | 生成波形封面、批量处理 | 可选 |
| 剪映 / Premiere | 视频化歌切、字幕、封面合成 | 可选 |
版本选择上,FFmpeg 建议使用较新的 release 版本,比如 5.x / 6.x / 7.x,老版本在loudnorm、afftdn等滤镜上可能存在差异。Audacity 可以使用当前官网稳定版,3.x 版本界面和 2.x 略有不同,但降噪功能位置基本一致。Python 版本建议 3.9 以上。
如果你不确定自己电脑的 FFmpeg 是否可用,可以在命令行执行:
ffmpeg -version如果输出版本信息,说明安装成功。如果提示“找不到命令”,需要先安装 FFmpeg 并配置环境变量。
2.3 示例项目结构
为了保持处理过程清晰,建议按照下面的目录结构组织素材:
simon_clip/ ├── raw/ # 原始录播文件 │ └── record.mp4 ├── works/ # 中间处理文件 │ ├── 01_raw_audio.wav │ ├── 02_cut_raw.wav │ ├── 03_denoised.wav │ └── 04_normalized.wav ├── output/ # 最终成品 │ └── Simon_歌切_v1.mp3 ├── cover/ # 封面素材 │ └── cover_wave.png └── scripts/ └── make_clip.py这样做的好处是:每次处理不会污染原始素材,中间文件可以随时回退,也方便批量处理多首歌。很多新手喜欢直接在原视频上另存为,最后出现问题很难定位,建议从一开始就养成“源文件只读、工作目录独立”的习惯。
3. 核心原理拆解
3.1 如何定位歌曲在录播中的位置
直播录播通常有几个小时,手动拖动很浪费时间。定位歌曲位置有几种常见方式:
- 人工听一遍直播回放,记录歌曲开始时间;
- 根据直播弹幕或歌单时间轴辅助定位;
- 使用 Audacity 打开音频波形,通过波形密度找到唱歌段落;
- 使用 FFmpeg 的静音检测辅助定位。
对于《Simon》这种有明显伴奏和演唱的歌切,人工定位最直接,但需要来回拖时间轴。更高效的方式是先粗略定位到歌曲区间,再用 Audacity 波形微调首尾。
如果你有大段录播,可以用 FFmpeg 的静音检测快速找到明显的“暂停”位置:
ffmpeg -i raw/record.mp4 -af silencedetect=noise=-30dB:d=1.5 -f null -这条命令会输出类似:
[silencedetect @ 0x...] silence_start: 874.5 [silencedetect @ 0x...] silence_end: 876.2 | silence_duration: 1.7这表示检测到一次静音,位于视频第 874.5 秒到 876.2 秒。通过静音段,可以快速把长视频拆成若干段落,然后逐一确认哪段是《Simon》。不过直播中的底噪会让静音检测不够准确,所以静音检测只适合粗定位,最终还是要靠耳朵和波形确认。
3.2 FFmpeg 截取音频的两种方式
FFmpeg 截取音频时,-ss参数放在-i前还是后,行为完全不同。
把-ss放在-i之前,FFmpeg 会先快速跳转到目标时间,再进行解码。这种方式速度极快,但某些版本在精确帧对齐上稍差。把-ss放在-i之后,FFmpeg 会从开头解码到目标时间,速度较慢,但是定位更精确。
对于音频切片,我们通常不需要严格的帧对齐,所以推荐把-ss放在-i前,速度更快:
ffmpeg -ss 01:02:03 -t 00:04:30 -i raw/record.mp4 -vn -acodec pcm_s16le works/01_raw_audio.wav这条命令的含义是:从record.mp4的第 1 小时 2 分 3 秒开始,截取 4 分 30 秒,忽略视频流,把音频保存为无损 WAV 格式。
这里有个重要选择:为什么要先导出 WAV,而不是直接导出 MP3?因为后续要做降噪和响度处理,MP3 是有损压缩,每转一次就会损失一次音质。WAV 无损格式可以保证中间处理环节不增加额外损伤。等全部处理完成,最后再导出 MP3 或 M4A。
3.3 降噪到底在降什么
直播录音里的噪声来源很多,包括麦克风底噪、房间混响、风扇声、键盘声、观众弹幕提示音等。不同噪声的处理方式不同。
如果是均匀的底噪,可以使用 Audacity 的“降噪”功能,先采样一段纯噪声,再对整个音频做降噪。FFmpeg 里也有afftdn滤镜,但在人声歌曲上容易产生“水声”或“金属声”,需要谨慎使用。更推荐的方式是在 Audacity 中处理,因为可以实时试听。
如果是突发的点击声、爆音,则适合用 Audacity 的“修复”或手动删除。如果是电流声,可以尝试用 Audacity 的“陷波滤波器”去掉特定频率。
实际操作时,不要追求“完全无声”。过度降噪会让声音发闷、发虚,人声会失去气息感。《Simon》这种歌曲本身有伴奏,适当保留一点“空气感”比彻底干净更重要。
3.4 响度标准化是什么
响度标准化和简单的“音量放大”不是一回事。音量放大只是整体调整增益,而响度标准化会考虑人耳对不同频率敏感度的差异,让歌曲在手机、电脑、耳机等不同设备上听起来音量一致。
FFmpeg 提供了一个很实用的滤镜loudnorm,采用 EBU R128 标准。常用参数是:
ffmpeg -i works/03_denoised.wav -af loudnorm=I=-16:TP=-1.5:LRA=11 works/04_normalized.wav参数含义:
I=-16:目标综合响度是 -16 LUFS,适合流媒体平台音乐发布;TP=-1.5:真实峰值不超过 -1.5 dBTP,防止削波;LRA=11:响度范围,控制动态不要太夸张。
对于 B站音频投稿,-16 LUFS 是比较稳妥的目标。如果你做的歌切是放在视频里,也可以根据视频整体声音调整。
3.5 导出格式怎么选
歌切投稿常见格式有三种:
- MP3:兼容性最好,320kbps 音质已经很高;
- M4A/AAC:B站支持很好,256kbps 体积更小;
- FLAC:无损格式,适合存档,但文件较大。
推荐发布用 MP3 320kbps,保存原始工程时保留 WAV。转换命令:
ffmpeg -i works/04_normalized.wav -codec:a libmp3lame -b:a 320k output/Simon_歌切_v1.mp34. 完整实战案例:制作《Simon》歌切
4.1 准备录播文件并查看基本信息
假设你已经有了一份阿萨Aza演唱《Simon》的直播录播,文件名为record.mp4,放在raw/目录下。先查看文件格式、时长和音频流信息:
ffprobe -v error -show_format -show_streams raw/record.mp4重点看音频流的编码格式、采样率、声道数。一般录播音频是 AAC 48kHz 立体声。如果在-show_streams输出里看到类似:
codec_name=aac channels=2 sample_rate=48000说明音频流正常,后续处理按 48kHz 双声道处理即可。
4.2 从录播中截取歌曲音频
假设你通过波形和试听确认《Simon》在录播的第 01:02:03 处开始,歌曲长度为 04:30。执行:
ffmpeg -ss 01:02:03 -t 00:04:30 -i raw/record.mp4 -vn -acodec pcm_s16le works/01_raw_audio.wav执行完成后,用播放器打开01_raw_audio.wav,确认音乐开始和结束位置是否准确。很多新手在第一步没有确认首尾,后续处理完才发现多了前奏或少了尾奏,再返工很麻烦。
4.3 在 Audacity 中查看波形并微调
打开 Audacity,导入01_raw_audio.wav。工具栏会显示完整的波形。通过缩放,找到歌曲真正开始演唱的位置,以及最后一句唱完的位置。
如果发现截取范围偏了,可以使用 Audacity 的“选择工具”选中正确区间,然后菜单“文件 -> 导出音频”,选择 WAV 格式,保存为02_cut_raw.wav。
这一步相当于在可视环境下精确裁剪。相比纯 FFmpeg 命令,Audacity 的好处是能“看到”波形:
- 歌手开口瞬间通常波形会出现明显增幅;
- 歌曲结束前会有一段尾奏或混响衰减,需要判断是否保留;
- 如果波形中间有突然的大幅波动,可能是有报幕或观众欢呼,可以考虑切掉。
4.4 降噪处理
在 Audacity 中执行降噪:
- 在音轨上找到一小段纯底噪区域,比如唱前的一段安静片段,长度在 1 到 2 秒左右;
- 用选择工具选中这段噪声;
- 菜单“效果 -> 降噪/修复 -> 降噪”,打开降噪面板;
- 点击“获取噪声样本”,Audacity 会记录噪声特征;
- 全选整个音轨(Ctrl+A);再次打开降噪效果,降噪量建议从 6dB 到 12dB 之间尝试;
- 点击“降噪”,然后播放试听。
降噪处理后,仔细听人声是否变闷、是否出现“山洞音”或“水声”。如果音质损失明显,撤销操作,把降噪量调小。记住一个原则:降噪宁少勿多。残余一点底噪,比损失人声细节更容易被接受。
对于直播中的观众欢呼声,降噪是没法完全去除的。如果某个时间段欢呼声过大,可以考虑用 Audacity 的“淡入淡出包络”手动压低音量,或者直接剪掉这一段。
处理完降噪后,导出为03_denoised.wav。
4.5 响度标准化
回到命令行,对03_denoised.wav做响度标准化:
ffmpeg -i works/03_denoised.wav -af loudnorm=I=-16:TP=-1.5:LRA=11 works/04_normalized.wav执行后可以用volumedetect检查成品的峰值和平均音量:
ffmpeg -i works/04_normalized.wav -af volumedetect -f null -输出类似:
mean_volume: -17.5 dB max_volume: -1.4 dB这个结果表示平均音量在 -17.5dB,峰值在 -1.4dB,整体已经接近目标响度,没有出现削波。如果max_volume大于 -1dB,说明可能存在削波风险,需要重新用更低的响度目标处理。
4.6 导出成品 MP3
执行导出:
ffmpeg -i works/04_normalized.wav -codec:a libmp3lame -b:a 320k output/Simon_歌切_v1.mp3同时,保留04_normalized.wav作为无损母带,以后如果要导出不同格式或重新压缩,不需要重复前面的处理步骤。
4.7 用 Python 生成波形封面(可选)
B站音频投稿通常可以传封面。除了用现有图片,也可以用 Python 生成一张波形封面,让歌切看上去更有“声音可视化”的感觉。
先安装依赖:
pip install matplotlib numpy新建scripts/make_cover.py:
import wave import numpy as np import matplotlib.pyplot as plt wav_path = "works/04_normalized.wav" out_path = "cover/cover_wave.png" with wave.open(wav_path, "rb") as w: sr = w.getframerate() n_channels = w.getnchannels() samp_width = w.getsampwidth() frames = w.readframes(w.getnframes()) dtype_map = {1: np.int8, 2: np.int16, 4: np.int32} data = np.frombuffer(frames, dtype=dtype_map[samp_width]) if n_channels > 1: data = data.reshape(-1, n_channels) data = data.mean(axis=1) duration = len(data) / sr time = np.linspace(0, duration, len(data)) fig = plt.figure(figsize=(10, 4)) ax = fig.add_subplot(111) ax.plot(time, data, color="#66ccff", linewidth=0.2) ax.axis("off") plt.tight_layout(pad=0) plt.savefig(out_path, dpi=150, transparent=True) print("cover saved:", out_path)这段代码会读取 WAV 文件,把双声道转成单声道,然后画出整段音频的波形,保存为透明背景的 PNG。最后在剪辑软件或在线工具里,把波形图和歌名文字合成一张封面即可。
如果你不想写代码,也可以在 Audacity 里切换“频谱图”视图,截图后导出为图片,效果也不错。
4.8 发布前检查清单
导出的 MP3 在投稿前,建议过一遍下面的检查:
| 检查项 | 说明 |
|---|---|
| 歌曲首尾是否准确 | 多余空白、爆音、话头要清理干净 |
| 音量是否稳定 | 和站内其他歌切对比,响度接近 |
| 人声是否清晰 | 降噪后没有明显“水声”和闷感 |
| 峰值是否削波 | max_volume不超过 -1dB |
| 标题和标签是否合规 | 标注直播出处、原曲、歌手信息 |
| 封面是否清晰 | 不侵权、不包含敏感内容 |
如果以上都通过,一版《Simon》歌切就制作完成了。
5. 常见问题与排查思路
5.1 常见问题表格
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 截取出来的音频是空的 | -ss或-t时间格式不对 | 用HH:MM:SS格式,确认时长 |
| 音量特别小 | 录播原本音量低 | 先做增益,再响度标准化 |
| 降噪后人声发闷 | 降噪量过大或频率范围太宽 | 降低降噪量,试听对比 |
| 人声有“金属声” | afftdn参数不当 | 改用 Audacity 降噪 |
| 某段声音有爆音 | 录制时就已经削波 | 无法完全修复,尽量避开或剪掉 |
| 发布后手机音量和其他歌不一样 | 没有响度标准化 | 使用loudnorm |
| 波形封面只有一条线 | 单声道读取异常 | 双声道取均值或检查 dtype |
5.2 排查流程建议
如果你遇到问题,不要直接反复重试,先按顺序排查:
- 先用 Audacity 播放源文件
01_raw_audio.wav,确认问题是否来自录播本身; - 再播放
02_cut_raw.wav,确认是否是裁剪阶段引入的问题; - 然后播放
03_denoised.wav,确认是否是降噪损伤; - 最后播放
04_normalized.wav,确认是否是响度处理导致。
这种方法叫“分段定位”,哪一步引入问题,就回到哪一步修,不要从头到尾重新处理整条链路。
5.3 避免再次出现的习惯
- 每次处理前先备份源文件和上一步文件;
- 在工程目录中写下处理顺序和关键时间点;
- 不要在同一文件上反复保存覆盖;
- 遇到不确定的参数,先用一段 10 秒的测试音频验证。
6. 最佳实践与工程建议
6.1 从源头减少干扰
歌切效果很大程度上取决于录播源质量。录制直播时选择最高清晰度和码率,关闭不必要的系统通知音,麦克风增益不要开得过高,这些都能减少后续降噪压力。如果录播是别人提供的二次压缩文件,音质已经受损,降噪和响度处理的效果会大打折扣。
6.2 命名规范
文件命名建议包含歌曲名、处理阶段、版本号,例如:
Simon_raw_20250101.wav Simon_cut_v1.wav Simon_denoised_v1.wav Simon_normalized_v1.wav Simon_final_v1.mp3这样即使三个月后再看到文件,也能一眼知道哪个是源文件、哪个是成品。
6.3 批量处理思路
如果你有多首歌切要做,可以把 FFmpeg 命令封装成 Python 脚本,用配置文件描述每首歌的起止时间和歌名。
import subprocess from pathlib import Path BASE = Path("raw") OUT = Path("output") WORK = Path("works") WORK.mkdir(exist_ok=True) OUT.mkdir(exist_ok=True) clips = [ { "source": "record.mp4", "start": "01:02:03", "duration": "00:04:30", "name": "Simon", }, ] for clip in clips: src = BASE / clip["source"] start = clip["start"] duration = clip["duration"] name = clip["name"] wav_path = WORK / f"{name}_raw.wav" final_path = OUT / f"{name}_歌切.mp3" cmd_extract = [ "ffmpeg", "-y", "-ss", start, "-t", duration, "-i", str(src), "-vn", "-acodec", "pcm_s16le", str(wav_path), ] subprocess.run(cmd_extract, check=True) cmd_loudnorm = [ "ffmpeg", "-y", "-i", str(wav_path), "-af", "loudnorm=I=-16:TP=-1.5:LRA=11", str(WORK / f"{name}_normalized.wav"), ] subprocess.run(cmd_loudnorm, check=True) cmd_mp3 = [ "ffmpeg", "-y", "-i", str(WORK / f"{name}_normalized.wav"), "-codec:a", "libmp3lame", "-b:a", "320k", str(final_path), ] subprocess.run(cmd_mp3, check=True) print("done:", final_path)这个脚本把提取、标准化、导出三步串起来。如果你以后还要做更多歌切,只需要在clips列表里加一行。要注意的是,脚本默认没有降噪步骤,因为降噪需要人工试听,不适合完全自动化。
6.4 多版本备份
做好的成品建议分版本保存:
v1:普通降噪导出版;v2:二次微调版,比如修复了某段爆音;master:无损母带;archive:最终使用的原文件压缩包。
不要担心占用空间,歌切音频文件本身不大。备份能让你在做其他版本时不需要从头再来。
6.5 二次创作的边界
歌切属于二次创作,发布时要注意:
- 在简介中标注演唱者为阿萨Aza,并注明直播出处或录播来源;
- 遵守B站社区规范,不用于商业用途;
- 不发布未经主播或粉丝社区允许的付费内容;
- 尊重原曲版权,不对音频做恶意篡改。
这些规范既是保护主播,也是保护创作者自己。做歌切的核心是分享好听的现场,不是为了抢流量,保持社区氛围比数据更重要。
7. 总结与下一步学习路线
这篇教程以阿萨Aza《Simon》歌切为例,完整梳理了从直播录播到最终成品的流程。你学到的不是一段孤立命令,而是一套可以复用的音频处理链路:先用 FFmpeg 从录播中定位和截取音频,再用 Audacity 做可视化裁剪和降噪,接着用loudnorm做响度标准化,最后导出 MP3 并制作波形封面。
如果这是你第一次做歌切,建议先不要追求完美。用这篇文章里的步骤做出第一版,上传前听三遍:第一遍戴耳机听细节,第二遍用手机外放听整体,第三遍在嘈杂环境里听人声是否清晰。三遍都没问题,就可以放心发布了。
下一步可以尝试的方向包括:用 UVR 或 Demucs 做伴奏分离,提取更干净的人声;用 ReplayGain 和响度表做更精细的动态控制;把处理流程封装成完整 Python 脚本,实现批量出片。歌切虽小,但涉及音频编辑、命令行处理、批处理脚本和用户审美多个层面,每多走一步,你对声音的理解都会更深。希望这篇教程能帮你少踩一些坑,把喜欢的现场更完整地分享出去。