Files
blind/audio_1/scripts/06_convert_all_to_mp3.py
T
xslandClaude Sonnet 4.6 e5d3d44f9d 移除 GPT-SoVITS 和 Fish Speech,整理 audio_1 脚本与文档
- 删除 03_gen_tts_gptsovits.py、00_transcribe_refs.py、ref_texts.json
- 删除 02_gen_tts_fishspeech.py 及 tts/v2_fishspeech/ 生成结果
- 保留 VoxCPM2 / ACE-Step / Stable Audio 三条链路
- 更新执行文档和技术报告,清除两款 TTS 的所有引用

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 23:12:01 +08:00

84 lines
2.9 KiB
Python

#!/usr/bin/env python3
"""
步骤 6:格式整理 — 将 audio_1 目录下所有残留 WAV 转换为 MP3,并清理中间文件
输出:各子目录内的 *_v1.mp3
使用方法:
python audio_1/scripts/06_convert_all_to_mp3.py [--dry-run] [--clean-wav]
"""
import os, subprocess, argparse
AUDIO_1_DIR = "/home/xsl/blind/audio_1"
def wav_to_mp3(src, dst):
subprocess.run(["ffmpeg", "-y", "-i", src, "-codec:a", "libmp3lame",
"-b:a", "128k", "-ar", "44100", "-ac", "2", dst],
check=True, capture_output=True)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--dry-run", action="store_true", help="只列出,不执行")
parser.add_argument("--clean-wav", action="store_true", help="转换后删除 WAV 源文件")
args = parser.parse_args()
wavs_found = []
for root, dirs, files in os.walk(AUDIO_1_DIR):
# 跳过 scripts 目录
if "scripts" in root:
continue
for fname in files:
if fname.endswith(".wav"):
wav_path = os.path.join(root, fname)
mp3_path = wav_path.replace(".wav", ".mp3")
wavs_found.append((wav_path, mp3_path))
if not wavs_found:
print("无需转换的 WAV 文件。")
return
print(f"\n找到 {len(wavs_found)} 个 WAV 文件\n")
ok = skip = fail = 0
for wav, mp3 in wavs_found:
rel = os.path.relpath(wav, AUDIO_1_DIR)
if os.path.exists(mp3):
print(f" [SKIP] {rel}")
skip += 1
continue
if args.dry_run:
print(f" [DRY] {rel}{os.path.basename(mp3)}")
continue
try:
wav_to_mp3(wav, mp3)
size = os.path.getsize(mp3) // 1024
print(f" [OK] {rel}{size}KB")
if args.clean_wav:
os.remove(wav)
ok += 1
except Exception as e:
print(f" [FAIL] {rel}: {e}")
fail += 1
print(f"\n完成: {ok} ok, {skip} skip, {fail} fail")
# 统计各目录 MP3 数量
print("\n─── 音频资源统计 ───")
subdirs = [
("tts/v1_voxcpm2", "TTS v1 VoxCPM2"),
("music/v1_acestep/music", "Music v1 ACE-Step BGM"),
("music/v1_acestep/sfx", "Music v1 ACE-Step SFX"),
("music/v1_acestep/ambience", "Music v1 ACE-Step Amb"),
("music/v2_stableaudio/music", "Music v2 StableAudio BGM"),
("music/v2_stableaudio/sfx", "Music v2 StableAudio SFX"),
("music/v2_stableaudio/ambience", "Music v2 StableAudio Amb"),
]
for rel_dir, label in subdirs:
full = os.path.join(AUDIO_1_DIR, rel_dir)
if not os.path.isdir(full):
count = 0
else:
count = len([f for f in os.listdir(full) if f.endswith(".mp3")])
print(f" {label:<30} {count:>4} 条")
if __name__ == "__main__":
main()