You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pydub将多个WAV文件按指定开始时间叠加导出为单文件

Pydub按指定时间点叠加多段WAV音频的实现方法

你需要的功能可以直接通过overlay()方法自带的position参数实现,该参数用于指定叠加音频在基底音频上的开始播放时间,单位为毫秒。

双音频场景适配代码

你原有代码存在变量名不匹配的问题(导入的变量名为audio_1/audio_2,调用时用了vln_audio_1/vla_audio_2),修正后的实现如下:

from pydub import AudioSegment

audio_1 = AudioSegment.from_file("audio_1.wav", format="wav")
audio_2 = AudioSegment.from_file("audio_2.wav", format="wav")

# audio_2从第5秒(5*1000=5000毫秒)位置开始播放
overlay = audio_1.overlay(audio_2, position=5000)
file_handle = overlay.export("output2.wav", format="wav")

多音频批量叠加通用方案

如果有多个音频需要分别对应不同的开始时间,可以先计算总时长生成空白基底音频,再循环叠加,避免音频内容被截断:

from pydub import AudioSegment

# 配置项:格式为(音频文件路径,该音频开始播放的时间/秒)
audio_list = [
    ("audio_1.wav", 0),
    ("audio_2.wav", 5),
    ("audio_3.wav", 8),
    ("audio_4.wav", 12)
]

# 预加载所有音频并计算最终输出的总时长
segments = []
total_duration = 0
for path, start_sec in audio_list:
    seg = AudioSegment.from_file(path, format="wav")
    start_ms = start_sec * 1000
    segments.append((seg, start_ms))
    # 计算当前音频的结束时间
    end_time = start_ms + len(seg)
    if end_time > total_duration:
        total_duration = end_time

# 生成对应时长的空白基底音频
output_audio = AudioSegment.silent(duration=total_duration)

# 按指定位置叠加所有音频
for seg, start_ms in segments:
    output_audio = output_audio.overlay(seg, position=start_ms)

# 导出最终文件
output_audio.export("final_output.wav", format="wav")

注意事项

  • position参数单位为毫秒,传入秒级时间时需要乘以1000做单位转换
  • 如果基底音频时长小于叠加音频的结束时间(开始时间+叠加音频自身时长),超出部分会被自动截断,多音频叠加时建议先计算总时长生成空白基底,避免内容丢失

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:45:05