移除 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>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user