doc2video / calculate_durations_for_each_image.py
zhao1977's picture
Upload 15 files
dd74184 verified
raw
history blame
1.69 kB
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