ds 生成的代码:
import os
from pydub import AudioSegment
from tqdm import tqdm
import concurrent.futures
def convert_file(source_path, target_path):
"""转换单个音频文件到16kHz WAV格式"""
# 确保目标目录存在
os.makedirs(os.path.dirname(target_path), exist_ok=True)
# 加载FLAC文件
audio = AudioSegment.from_file(source_path, format="flac")
# 设置目标参数:16kHz采样率,16位深度,单声道
audio = audio.set_frame_rate(16000)
audio = audio.set_sample_width(2) # 16位 = 2字节
# 保存为WAV格式
audio.export(target_path, format="wav", parameters=["-ac", "1"])
def process_vctk_dataset(source_root, target_root):
"""
处理整个VCTK数据集:
1. 只保留_mic1.flac文件
2. 转换为16kHz WAV格式
3. 保持原始目录结构
"""
tasks = []
# 遍历所有目录和文件
for root, _, files in os.walk(source_root):
for file in files:
if file.endswith("_mic1.flac"):
src_path = os.path.join(root, file)
# 构建目标路径 (替换目录和文件名)
rel_path = os.path.relpath(root, source_root)
new_filename = file.replace("_mic1.flac", ".wav")
tgt_path = os.path.join(target_root, rel_path, new_filename)
tasks.append((src_path, tgt_path))
# 使用线程池并行处理
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(convert_file, src, tgt) for src, tgt in tasks]
# 使用tqdm显示进度条
for future in tqdm(concurrent.futures.as_completed(futures),
total=len(tasks),
desc="转换音频"):
future.result() # 获取结果(如果有异常会抛出)
if __name__ == "__main__":
# 配置路径
SOURCE_DIR = "VCTK/wav48_silence_trimmed"
TARGET_DIR = "VCTK/wav16k"
print("开始音频转换处理...")
print(f"源目录: {SOURCE_DIR}")
print(f"目标目录: {TARGET_DIR}")
process_vctk_dataset(SOURCE_DIR, TARGET_DIR)
print("\n转换完成!")
print(f"所有_mic1.flac文件已转换为16kHz WAV格式并保存到 {TARGET_DIR}")

被折叠的 条评论
为什么被折叠?



