import os from pydub import AudioSegment def calculate_audio_durations(directory): """ 计算指定目录下所有以 audio_for_paragraph_{index} 命名的文件夹中 mp3 文件的总持续时间(以秒为单位)。 参数: directory (str): 需要扫描的根目录路径。 返回: list: 每个 audio_for_paragraph_{index} 文件夹中 mp3 文件总持续时间(秒)的列表。 """ # 初始化结果列表 durations = [] # 遍历目录下的所有子目录 for entry in os.scandir(directory): if entry.is_dir() and entry.name.startswith("audio_for_paragraph_"): # 提取 index index = int(entry.name.split("_")[-1]) # 初始化当前文件夹的总持续时间为0 total_duration_ms = 0 # 遍历子目录中的所有文件 for file_entry in os.scandir(entry.path): if file_entry.name.endswith(".mp3"): # 加载 mp3 文件并计算持续时间 audio = AudioSegment.from_mp3(file_entry.path) delay = 300 total_duration_ms += len(audio) + delay # 将当前文件夹的总持续时间转换为秒,并添加到结果列表中 total_duration_seconds = total_duration_ms / 1000.0 durations.append((index, total_duration_seconds)) # 按照 index 排序结果列表 durations.sort(key=lambda x: x[0]) # 只保留持续时间(秒) durations = [duration for _, duration in durations] durations.insert(0, 2) return durations