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

批量自动化按小时合并WAV文件及脚本优化求助

优化WAV合并脚本的文件名递增逻辑

先说说你当前代码里的几个明显问题,导致语法错误和逻辑失效:

  • glob.glob("*.wav")没有指定具体的子目录路径,会在脚本运行的当前工作目录查找WAV文件,而不是你遍历到的每个YYYYMMDD目录里的文件
  • combined.export的字符串格式化语法错误,% i应该嵌入到引号内的字符串中,不能放在参数列表后面
  • Python里没有i++这种写法,而且这里的i是目录名称(比如20240520),用它来做递增编号也不符合需求

下面是调整后的完整脚本,解决了这些问题,同时实现了文件名自动递增的逻辑:

import os
import glob
from pydub import AudioSegment

rootdir = 'PATH/TO/DIRECTORY1'
concat_dir = os.path.join(rootdir, 'DIRECTORY1_CONCATENATED')
# 创建合并目录,如果不存在的话
os.makedirs(concat_dir, exist_ok=True)

# 初始化递增计数器,从1开始
file_counter = 1

for root, dirs, files in os.walk(rootdir):
    for dir_name in dirs:
        # 拼接当前子目录的完整路径
        current_dir = os.path.join(root, dir_name)
        # 只找当前子目录下的WAV文件
        wav_files = glob.glob(os.path.join(current_dir, "*.wav"))
        
        if not wav_files:
            print(f"目录 {dir_name} 中没有WAV文件,跳过")
            continue
        
        # 按录音时间排序WAV文件(因为文件名是HHMMSS格式,直接字符串排序即可)
        wav_files.sort()
        
        # 初始化合并音频
        combined = AudioSegment.empty()
        for wav_file in wav_files:
            clip = AudioSegment.from_wav(wav_file)
            combined += clip
        
        # 生成递增的文件名,比如 DIRECTORY1_001.wav、DIRECTORY1_002.wav(补零保证编号对齐)
        output_filename = f"DIRECTORY1_{file_counter:03d}.wav"
        output_path = os.path.join(concat_dir, output_filename)
        
        # 导出合并后的文件
        combined.export(output_path, format="wav")
        print(f"已生成合并文件:{output_path}")
        
        # 计数器自增
        file_counter += 1

关键优化点说明:

  • 路径正确性:用os.path.join拼接目录路径,避免因操作系统差异导致的路径错误,同时确保在指定的YYYYMMDD目录下查找WAV文件
  • 文件名递增:用独立的file_counter变量实现自动编号,file_counter:03d会把数字格式化为3位带前导零的字符串(比如1→001,10→010),让文件名排序更整齐
  • 文件排序:对WAV文件按文件名排序,保证合并顺序是按录音时间从早到晚
  • 容错处理:如果某个目录没有WAV文件,会跳过并打印提示,避免报错中断脚本
  • 目录自动创建:用os.makedirs(..., exist_ok=True)确保合并目录存在,不用手动提前创建

如果你需要按小时区间来归类并合并(比如每个目录下按00-01点、01-02点等生成对应合并文件),可以再调整逻辑——先把每个YYYYMMDD目录下的WAV按小时分到子目录,再合并每个小时子目录的文件,文件名可以设为{dir_name}_{hour:02d}.wav(比如20240520_08.wav表示5月20日8点的合并音频)。如果需要这种逻辑可以告诉我,我再给你调整代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:58:14