招聘网站建设保定,wordpress 数据库连接,邯郸企业做网站,望野八年级上册通过使用藏语语音合成技术#xff0c;可以把一段藏文文字#xff0c;快速变成可用的音频#xff0c;用在短视频、朗读、课件或字幕配音里。本文介绍一套 Python 脚本#xff0c;可以直接合成藏语三大方言的语音#xff1a;
卫藏方言#xff1a;facebook/mms-tts-bod ([Hu…通过使用藏语语音合成技术可以把一段藏文文字快速变成可用的音频用在短视频、朗读、课件或字幕配音里。本文介绍一套 Python 脚本可以直接合成藏语三大方言的语音卫藏方言facebook/mms-tts-bod([Hugging Face][1])康巴方言facebook/mms-tts-khg([Hugging Face][2])安多方言facebook/mms-tts-adx([Hugging Face][3])它们都属于 Meta 的 MMS-TTS 系列并且在 Transformers4.33就能直接调用。([Hugging Face][3])语音合成技术可以用来干什么语言学习短视频配音每行一句藏文文字批量合成音频导入剪映等视频编辑工具配字幕、配画面快速出片。课件/朗读材料配音把教材段落放进文本文件生成“逐句音频 合并后的整段音频”课堂或自学都方便。多方言对比同一段藏文用卫藏/康巴/安多方言各合成一版做对比学习或演示。准备工作1安装依赖在命令行里执行pipinstall-U transformers accelerate torch soundfile numpy可选推荐但没有也能跑pipinstall-U scipy2准备一个文本文件每行一句例如sentences_tbt.txt每行写一条藏文句子空行会自动跳过也可以写代码来把文本分割为句子最简单的用法改 3 行就能跑新建文件tibetan_tts_easy.py复制下面全部代码。你只需要改最上面的三行方言、输入文件名、输出目录。这份脚本会同时生成逐句 wavadx_0001.wav、adx_0002.wav…合并后的整段 wavadx_full.wav并且强制输出PCM_16避免“播放器能播但剪映无声”的问题。fromtransformersimportVitsModel,AutoTokenizerimporttorchimportsoundfileassfimportnumpyasnpimportosfrommathimportgcd# 你只需要改这 3 行 DIALECTadx# bod(卫藏方言) / khg(康巴方言) / adx(安多方言)INPUT_FILEsentences_tbt.txtOUTPUT_DIRwavs_adx# # 句子之间停顿秒GAP_SECONDS0.2# 为了剪映/剪辑软件兼容强制写 PCM16WAV_SUBTYPEPCM_16# 可选统一采样率到 48000更适合剪映/PRTARGET_SR48000# 不想重采样可改成 NoneDIALECT_MODELS{bod:facebook/mms-tts-bod,# :contentReference[oaicite:4]{index4}khg:facebook/mms-tts-khg,# :contentReference[oaicite:5]{index5}adx:facebook/mms-tts-adx,# :contentReference[oaicite:6]{index6}}DEVICEcudaiftorch.cuda.is_available()elsecpudefread_sentences(path):out[]withopen(path,r,encodingutf-8)asf:forlineinf:tline.strip()ift:out.append(t)returnoutdefnormalize(audio,target_peak0.95):audioaudio.astype(np.float32,copyFalse)peakfloat(np.max(np.abs(audio))1e-12)ifpeak0:audionp.clip(audio/peak*target_peak,-1.0,1.0)returnaudiodefresample_if_needed(audio,orig_sr,target_sr):iftarget_srisNoneortarget_srorig_sr:returnaudio,orig_srtry:importscipy.signalexceptImportError:print([WARN] 未安装 scipy跳过重采样使用原采样率输出。)returnaudio,orig_sr ggcd(orig_sr,target_sr)uptarget_sr//g downorig_sr//g audio2scipy.signal.resample_poly(audio,up,down).astype(np.float32)returnaudio2,target_srdefmain():model_nameDIALECT_MODELS[DIALECT]print(fLoading{model_name}on{DEVICE}...)modelVitsModel.from_pretrained(model_name).to(DEVICE)tokenizerAutoTokenizer.from_pretrained(model_name)os.makedirs(OUTPUT_DIR,exist_okTrue)sentsread_sentences(INPUT_FILE)print(fLoaded{len(sents)}lines from{INPUT_FILE})ifnotsents:returnfull_pathos.path.join(OUTPUT_DIR,f{DIALECT}_full.wav)full_writerNonefull_srNonefori,textinenumerate(sents,start1):inputstokenizer(text,return_tensorspt).to(DEVICE)withtorch.no_grad():wavmodel(**inputs).waveform.squeeze().cpu().numpy()wavwav.reshape(-1)# 保证一维wavnormalize(wav)srint(model.config.sampling_rate)wav,srresample_if_needed(wav,sr,TARGET_SR)iffull_writerisNone:full_srsr gapnp.zeros(int(full_sr*GAP_SECONDS),dtypenp.float32)full_writersf.SoundFile(full_path,modew,sampleratefull_sr,channels1,subtypeWAV_SUBTYPE,formatWAV)print(FULL:,full_path)seg_pathos.path.join(OUTPUT_DIR,f{DIALECT}_{i:04d}.wav)sf.write(seg_path,wav,full_sr,subtypeWAV_SUBTYPE)full_writer.write(wav)ifGAP_SECONDS0:full_writer.write(gap)print(f[{i}/{len(sents)}]{seg_path})full_writer.close()print(Done.)if__name____main__:main()运行python tibetan_tts_easy.py导入剪映的最稳设置避免“无声”你只要用上面脚本输出的 WAVPCM_16一般直接导入就会有波形和声音。原因是模型页本身给的是波形输出示例但很多人保存时会写成 float WAV剪辑软件兼容性不稳定而 MMS 模型在 Transformers 4.33 可直接推理这点在模型页也写得很清楚。([Hugging Face][3])常见问题1能不能选“男声/女声/不同音色”就这三个 MMS 藏语方言 checkpoint 来说你可以理解为每个方言模型基本就是一个固定声音风格。它们主要提供“能把文本读出来”的能力而不是“内置很多音色可选”的商业 TTS 音色库。([Hugging Face][3])2能不能控制语速对非技术用户最稳的方式是合成完再变速不会影响能不能合成。例如把音频加速 1.15 倍ffmpeg -y -i input.wav -filter:aatempo1.15output.wav3同一句话每次合成略有差别正常吗正常。VITS 合成本身有非确定性如果你希望“每次一样”可以固定随机种子Transformers 的 VITS 文档也专门提醒了这点。([Hugging Face][4])使用许可提醒建议写在文末避免踩坑这几个模型页面都标注了许可证为CC BY-NC 4.0非商业。如果你用于商业用途付费课程、付费 App、广告变现等务必先确认许可范围。([Hugging Face][3])