本文目录导读:

- 方法1:使用 FFmpeg(最推荐)
- 方法2:使用 Python + pydub
- 方法3:使用 Python + wave(WAV格式专用)
- 方法4:使用 shell 脚本(适用WAV)
- 完整的生产级 Python 脚本
- 使用示例
- 建议
我来介绍几种合并多个音频文件的方法,从简单到灵活。
方法1:使用 FFmpeg(最推荐)
FFmpeg是最强大的音视频处理工具:
方法A:直接合并(同格式)
# 创建一个文件列表 echo file 'audio1.mp3' > filelist.txt echo file 'audio2.mp3' >> filelist.txt echo file 'audio3.mp3' >> filelist.txt # 执行合并 ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp3
方法B:自动处理目录下所有文件
#!/bin/bash
# 批量合并脚本
# 生成文件列表
for f in *.mp3; do
echo "file '$f'" >> filelist.txt
done
# 合并文件
ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged_output.mp3
# 清理临时文件
rm filelist.txt
方法2:使用 Python + pydub
from pydub import AudioSegment
import os
def merge_audios(input_files, output_file):
"""
合并多个音频文件
:param input_files: 音频文件路径列表
:param output_file: 输出文件路径
"""
# 加载第一个音频
combined = AudioSegment.from_file(input_files[0])
# 依次追加其他音频
for audio_file in input_files[1:]:
audio = AudioSegment.from_file(audio_file)
combined += audio
# 导出合并后的音频
combined.export(output_file, format="mp3")
print(f"合并完成:{output_file}")
# 使用示例
if __name__ == "__main__":
# 方式1:手动指定文件
files = [
"chapter1.mp3",
"chapter2.mp3",
"chapter3.mp3"
]
# 方式2:自动获取目录下所有mp3
# files = [f for f in os.listdir('.') if f.endswith('.mp3')]
# files.sort() # 按文件名排序
merge_audios(files, "合并版.mp3")
方法3:使用 Python + wave(WAV格式专用)
import wave
import os
def merge_wav_files(input_files, output_file):
"""
合并WAV文件(保持相同参数)
"""
# 读取第一个文件获取参数
with wave.open(input_files[0], 'rb') as first:
params = first.getparams()
# 创建输出文件
with wave.open(output_file, 'wb') as output:
output.setparams(params)
# 逐帧写入所有音频数据
for audio_file in input_files:
with wave.open(audio_file, 'rb') as wav:
output.writeframes(wav.readframes(wav.getnframes()))
print(f"合并完成:{output_file}")
# 使用示例
merge_wav_files(['file1.wav', 'file2.wav'], 'merged.wav')
方法4:使用 shell 脚本(适用WAV)
#!/bin/bash
# 合并当前目录下所有WAV文件
output_file="merged_output.wav"
# 创建临时列表
temp_list=$(mktemp)
# 获取所有WAV文件并排序
for f in $(ls *.wav | sort); do
echo "file '$f'" >> "$temp_list"
done
# 使用FFmpeg合并
ffmpeg -f concat -safe 0 -i "$temp_list" -c copy "$output_file"
# 清理
rm "$temp_list"
echo "合并完成: $output_file"
完整的生产级 Python 脚本
#!/usr/bin/env python3
"""
音频合并工具 - 支持多种格式,带进度显示
"""
import os
import sys
from pathlib import Path
from pydub import AudioSegment
import argparse
def merge_audios_with_progress(input_files, output_file, format="mp3"):
"""
带进度显示的音频合并
"""
if not input_files:
print("错误:没有输入文件")
return False
total = len(input_files)
print(f"开始合并 {total} 个音频文件...")
try:
# 加载第一个文件
combined = AudioSegment.from_file(input_files[0])
print(f"[1/{total}] 已加载: {Path(input_files[0]).name}")
# 依次合并
for i, audio_file in enumerate(input_files[1:], 2):
audio = AudioSegment.from_file(audio_file)
combined += audio
print(f"[{i}/{total}] 已追加: {Path(audio_file).name}")
# 导出
print(f"正在导出到: {output_file}")
combined.export(output_file, format=format)
print(f"✅ 合并完成!输出文件: {output_file}")
return True
except Exception as e:
print(f"❌ 错误: {e}")
return False
def main():
parser = argparse.ArgumentParser(description='合并多个音频文件')
parser.add_argument('files', nargs='+', help='要合并的音频文件列表')
parser.add_argument('-o', '--output', default='merged_output.mp3',
help='输出文件名 (默认: merged_output.mp3)')
parser.add_argument('-f', '--format', default='mp3',
help='输出格式 (默认: mp3)')
args = parser.parse_args()
# 检查文件是否存在
files = [f for f in args.files if Path(f).exists()]
if not files:
print("错误:未找到有效的音频文件")
sys.exit(1)
# 执行合并
success = merge_audios_with_progress(files, args.output, args.format)
sys.exit(0 if success else 1)
if __name__ == "__main__":
main()
使用示例
安装依赖
# FFmpeg # macOS: brew install ffmpeg # Ubuntu: sudo apt install ffmpeg # Python库 pip install pydub
运行脚本
# 使用FFmpeg
bash merge_audios.sh
# 使用Python脚本
python merge_audios.py audio1.mp3 audio2.mp3 audio3.mp3 -o combined.mp3
# 批量处理目录下所有mp3
python -c "import glob; from merge_audios import merge_audios; merge_audios(sorted(glob.glob('*.mp3')), 'all_combined.mp3')"
建议
- 最佳实践:推荐使用FFmpeg方法,支持所有格式,性能最好
- 格式统一:确保所有音频格式一致,否则先转换格式
- 文件排序:如需按特定顺序合并,确保文件名包含序号或排序规则
- 备份源文件:合并前建议备份原始文件
选择哪种方法取决于你的具体需求和技术栈,最推荐FFmpeg,简单高效。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播