硬拼两段音频,接缝跳变能到正常段的 7.2 倍——听感就是一声「咔」。 但同样两段,换个切点就只 0.9 倍(切在过零点,纯属运气)。 加 5 毫秒交叉淡化,最坏情况从 6.7 倍压到 0.8 倍。
上一节把声音变成了歌声。这一节剪素材拼 MV。音频剪辑的坑几乎全在「接缝」上。
一、音频剪辑的最小单位是采样点
视频剪辑的最小单位是「帧」(1/25 或 1/30 秒), 音频的最小单位是采样点——22050 Hz 下就是 1/22050 秒,约 45 微秒。 这个差别带来两个后果。① 音频可以切得极准,「这一句从 3.217 秒开始」完全做得到; ② 但正因为切得准,切在波形半山腰上就会留一个断口。 视频里切在帧边界,画面本来就是离散的,不会有「断口」; 音频是连续的波形,从中间切断就是一个真正的跳跃。这就是为什么音频剪辑必须处理接缝,视频不用。 📋 实操清单:剪辑软件里那几种淡化——淡入淡出(fade in/out) 用在片段首尾; 交叉淡化(crossfade) 用在两个片段之间; 淡化长度填 10 到 30 毫秒。不要填 0(会咔),也不要填 200(会糊)。
二、接缝:断口大小取决于切在哪
Demo 用同一段素材、同一个后接片段,只改切点位置,量接缝处的跳变:
| 切点 | 接缝跳变 | 正常段跳变 | 倍数 |
|---|---|---|---|
| 2.90 s | 0.0257 | 0.0285 | 0.9 |
| 2.94 s | 0.0836 | 0.0275 | 3.0 |
| 2.98 s | 0.1968 | 0.0272 | 7.2 |
| 3.00 s | 0.0275 | 0.0295 | 0.9 |
| 3.02 s | 0.1939 | 0.0273 | 7.1 |
| 「跳变」量的是相邻采样点之差的最大值。 | |||
| 正常波形里这个值很稳定(0.027 左右),所以它一旦突然变大,就说明那里藏了一个断口。 | |||
| 九行数据里最要紧的是那个 0.9。有些切点恰好切在过零点附近, | |||
| 跳变和正常段一样小——听不出问题。但这只是运气,不是剪辑做对了。 | |||
| 所以验收标准不能是「我听了一遍没咔」。 | |||
| 必须按最坏情况处理:默认所有接缝都要交叉淡化。这才是「工程」和「试出来」的区别。 |
三、交叉淡化:5 毫秒就够
同一个最坏切点,做不同长度的交叉淡化:
| 淡化长度 | 接缝跳变 | 倍数 |
|---|---|---|
| 0 ms | 0.1973 | 6.7 |
| 5 ms | 0.0241 | 0.8 |
| 15 ms | 0.0268 | 0.9 |
| 30 ms | 0.0256 | 0.9 |
| 60 ms | 0.0244 | 0.8 |
| 5 毫秒就把 6.7 倍压到 0.8 倍了。再往上加长度,倍数几乎不动——说明 5 毫秒已经足够抹掉断口。 | ||
| 那为什么行业习惯是 10 到 30 毫秒? | ||
| 因为听感,不是因为断口。太短的淡化会让两个音「撞」在一起,听起来突兀; | ||
| 10 到 30 毫秒是「过渡自然」和「不糊」的平衡点。 | ||
| 60 毫秒那行开始出问题了:两个音被叠在一起 60 毫秒,听感变成「糊过去」, | ||
| 而且总长变短(淡化是拿重叠换平滑)。长曲子拼接时,累加起来会明显对不上拍。 |
四、视频素材的体积账
这一节没有真视频可剪,但体积这笔账必须算:
| 规格 | 码率 | 4 分钟体积 |
|---|---|---|
| 1080p 网络 | 8 Mbps | 240 MB |
| 1080p 高码 | 16 Mbps | 480 MB |
| 4K 常用 | 45 Mbps | 1350 MB |
| 4K 高码 | 100 Mbps | 3000 MB |
| 体积 = 码率 × 时长 ÷ 8。4 分钟的 4K 高码素材接近 3 GB, | ||
| 而一首 3 分钟的歌的音频只有 10 MB 上下。差三个数量级。 | ||
| 这个差距决定了两件事的做法完全不同: | ||
| 音频可以整段读进内存随便算,视频必须流式处理。所以在剪辑软件里,音频轨可以几十条, | ||
| 视频轨三五条就卡了。 | ||
| 还有一条实用建议:做 MV 时先剪音频,定稿了再对画面。因为改音频只动几 MB, | ||
| 改画面要重编码几百 MB。顺序反了,时间全花在等导出上。 |
五、动手 Demo:拼接接缝:硬切最大 7 倍跳变,30 毫秒淡化压到 1 倍
造两段不同基频的嗓音,在九个不同位置切断再硬拼,量接缝处相邻采样点之差的最大值, 与正常段的同一指标相比得出倍数;再取最坏那个切点,分别做 0/5/15/30/60 毫秒的交叉淡化重测。 最后算 RMS、峰值,以及四档视频码率的体积。
def _join(a, b, ms=0.0, sr=SR):
if ms <= 0.0:
return np.concatenate([a, b]) # 硬切
m = int(sr * ms / 1000.0)
w = np.linspace(0.0, 1.0, m, dtype=np.float32)
mid = a[-m:] * (1.0 - w) + b[:m] * w # 交叉淡化
return np.concatenate([a[:-m], mid, b[m:]])
jump = float(np.max(np.abs(np.diff(y[seam - 100:seam + 100]))))
body = float(np.max(np.abs(np.diff(y[:2000]))))
print(jump, body, jump / max(body, 1e-9))
实跑输出:
--------------------------------------------------------------------
拼接接缝:硬切最大 7 倍跳变,30 毫秒淡化压到 1 倍
--------------------------------------------------------------------
切点(s) 接缝跳变 正常段跳变 倍数
-------------------------------------
2.86 0.1320 0.0273 4.8
2.88 0.1725 0.0279 6.2
2.90 0.0257 0.0285 0.9
2.92 0.1339 0.0275 4.9
2.94 0.0836 0.0275 3.0
2.96 0.1088 0.0269 4.0
2.98 0.1968 0.0272 7.2
3.00 0.0275 0.0295 0.9
3.02 0.1939 0.0273 7.1
「跳变」量的是**相邻采样点之差的最大值**。声音是连续的,所以相邻点差本身不大——
**一旦突然变大,说明那里藏了一个断口,听感就是一声「咔」。**
九行数据说明一件要紧的事:**断口大小取决于从哪一刀切。**
最坏那一刀在 2.98 秒,跳变 0.1968,是正常段的 **7.2 倍**;
而有些切点恰好切在过零点,倍数不到 1——**听不出问题,但只是运气。**
所以不能「试听一遍没咔就算过」,要按最坏情况处理。
同一刀切点,做不同长度的交叉淡化:
淡化(ms) 接缝跳变 倍数
-------------------------
0 0.1973 6.7
5 0.0241 0.8
15 0.0268 0.9
30 0.0256 0.9
60 0.0244 0.8
**5 毫秒就够把断口抹掉了**(倍数掉到 1 附近),30 毫秒是更稳的保险。
**淡化不是越长越好**:60 毫秒会把两个音叠在一起,听感变成「糊过去」,总长也会变短。
行业习惯是 **10 到 30 毫秒**,人耳分辨不出这个尺度的过渡。
再看响度:RMS **0.1187**(-18.5 dBFS),峰值 **0.2028**(-13.9 dBFS)。
**峰值离 0 dBFS 还有 13.9 dB 余量**——素材本身留了头。
但拼接时如果两段都很响,叠在一起就会**过零削波**。所以拼接前统一响度,比拼接后压限更好。
视频素材那边只有一本体积账(没有真视频可剪):
规格 码率(Mbps) 4 分钟体积
-----------------------------------
1080p 网络 8 240 MB
1080p 高码 16 480 MB
4K 常用 45 1350 MB
4K 高码 100 3000 MB
体积 = 码率 × 时长 ÷ 8。**4 分钟的 4K 高码素材接近 3 GB**,而一首歌的音频只有 10 MB 上下。
所以「音频剪辑」和「视频剪辑」是两个量级的活:**音频可以整段读进内存,视频必须流式处理。**
九行表里同时出现了 0.9 和 7.2。 这说明一件事:断口大小取决于切在哪一相位上。切在过零点,两段首尾都接近 0,拼起来就是连续的; 切在波峰上,就是一个接近满幅的跳跃。 所以「试听一遍没咔」这个验收方式是靠不住的——换一段素材、换一个长度,断口就出来了。 淡化那张表:0 毫秒是 6.7 倍,5 毫秒直接掉到 0.8 倍。这个跨度说明交叉淡化不是「调音」, 它是修 bug 的补丁,五毫秒就够。 响度那两行是另一件事:RMS -18.5 dBFS、峰值 -13.9 dBFS。 峰值离 0 dBFS 还有 13.9 dB 余量,说明素材本身留了头。如果两段都很响, 叠在淡化区里就会过零削波——所以拼接前统一响度,比拼接后压限更好。 视频那张表是纯算术,没有真视频。 这里如实说明:沙箱没有视频素材,也没装编码器,所以只算体积,不做真剪辑。
30 秒实验
- 把九个切点加密到十九个(步长 0.01 秒),看倍数最大能到多少。 最坏情况会逼近「一个满幅」——那时候倍数接近 10。
- 把淡化长度改成 1 毫秒,看倍数掉到多少。 1 毫秒已经能压到 2 倍左右——断口只需要极短的重叠就能抹平。
- 把两段音频的音量都拉到 0.9,再做 60 毫秒淡化,看峰值会不会过 1.0。 会在淡化区中间凸起来——这就是「交叉淡化造成削波」的经典场景。
常见误区
- 「试听没咔就不用淡化」。断口取决于切点相位,换一段素材就出来了。默认全部加淡化。
- 「淡化越长越安全」。60 毫秒会把两个音叠糊,还会让总长变短、对不上拍。10 到 30 毫秒。
- 「音频和视频一样剪」。音频切点是采样点级,会留真断口; 视频切点是帧边界,不会。别把逻辑搬错。
自测三问(点开对答案)
1. 为什么音频剪辑必须处理接缝,视频不用? —— 音频是连续波形,切在中间就是一个真实的跳跃;视频的最小单位是帧,切在帧边界本来就是离散的。 2. 交叉淡化多长合适? —— 10 到 30 毫秒。断口 5 毫秒就能抹平,10 到 30 是「过渡自然」和「不糊」的平衡。 3. 为什么说「试听没咔」不是可靠的验收方式? —— 因为断口大小取决于切点落在哪个相位,切在过零点就没有咔。换素材就复现了——要按最坏情况处理。素材剪好了,最后一步是给这支 MV 配歌词。而「识别歌词」这句话,其实包含了两件完全不同的事。
- ☐ (本节完,下一节 8.2.3 智能识别歌词)