音频拼接
多个音频按顺序拼接 · 支持交叉淡化过渡 · 自动重采样对齐
多段拼接/淡入淡出
多个音频按顺序拼接 · 支持交叉淡化过渡 · 自动重采样对齐
支持一次添加多个文件 · 上下拖动调整顺序
顺序调整:点击轨道上的 ↑ ↓ 调整播放顺序,或 ✕ 移除。
交叉淡化:两段衔接时前段尾部和后段开头按 cos 曲线淡化,避免突兀。建议音乐用 0.5-2 秒,语音用硬切。
采样率对齐:所有段会被重采样到首段的采样率 + 通道数,所以建议把质量最高的放第一位。
大文件警告:浏览器内存上限 ~2GB,建议总时长 ≤ 60 分钟。超长内容请用桌面工具。
了解工具定位 · 使用场景 · 对比优势
将多段音频文件按顺序拼接成一个完整文件,支持在段落间添加淡入淡出过渡,避免生硬切换。适合播客剪辑、语音合辑、课程录音整理等需要合并多个片段的场景。上传文件后,在浏览器中完成拼接处理,音频数据不上传服务器。
播客主播在录制单期节目时,常因口误、停顿或分段讨论产生多个音频片段。手动用剪辑软件拼接费时且容易产生爆音。本工具支持将 3-10 个 MP3 片段按顺序拼接,并在片段间自动添加 0.5-2 秒淡入淡出过渡,消除咔嗒声,让最终成品听起来像一次流畅录制。无需安装软件,上传即可合并。
视频创作者在后期配音时,常需要将多段人声录音(旁白、对白、音效)合并为一条音轨。直接拼接会导致段落间声音突兀。本工具在拼接时对每段音频首尾应用 300ms 的淡入淡出,使过渡自然,避免音量跳变。支持 WAV/MP3/AAC 格式混合输入,输出为单条音频文件,可直接拖入剪辑软件时间线。
独立音乐人在创作 Demo 时,常将不同乐段(前奏、主歌、副歌、桥段)分开录制再组合。手动在 DAW 中对齐并添加淡入淡出耗时。本工具允许上传各乐段音频,按预设顺序拼接,并在衔接处自动添加 0.2-1 秒交叉淡化,避免节奏中断或音量突变。适合快速生成编曲草稿供后续混音。
有声书录制者常将每章录为独立文件,但发布平台要求单条音频。手动用 Audacity 拼接需逐段对齐,且章节间若留白不足会显得仓促。本工具支持一次性导入所有章节音频,按文件名排序拼接,并在章节间插入 1-3 秒静音间隔,同时为每段开头/结尾添加 100ms 淡入淡出,避免爆音。输出为一条完整有声书文件。
商务人士在会议录音时,因设备限制常产生多个分段文件(如每 30 分钟自动分割)。人工拼接不仅耗时,且分段处常有杂音或音量差异。本工具支持批量上传所有分段,自动检测相邻片段的时间戳,无缝拼接并统一音量,同时在衔接处应用 50ms 极短淡入淡出以消除点击声。输出为单条连续录音,方便存档或转写。
| 维度 | 本工具 | Audacity (桌面软件) | 传统方法 (多轨录音机/剪辑软件) |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,音频不上传任何服务器 | 音频文件存储在本地电脑,不联网 | 音频文件存储在本地,但需依赖第三方设备/软件 |
| 处理速度 | 1-3 秒内完成拼接和淡入淡出 | 需启动软件、导入文件、编辑、导出,耗时 1-5 分钟 | 需手动操作硬件或线性剪辑软件,耗时 10 分钟以上 |
| 离线可用 | 需要网络加载,加载后部分功能可离线使用 | 完全离线可用 | 完全离线,依赖物理设备 |
| 大小限制 | 受浏览器内存限制,建议单文件 < 200MB | 无严格限制,取决于电脑内存 | 无严格限制,取决于硬件存储 |
| 收费 | 完全免费,无水印 | 免费开源 | 通常需要购买软件或硬件,成本数百至数千元 |
| 注册 | 无需注册,打开即用 | 无需注册 | 无需注册 |
| 平台 | 跨平台(任何支持现代浏览器的设备) | 仅支持 Windows / macOS / Linux | 仅支持特定硬件或操作系统 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 文件1.mp3 文件2.mp3 文件3.mp3 | 拼接后音频文件(3段连续播放) | 典型场景:多段音频简单拼接 |
| 文件1.mp3 文件2.mp3 文件3.mp3 淡入时长:2秒 淡出时长:2秒 交叉淡入淡出:开启 | 拼接后音频文件(段间平滑过渡,首尾淡入淡出) | 典型场景:带淡入淡出的音乐混剪 |
| 文件1.mp3 文件2.mp3 文件3.mp3 淡入时长:0秒 淡出时长:0秒 | 拼接后音频文件(无淡入淡出,段间直接切换) | 边界 case:零淡入淡出,适合播客或语音 |
| 文件1.mp3 文件2.mp3 文件3.mp3 淡入时长:10秒 淡出时长:10秒 交叉淡入淡出:开启 | 拼接后音频文件(段间重叠10秒,总时长缩短) | 边界 case:淡入淡出时长超过单段时长 |
| 文件1.mp3 文件2.mp3 文件3.mp3 文件4.mp3 文件5.mp3 文件6.mp3 文件7.mp3 文件8.mp3 文件9.mp3 文件10.mp3 | 拼接后音频文件(10段连续播放) | 边界 case:大量片段拼接(接近上限) |
| 文件1.mp3 文件2.mp3 文件3.mp3 淡入时长:-1秒 淡出时长:2秒 | 错误提示:淡入时长不能为负数 | 易错 case:输入负数时长 |
| 文件1.mp3 文件2.mp3 文件3.mp3 淡入时长:abc 淡出时长:2秒 | 错误提示:淡入时长必须为数字 | 易错 case:时长输入非数字字符 |
第一段 44100Hz 的 WAV 直接接上 48000Hz 的 MP3先用工具或 FFmpeg 统一采样率(如 `ffmpeg -i input.mp3 -ar 44100 output.wav`)再拼接不同采样率的音频直接拼接,播放器会按第一段的采样率重采样后续段,导致音调变高或变低,听起来像快放或慢放。
对一段 2 秒的音频设置 3 秒淡入淡入时长 ≤ 音频总时长(建议 0.5-1 秒),淡出同理淡入/淡出时长超过音频长度时,工具要么静音整段,要么报错;实际听感是还没开始就结束了。
单声道 WAV 直接接立体声 MP3统一声道数后再拼接(如所有片段转为立体声或转为单声道)声道数不一致时,播放器可能只播放左声道或右声道,另一侧静音;严重时产生破音或相位抵消。
输入包含 .wav、.mp3、.flac,输出选了 .ogg所有输入片段转为同一格式(推荐 .wav 或 .mp3),输出格式与输入一致不同编码格式的音频直接拼接,输出容器可能无法正确封装,导致播放器解码失败或音画不同步。
拼接 50 段 10 分钟音频,总时长 500 分钟先确认工具或播放器支持的最大时长(通常 2-3 小时),分批次拼接部分在线工具或浏览器对音频时长有上限(如 120 分钟),超长音频可能无法导出或播放时卡死。
淡入时长输入 -1 或 abc输入 0.5(秒)或 1000(毫秒,具体看工具单位)时长参数必须为正数,负值或非数字会被工具忽略或直接拒绝执行,导致淡入淡出效果不生效。
想按 A→B→C 顺序,实际选了 C→B→A上传文件后检查列表顺序,或手动拖拽排序确认多数工具按上传顺序或文件名排序拼接,不显式排序时容易搞反,导致故事倒叙或课程章节错乱。
拼接 5 段 320kbps 的 MP3,输出选了无损 WAV输出格式选与输入相近的码率(如 MP3 128-256kbps),或根据需要调整无损 WAV 体积约为 MP3 的 5-10 倍,5 段 10MB 的 MP3 拼接成 WAV 可能超过 500MB,上传/下载耗时剧增。
公式推导 · 流程图解 · 依据出处
A(t) = Σ_i [ s_i(t - t_i) × w_i(t) ]
A(t) — 拼接后音频在时刻 t 的采样值s_i(t) — 第 i 段音频的原始采样值函数t_i — 第 i 段音频的起始时间偏移w_i(t) — 淡入/淡出窗函数(0~1 渐变)拼接两段音频:段1 时长 3s,段2 时长 2s,交叉淡入淡出重叠 0.5s。设段1 结束前 0.5s 为淡出段(w₁ 从 1 线性降至 0),段2 起始 0.5s 为淡入段(w₂ 从 0 线性升至 1)。在重叠区 t=2.7s(段1 的 2.7s,段2 的 0.2s),若 s₁=0.3, s₂=0.5,则 w₁=0.6, w₂=0.4,A=0.3×0.6+0.5×0.4=0.18+0.20=0.38。
适用于 PCM 线性采样音频的拼接(如 WAV/MP3 解码后)。不适用于压缩域直接拼接(如未解码的 MP3 帧拼接),因帧边界对齐与编码参数不同。窗函数类型(线性/余弦/指数)影响拼接处听觉平滑度,但公式结构通用。
3 种主流语言 · 复制即用
from pydub import AudioSegment
# 加载两个音频文件
clip1 = AudioSegment.from_file("intro.mp3")
clip2 = AudioSegment.from_file("verse.mp3")
# 拼接(直接连接)
combined = clip1 + clip2
# 在拼接处添加淡入淡出(各 500ms)
fade_duration = 500 # 毫秒
clip1_fadeout = clip1.fade_out(fade_duration)
clip2_fadein = clip2.fade_in(fade_duration)
combined_fade = clip1_fadeout + clip2_fadein
# 导出结果
combined_fade.export("output.mp3", format="mp3")
print("拼接完成,时长:", len(combined_fade) / 1000, "秒")package main
import (
"fmt"
"log"
"os/exec"
)
func main() {
// 使用 FFmpeg 拼接两个音频,并在连接处添加 0.5 秒淡入淡出
cmd := exec.Command("ffmpeg",
"-i", "intro.mp3",
"-i", "verse.mp3",
"-filter_complex",
"[0]afade=t=out:st=9.5:d=0.5[f0];[1]afade=t=in:st=0:d=0.5[f1];[f0][f1]concat=n=2:v=0:a=1",
"-c:a", "libmp3lame",
"output.mp3",
)
output, err := cmd.CombinedOutput()
if err != nil {
log.Fatalf("FFmpeg 失败: %v\n输出: %s", err, output)
}
fmt.Println("拼接完成,输出文件: output.mp3")
}const fs = require('fs');
const { spawn } = require('child_process');
// 使用 FFmpeg 拼接两个音频并添加淡入淡出
const ffmpeg = spawn('ffmpeg', [
'-i', 'intro.mp3',
'-i', 'verse.mp3',
'-filter_complex',
'[0]afade=t=out:st=9.5:d=0.5[f0];[1]afade=t=in:st=0:d=0.5[f1];[f0][f1]concat=n=2:v=0:a=1',
'-c:a', 'libmp3lame',
'output.mp3'
]);
ffmpeg.stderr.on('data', (data) => {
process.stderr.write(data);
});
ffmpeg.on('close', (code) => {
if (code === 0) {
console.log('拼接完成,输出文件: output.mp3');
} else {
console.error('FFmpeg 进程退出码:', code);
}
});8 个高频疑问