| 123456789101112131415161718192021222324252627282930313233343536 |
- import json, os, re, requests, time
- with open('test/all_voices.json', 'r', encoding='utf-8') as f:
- raw = f.read()
- m = re.search(r'"(\[.*\])"', raw, re.DOTALL)
- data = json.loads(m.group(1).replace(r'\"', '"').replace(r'\\\\', '\\'))
- print(f'共 {len(data)} 个音色')
- os.makedirs('voices', exist_ok=True)
- dl = skip = fail = 0
- for i, v in enumerate(data):
- url, voice = v['url'], v['voice']
- if not url or not voice:
- skip += 1; continue
- fpath = f'voices/{voice}.mp3'
- if os.path.exists(fpath):
- skip += 1; continue
- try:
- r = requests.get(url, timeout=30)
- if r.status_code == 200 and len(r.content) > 100:
- open(fpath, 'wb').write(r.content); dl += 1
- else: fail += 1
- except: fail += 1
- if (i+1) % 30 == 0:
- print(f' 进度: {i+1}/{len(data)} (下载{dl} 跳过{skip} 失败{fail})')
- time.sleep(0.15)
- print(f'\n完成! 下载{dl} 跳过{skip} 失败{fail}')
- # 列表
- files = sorted(os.listdir('voices'))
- print(f'voices/ 共 {len(files)} 个文件:')
- for f in files[:20]:
- print(f' {f}')
- if len(files) > 20:
- print(f' ... 等 {len(files)} 个')
|