不能否认,微软Azure在TTS(text-to-speech文字转语音)这个人工智能细分领域的影响力是统治级的,一如ChatGPT在NLP领域的随心所欲,予取予求。君不见几乎所有的抖音营销号口播均采用微软的语音合成技术,其影响力由此可见一斑,仅有的白璧微瑕之处就是价格略高,虽然国内也可以使用科大讯飞语音合成进行平替,但我们只想要最好的那一个,本次我们使用免费的开源库edge-tts来实现文本转语音操作,薅微软edge的羊毛。
首先安装edge-tts库:
pip3 install edge-tts
安装成功后,直接在终端运行edge-tts命令:
edge-tts
显示帮助菜单即代表安装成功:
? Downloads edge-tts usage: edge-tts [-h] [-t TEXT] [-f FILE] [-v VOICE] [-l] [--rate RATE] [--volume VOLUME] [-O OVERLAPPING] [--write-media WRITE_MEDIA] [--write-subtitles WRITE_SUBTITLES] [--proxy PROXY]
? Downloads edge-tts
usage: edge-tts [-h] [-t TEXT] [-f FILE] [-v VOICE] [-l] [--rate RATE] [--volume VOLUME] [-O OVERLAPPING]
[--write-media WRITE_MEDIA] [--write-subtitles WRITE_SUBTITLES] [--proxy PROXY]
随后输入命令:
edge-tts --list-voices
该命令可以将Edge浏览器中,内置的语言角色列表列出来:
Name: af-ZA-AdriNeural Gender: Female Name: af-ZA-WillemNeural Gender: Male Name: am-ET-AmehaNeural Gender: Male Name: am-ET-MekdesNeural Gender: Female Name: ar-AE-FatimaNeural Gender: Female Name: ar-AE-HamdanNeural Gender: Male Name: ar-BH-AliNeural Gender: Male Name: ar-BH-LailaNeural Gender: Female Name: ar-DZ-AminaNeural Gender: Female Name: ar-DZ-IsmaelNeural Gender: Male Name: ar-EG-SalmaNeural Gender: Female Name: ar-EG-ShakirNeural Gender: Male Name: ar-IQ-BasselNeural Gender: Male Name: ar-IQ-RanaNeural Gender: Female Name: ar-JO-SanaNeural Gender: Female Name: ar-JO-TaimNeural Gender: Male Name: ar-KW-FahedNeural Gender: Male Name: ar-KW-NouraNeural Gender: Female Name: ar-LB-LaylaNeural Gender: Female Name: ar-LB-RamiNeural Gender: Male Name: ar-LY-ImanNeural Gender: Female Name: ar-LY-OmarNeural Gender: Male Name: ar-MA-JamalNeural Gender: Male Name: ar-MA-MounaNeural Gender: Female Name: ar-OM-AbdullahNeural Gender: Male Name: ar-OM-AyshaNeural Gender: Female Name: ar-QA-AmalNeural Gender: Female Name: ar-QA-MoazNeural Gender: Male Name: ar-SA-HamedNeural Gender: Male Name: ar-SA-ZariyahNeural Gender: Female Name: ar-SY-AmanyNeural Gender: Female Name: ar-SY-LaithNeural Gender: Male Name: ar-TN-HediNeural Gender: Male Name: ar-TN-ReemNeural Gender: Female Name: ar-YE-MaryamNeural Gender: Female Name: ar-YE-SalehNeural Gender: Male Name: az-AZ-BabekNeural Gender: Male Name: az-AZ-BanuNeural Gender: Female Name: bg-BG-BorislavNeural Gender: Male Name: bg-BG-KalinaNeural Gender: Female Name: bn-BD-NabanitaNeural Gender: Female Name: bn-BD-PradeepNeural Gender: Male Name: bn-IN-BashkarNeural Gender: Male Name: bn-IN-TanishaaNeural Gender: Female Name: bs-BA-GoranNeural Gender: Male Name: bs-BA-VesnaNeural Gender: Female Name: ca-ES-EnricNeural Gender: Male Name: ca-ES-JoanaNeural Gender: Female Name: cs-CZ-AntoninNeural Gender: Male Name: cs-CZ-VlastaNeural Gender: Female Name: cy-GB-AledNeural Gender: Male Name: cy-GB-NiaNeural Gender: Female Name: da-DK-ChristelNeural Gender: Female Name: da-DK-JeppeNeural Gender: Male Name: de-AT-IngridNeural Gender: Female Name: de-AT-JonasNeural Gender: Male Name: de-CH-JanNeural Gender: Male Name: de-CH-LeniNeural Gender: Female Name: de-DE-AmalaNeural Gender: Female Name: de-DE-ConradNeural Gender: Male Name: de-DE-KatjaNeural Gender: Female Name: de-DE-KillianNeural Gender: Male Name: el-GR-AthinaNeural Gender: Female Name: el-GR-NestorasNeural Gender: Male Name: en-AU-NatashaNeural Gender: Female Name: en-AU-WilliamNeural Gender: Male Name: en-CA-ClaraNeural Gender: Female Name: en-CA-LiamNeural Gender: Male Name: en-GB-LibbyNeural Gender: Female Name: en-GB-MaisieNeural Gender: Female Name: en-GB-RyanNeural Gender: Male Name: en-GB-SoniaNeural Gender: Female Name: en-GB-ThomasNeural Gender: Male Name: en-HK-SamNeural Gender: Male Name: en-HK-YanNeural Gender: Female Name: en-IE-ConnorNeural Gender: Male Name: en-IE-EmilyNeural Gender: Female Name: en-IN-NeerjaExpressiveNeural Gender: Female Name: en-IN-NeerjaNeural Gender: Female Name: en-IN-PrabhatNeural Gender: Male Name: en-KE-AsiliaNeural Gender: Female Name: en-KE-ChilembaNeural Gender: Male Name: en-NG-AbeoNeural Gender: Male Name: en-NG-EzinneNeural Gender: Female Name: en-NZ-MitchellNeural Gender: Male Name: en-NZ-MollyNeural Gender: Female Name: en-PH-JamesNeural Gender: Male Name: en-PH-RosaNeural Gender: Female Name: en-SG-LunaNeural Gender: Female Name: en-SG-WayneNeural Gender: Male Name: en-TZ-ElimuNeural Gender: Male Name: en-TZ-ImaniNeural Gender: Female Name: en-US-AnaNeural Gender: Female Name: en-US-AriaNeural Gender: Female Name: en-US-ChristopherNeural Gender: Male Name: en-US-EricNeural Gender: Male Name: en-US-GuyNeural Gender: Male Name: en-US-JennyNeural Gender: Female Name: en-US-MichelleNeural Gender: Female Name: en-US-RogerNeural Gender: Male Name: en-US-SteffanNeural Gender: Male Name: en-ZA-LeahNeural Gender: Female Name: en-ZA-LukeNeural Gender: Male Name: es-AR-ElenaNeural Gender: Female Name: es-AR-TomasNeural Gender: Male Name: es-BO-MarceloNeural Gender: Male Name: es-BO-SofiaNeural Gender: Female Name: es-CL-CatalinaNeural Gender: Female Name: es-CL-LorenzoNeural Gender: Male Name: es-CO-GonzaloNeural Gender: Male Name: es-CO-SalomeNeural Gender: Female Name: es-CR-JuanNeural Gender: Male Name: es-CR-MariaNeural Gender: Female Name: es-CU-BelkysNeural Gender: Female Name: es-CU-ManuelNeural Gender: Male Name: es-DO-EmilioNeural Gender: Male Name: es-DO-RamonaNeural Gender: Female Name: es-EC-AndreaNeural Gender: Female Name: es-EC-LuisNeural Gender: Male Name: es-ES-AlvaroNeural Gender: Male Name: es-ES-ElviraNeural Gender: Female Name: es-ES-ManuelEsCUNeural Gender: Male Name: es-GQ-JavierNeural Gender: Male Name: es-GQ-TeresaNeural Gender: Female Name: es-GT-AndresNeural Gender: Male Name: es-GT-MartaNeural Gender: Female Name: es-HN-CarlosNeural Gender: Male Name: es-HN-KarlaNeural Gender: Female Name: es-MX-DaliaNeural Gender: Female Name: es-MX-JorgeNeural Gender: Male Name: es-MX-LorenzoEsCLNeural Gender: Male Name: es-NI-FedericoNeural Gender: Male Name: es-NI-YolandaNeural Gender: Female Name: es-PA-MargaritaNeural Gender: Female Name: es-PA-RobertoNeural Gender: Male Name: es-PE-AlexNeural Gender: Male Name: es-PE-CamilaNeural Gender: Female Name: es-PR-KarinaNeural Gender: Female Name: es-PR-VictorNeural Gender: Male Name: es-PY-MarioNeural Gender: Male Name: es-PY-TaniaNeural Gender: Female Name: es-SV-LorenaNeural Gender: Female Name: es-SV-RodrigoNeural Gender: Male Name: es-US-AlonsoNeural Gender: Male Name: es-US-PalomaNeural Gender: Female Name: es-UY-MateoNeural Gender: Male Name: es-UY-ValentinaNeural Gender: Female Name: es-VE-PaolaNeural Gender: Female Name: es-VE-SebastianNeural Gender: Male Name: et-EE-AnuNeural Gender: Female Name: et-EE-KertNeural Gender: Male Name: fa-IR-DilaraNeural Gender: Female Name: fa-IR-FaridNeural Gender: Male Name: fi-FI-HarriNeural Gender: Male Name: fi-FI-NooraNeural Gender: Female Name: fil-PH-AngeloNeural Gender: Male Name: fil-PH-BlessicaNeural Gender: Female Name: fr-BE-CharlineNeural Gender: Female Name: fr-BE-GerardNeural Gender: Male Name: fr-CA-AntoineNeural Gender: Male Name: fr-CA-JeanNeural Gender: Male Name: fr-CA-SylvieNeural Gender: Female Name: fr-CH-ArianeNeural Gender: Female Name: fr-CH-FabriceNeural Gender: Male Name: fr-FR-DeniseNeural Gender: Female Name: fr-FR-EloiseNeural Gender: Female Name: fr-FR-HenriNeural Gender: Male Name: ga-IE-ColmNeural Gender: Male Name: ga-IE-OrlaNeural Gender: Female Name: gl-ES-RoiNeural Gender: Male Name: gl-ES-SabelaNeural Gender: Female Name: gu-IN-DhwaniNeural Gender: Female Name: gu-IN-NiranjanNeural Gender: Male Name: he-IL-AvriNeural Gender: Male Name: he-IL-HilaNeural Gender: Female Name: hi-IN-MadhurNeural Gender: Male Name: hi-IN-SwaraNeural Gender: Female Name: hr-HR-GabrijelaNeural Gender: Female Name: hr-HR-SreckoNeural Gender: Male Name: hu-HU-NoemiNeural Gender: Female Name: hu-HU-TamasNeural Gender: Male Name: id-ID-ArdiNeural Gender: Male Name: id-ID-GadisNeural Gender: Female Name: is-IS-GudrunNeural Gender: Female Name: is-IS-GunnarNeural Gender: Male Name: it-IT-DiegoNeural Gender: Male Name: it-IT-ElsaNeural Gender: Female Name: it-IT-IsabellaNeural Gender: Female Name: ja-JP-KeitaNeural Gender: Male Name: ja-JP-NanamiNeural Gender: Female Name: jv-ID-DimasNeural Gender: Male Name: jv-ID-SitiNeural Gender: Female Name: ka-GE-EkaNeural Gender: Female Name: ka-GE-GiorgiNeural Gender: Male Name: kk-KZ-AigulNeural Gender: Female Name: kk-KZ-DauletNeural Gender: Male Name: km-KH-PisethNeural Gender: Male Name: km-KH-SreymomNeural Gender: Female Name: kn-IN-GaganNeural Gender: Male Name: kn-IN-SapnaNeural Gender: Female Name: ko-KR-InJoonNeural Gender: Male Name: ko-KR-SunHiNeural Gender: Female Name: lo-LA-ChanthavongNeural Gender: Male Name: lo-LA-KeomanyNeural Gender: Female Name: lt-LT-LeonasNeural Gender: Male Name: lt-LT-OnaNeural Gender: Female Name: lv-LV-EveritaNeural Gender: Female Name: lv-LV-NilsNeural Gender: Male Name: mk-MK-AleksandarNeural Gender: Male Name: mk-MK-MarijaNeural Gender: Female Name: ml-IN-MidhunNeural Gender: Male Name: ml-IN-SobhanaNeural Gender: Female Name: mn-MN-BataaNeural Gender: Male Name: mn-MN-YesuiNeural Gender: Female Name: mr-IN-AarohiNeural Gender: Female Name: mr-IN-ManoharNeural Gender: Male Name: ms-MY-OsmanNeural Gender: Male Name: ms-MY-YasminNeural Gender: Female Name: mt-MT-GraceNeural Gender: Female Name: mt-MT-JosephNeural Gender: Male Name: my-MM-NilarNeural Gender: Female Name: my-MM-ThihaNeural Gender: Male Name: nb-NO-FinnNeural Gender: Male Name: nb-NO-PernilleNeural Gender: Female Name: ne-NP-HemkalaNeural Gender: Female Name: ne-NP-SagarNeural Gender: Male Name: nl-BE-ArnaudNeural Gender: Male Name: nl-BE-DenaNeural Gender: Female Name: nl-NL-ColetteNeural Gender: Female Name: nl-NL-FennaNeural Gender: Female Name: nl-NL-MaartenNeural Gender: Male Name: pl-PL-MarekNeural Gender: Male Name: pl-PL-ZofiaNeural Gender: Female Name: ps-AF-GulNawazNeural Gender: Male Name: ps-AF-LatifaNeural Gender: Female Name: pt-BR-AntonioNeural Gender: Male Name: pt-BR-FranciscaNeural Gender: Female Name: pt-PT-DuarteNeural Gender: Male Name: pt-PT-RaquelNeural Gender: Female Name: ro-RO-AlinaNeural Gender: Female Name: ro-RO-EmilNeural Gender: Male Name: ru-RU-DmitryNeural Gender: Male Name: ru-RU-SvetlanaNeural Gender: Female Name: si-LK-SameeraNeural Gender: Male Name: si-LK-ThiliniNeural Gender: Female Name: sk-SK-LukasNeural Gender: Male Name: sk-SK-ViktoriaNeural Gender: Female Name: sl-SI-PetraNeural Gender: Female Name: sl-SI-RokNeural Gender: Male Name: so-SO-MuuseNeural Gender: Male Name: so-SO-UbaxNeural Gender: Female Name: sq-AL-AnilaNeural Gender: Female Name: sq-AL-IlirNeural Gender: Male Name: sr-RS-NicholasNeural Gender: Male Name: sr-RS-SophieNeural Gender: Female Name: su-ID-JajangNeural Gender: Male Name: su-ID-TutiNeural Gender: Female Name: sv-SE-MattiasNeural Gender: Male Name: sv-SE-SofieNeural Gender: Female Name: sw-KE-RafikiNeural Gender: Male Name: sw-KE-ZuriNeural Gender: Female Name: sw-TZ-DaudiNeural Gender: Male Name: sw-TZ-RehemaNeural Gender: Female Name: ta-IN-PallaviNeural Gender: Female Name: ta-IN-ValluvarNeural Gender: Male Name: ta-LK-KumarNeural Gender: Male Name: ta-LK-SaranyaNeural Gender: Female Name: ta-MY-KaniNeural Gender: Female Name: ta-MY-SuryaNeural Gender: Male Name: ta-SG-AnbuNeural Gender: Male Name: ta-SG-VenbaNeural Gender: Female Name: te-IN-MohanNeural Gender: Male Name: te-IN-ShrutiNeural Gender: Female Name: th-TH-NiwatNeural Gender: Male Name: th-TH-PremwadeeNeural Gender: Female Name: tr-TR-AhmetNeural Gender: Male Name: tr-TR-EmelNeural Gender: Female Name: uk-UA-OstapNeural Gender: Male Name: uk-UA-PolinaNeural Gender: Female Name: ur-IN-GulNeural Gender: Female Name: ur-IN-SalmanNeural Gender: Male Name: ur-PK-AsadNeural Gender: Male Name: ur-PK-UzmaNeural Gender: Female Name: uz-UZ-MadinaNeural Gender: Female Name: uz-UZ-SardorNeural Gender: Male Name: vi-VN-HoaiMyNeural Gender: Female Name: vi-VN-NamMinhNeural Gender: Male Name: zh-CN-XiaoxiaoNeural Gender: Female Name: zh-CN-XiaoyiNeural Gender: Female Name: zh-CN-YunjianNeural Gender: Male Name: zh-CN-YunxiNeural Gender: Male Name: zh-CN-YunxiaNeural Gender: Male Name: zh-CN-YunyangNeural Gender: Male Name: zh-CN-liaoning-XiaobeiNeural Gender: Female Name: zh-CN-shaanxi-XiaoniNeural Gender: Female Name: zh-HK-HiuGaaiNeural Gender: Female Name: zh-HK-HiuMaanNeural Gender: Female Name: zh-HK-WanLungNeural Gender: Male Name: zh-TW-HsiaoChenNeural Gender: Female Name: zh-TW-HsiaoYuNeural Gender: Female Name: zh-TW-YunJheNeural Gender: Male Name: zu-ZA-ThandoNeural Gender: Female Name: zu-ZA-ThembaNeural Gender: Male
Name: af-ZA-AdriNeural
Gender: Female
Name: af-ZA-WillemNeural
Gender: Male
Name: am-ET-AmehaNeural
Name: am-ET-MekdesNeural
Name: ar-AE-FatimaNeural
Name: ar-AE-HamdanNeural
Name: ar-BH-AliNeural
Name: ar-BH-LailaNeural
Name: ar-DZ-AminaNeural
Name: ar-DZ-IsmaelNeural
Name: ar-EG-SalmaNeural
Name: ar-EG-ShakirNeural
Name: ar-IQ-BasselNeural
Name: ar-IQ-RanaNeural
Name: ar-JO-SanaNeural
Name: ar-JO-TaimNeural
Name: ar-KW-FahedNeural
Name: ar-KW-NouraNeural
Name: ar-LB-LaylaNeural
Name: ar-LB-RamiNeural
Name: ar-LY-ImanNeural
Name: ar-LY-OmarNeural
Name: ar-MA-JamalNeural
Name: ar-MA-MounaNeural
Name: ar-OM-AbdullahNeural
Name: ar-OM-AyshaNeural
Name: ar-QA-AmalNeural
Name: ar-QA-MoazNeural
Name: ar-SA-HamedNeural
Name: ar-SA-ZariyahNeural
Name: ar-SY-AmanyNeural
Name: ar-SY-LaithNeural
Name: ar-TN-HediNeural
Name: ar-TN-ReemNeural
Name: ar-YE-MaryamNeural
Name: ar-YE-SalehNeural
Name: az-AZ-BabekNeural
Name: az-AZ-BanuNeural
Name: bg-BG-BorislavNeural
Name: bg-BG-KalinaNeural
Name: bn-BD-NabanitaNeural
Name: bn-BD-PradeepNeural
Name: bn-IN-BashkarNeural
Name: bn-IN-TanishaaNeural
Name: bs-BA-GoranNeural
Name: bs-BA-VesnaNeural
Name: ca-ES-EnricNeural
Name: ca-ES-JoanaNeural
Name: cs-CZ-AntoninNeural
Name: cs-CZ-VlastaNeural
Name: cy-GB-AledNeural
Name: cy-GB-NiaNeural
Name: da-DK-ChristelNeural
Name: da-DK-JeppeNeural
Name: de-AT-IngridNeural
Name: de-AT-JonasNeural
Name: de-CH-JanNeural
Name: de-CH-LeniNeural
Name: de-DE-AmalaNeural
Name: de-DE-ConradNeural
Name: de-DE-KatjaNeural
Name: de-DE-KillianNeural
Name: el-GR-AthinaNeural
Name: el-GR-NestorasNeural
Name: en-AU-NatashaNeural
Name: en-AU-WilliamNeural
Name: en-CA-ClaraNeural
Name: en-CA-LiamNeural
Name: en-GB-LibbyNeural
Name: en-GB-MaisieNeural
Name: en-GB-RyanNeural
Name: en-GB-SoniaNeural
Name: en-GB-ThomasNeural
Name: en-HK-SamNeural
Name: en-HK-YanNeural
Name: en-IE-ConnorNeural
Name: en-IE-EmilyNeural
Name: en-IN-NeerjaExpressiveNeural
Name: en-IN-NeerjaNeural
Name: en-IN-PrabhatNeural
Name: en-KE-AsiliaNeural
Name: en-KE-ChilembaNeural
Name: en-NG-AbeoNeural
Name: en-NG-EzinneNeural
Name: en-NZ-MitchellNeural
Name: en-NZ-MollyNeural
Name: en-PH-JamesNeural
Name: en-PH-RosaNeural
Name: en-SG-LunaNeural
Name: en-SG-WayneNeural
Name: en-TZ-ElimuNeural
Name: en-TZ-ImaniNeural
Name: en-US-AnaNeural
Name: en-US-AriaNeural
Name: en-US-ChristopherNeural
Name: en-US-EricNeural
Name: en-US-GuyNeural
Name: en-US-JennyNeural
Name: en-US-MichelleNeural
Name: en-US-RogerNeural
Name: en-US-SteffanNeural
Name: en-ZA-LeahNeural
Name: en-ZA-LukeNeural
Name: es-AR-ElenaNeural
Name: es-AR-TomasNeural
Name: es-BO-MarceloNeural
Name: es-BO-SofiaNeural
Name: es-CL-CatalinaNeural
Name: es-CL-LorenzoNeural
Name: es-CO-GonzaloNeural
Name: es-CO-SalomeNeural
Name: es-CR-JuanNeural
Name: es-CR-MariaNeural
Name: es-CU-BelkysNeural
Name: es-CU-ManuelNeural
Name: es-DO-EmilioNeural
Name: es-DO-RamonaNeural
Name: es-EC-AndreaNeural
Name: es-EC-LuisNeural
Name: es-ES-AlvaroNeural
Name: es-ES-ElviraNeural
Name: es-ES-ManuelEsCUNeural
Name: es-GQ-JavierNeural
Name: es-GQ-TeresaNeural
Name: es-GT-AndresNeural
Name: es-GT-MartaNeural
Name: es-HN-CarlosNeural
Name: es-HN-KarlaNeural
Name: es-MX-DaliaNeural
Name: es-MX-JorgeNeural
Name: es-MX-LorenzoEsCLNeural
Name: es-NI-FedericoNeural
Name: es-NI-YolandaNeural
Name: es-PA-MargaritaNeural
Name: es-PA-RobertoNeural
Name: es-PE-AlexNeural
Name: es-PE-CamilaNeural
Name: es-PR-KarinaNeural
Name: es-PR-VictorNeural
Name: es-PY-MarioNeural
Name: es-PY-TaniaNeural
Name: es-SV-LorenaNeural
Name: es-SV-RodrigoNeural
Name: es-US-AlonsoNeural
Name: es-US-PalomaNeural
Name: es-UY-MateoNeural
Name: es-UY-ValentinaNeural
Name: es-VE-PaolaNeural
Name: es-VE-SebastianNeural
Name: et-EE-AnuNeural
Name: et-EE-KertNeural
Name: fa-IR-DilaraNeural
Name: fa-IR-FaridNeural
Name: fi-FI-HarriNeural
Name: fi-FI-NooraNeural
Name: fil-PH-AngeloNeural
Name: fil-PH-BlessicaNeural
Name: fr-BE-CharlineNeural
Name: fr-BE-GerardNeural
Name: fr-CA-AntoineNeural
Name: fr-CA-JeanNeural
Name: fr-CA-SylvieNeural
Name: fr-CH-ArianeNeural
Name: fr-CH-FabriceNeural
Name: fr-FR-DeniseNeural
Name: fr-FR-EloiseNeural
Name: fr-FR-HenriNeural
Name: ga-IE-ColmNeural
Name: ga-IE-OrlaNeural
Name: gl-ES-RoiNeural
Name: gl-ES-SabelaNeural
Name: gu-IN-DhwaniNeural
Name: gu-IN-NiranjanNeural
Name: he-IL-AvriNeural
Name: he-IL-HilaNeural
Name: hi-IN-MadhurNeural
Name: hi-IN-SwaraNeural
Name: hr-HR-GabrijelaNeural
Name: hr-HR-SreckoNeural
Name: hu-HU-NoemiNeural
Name: hu-HU-TamasNeural
Name: id-ID-ArdiNeural
Name: id-ID-GadisNeural
Name: is-IS-GudrunNeural
Name: is-IS-GunnarNeural
Name: it-IT-DiegoNeural
Name: it-IT-ElsaNeural
Name: it-IT-IsabellaNeural
Name: ja-JP-KeitaNeural
Name: ja-JP-NanamiNeural
Name: jv-ID-DimasNeural
Name: jv-ID-SitiNeural
Name: ka-GE-EkaNeural
Name: ka-GE-GiorgiNeural
Name: kk-KZ-AigulNeural
Name: kk-KZ-DauletNeural
Name: km-KH-PisethNeural
Name: km-KH-SreymomNeural
Name: kn-IN-GaganNeural
Name: kn-IN-SapnaNeural
Name: ko-KR-InJoonNeural
Name: ko-KR-SunHiNeural
Name: lo-LA-ChanthavongNeural
Name: lo-LA-KeomanyNeural
Name: lt-LT-LeonasNeural
Name: lt-LT-OnaNeural
Name: lv-LV-EveritaNeural
Name: lv-LV-NilsNeural
Name: mk-MK-AleksandarNeural
Name: mk-MK-MarijaNeural
Name: ml-IN-MidhunNeural
Name: ml-IN-SobhanaNeural
Name: mn-MN-BataaNeural
Name: mn-MN-YesuiNeural
Name: mr-IN-AarohiNeural
Name: mr-IN-ManoharNeural
Name: ms-MY-OsmanNeural
Name: ms-MY-YasminNeural
Name: mt-MT-GraceNeural
Name: mt-MT-JosephNeural
Name: my-MM-NilarNeural
Name: my-MM-ThihaNeural
Name: nb-NO-FinnNeural
Name: nb-NO-PernilleNeural
Name: ne-NP-HemkalaNeural
Name: ne-NP-SagarNeural
Name: nl-BE-ArnaudNeural
Name: nl-BE-DenaNeural
Name: nl-NL-ColetteNeural
Name: nl-NL-FennaNeural
Name: nl-NL-MaartenNeural
Name: pl-PL-MarekNeural
Name: pl-PL-ZofiaNeural
Name: ps-AF-GulNawazNeural
Name: ps-AF-LatifaNeural
Name: pt-BR-AntonioNeural
Name: pt-BR-FranciscaNeural
Name: pt-PT-DuarteNeural
Name: pt-PT-RaquelNeural
Name: ro-RO-AlinaNeural
Name: ro-RO-EmilNeural
Name: ru-RU-DmitryNeural
Name: ru-RU-SvetlanaNeural
Name: si-LK-SameeraNeural
Name: si-LK-ThiliniNeural
Name: sk-SK-LukasNeural
Name: sk-SK-ViktoriaNeural
Name: sl-SI-PetraNeural
Name: sl-SI-RokNeural
Name: so-SO-MuuseNeural
Name: so-SO-UbaxNeural
Name: sq-AL-AnilaNeural
Name: sq-AL-IlirNeural
Name: sr-RS-NicholasNeural
Name: sr-RS-SophieNeural
Name: su-ID-JajangNeural
Name: su-ID-TutiNeural
Name: sv-SE-MattiasNeural
Name: sv-SE-SofieNeural
Name: sw-KE-RafikiNeural
Name: sw-KE-ZuriNeural
Name: sw-TZ-DaudiNeural
Name: sw-TZ-RehemaNeural
Name: ta-IN-PallaviNeural
Name: ta-IN-ValluvarNeural
Name: ta-LK-KumarNeural
Name: ta-LK-SaranyaNeural
Name: ta-MY-KaniNeural
Name: ta-MY-SuryaNeural
Name: ta-SG-AnbuNeural
Name: ta-SG-VenbaNeural
Name: te-IN-MohanNeural
Name: te-IN-ShrutiNeural
Name: th-TH-NiwatNeural
Name: th-TH-PremwadeeNeural
Name: tr-TR-AhmetNeural
Name: tr-TR-EmelNeural
Name: uk-UA-OstapNeural
Name: uk-UA-PolinaNeural
Name: ur-IN-GulNeural
Name: ur-IN-SalmanNeural
Name: ur-PK-AsadNeural
Name: ur-PK-UzmaNeural
Name: uz-UZ-MadinaNeural
Name: uz-UZ-SardorNeural
Name: vi-VN-HoaiMyNeural
Name: vi-VN-NamMinhNeural
Name: zh-CN-XiaoxiaoNeural
Name: zh-CN-XiaoyiNeural
Name: zh-CN-YunjianNeural
Name: zh-CN-YunxiNeural
Name: zh-CN-YunxiaNeural
Name: zh-CN-YunyangNeural
Name: zh-CN-liaoning-XiaobeiNeural
Name: zh-CN-shaanxi-XiaoniNeural
Name: zh-HK-HiuGaaiNeural
Name: zh-HK-HiuMaanNeural
Name: zh-HK-WanLungNeural
Name: zh-TW-HsiaoChenNeural
Name: zh-TW-HsiaoYuNeural
Name: zh-TW-YunJheNeural
Name: zu-ZA-ThandoNeural
Name: zu-ZA-ThembaNeural
一望而知,几乎支持所有主流的通用语,Gender字段为合成语音的性别,Male代表男性,Female代表女性,zh开头的就是中文语音角色,这里以微软的小伊为例子:
edge-tts --voice zh-CN-XiaoyiNeural --text "你好啊,我是智能语音助手" --write-media hello_in_cn.mp3
该命令含义是通过zh-CN-XiaoyiNeural角色合成语音:"你好啊,我是智能语音助手"的内容,随后将音频流写入hello_in_cn.mp3文件。
程序返回:
Downloads edge-tts --voice zh-CN-XiaoyiNeural --text "你好啊,我是智能语音助手" --write-media hello_in_cn.mp3 WEBVTT 00:00:00.100 --> 00:00:00.525 你好 00:00:00.525 --> 00:00:00.912 啊 00:00:01.050 --> 00:00:01.238 我 00:00:01.238 --> 00:00:01.375 是 00:00:01.387 --> 00:00:01.700 智能 00:00:01.700 --> 00:00:02.050 语音 00:00:02.062 --> 00:00:02.550 助手
Downloads edge-tts --voice zh-CN-XiaoyiNeural --text "你好啊,我是智能语音助手" --write-media hello_in_cn.mp3
WEBVTT
00:00:00.100 --> 00:00:00.525
你好
00:00:00.525 --> 00:00:00.912
啊
00:00:01.050 --> 00:00:01.238
我
00:00:01.238 --> 00:00:01.375
是
00:00:01.387 --> 00:00:01.700
智能
00:00:01.700 --> 00:00:02.050
语音
00:00:02.062 --> 00:00:02.550
助手
程序会自动将时间轴和语音文本匹配输出,如此一来,连字幕文件也有了,可谓是一举两得,一箭双雕。
与此同时,我们也可以调整合成语音的语速:
edge-tts --rate=-50% --voice zh-CN-XiaoyiNeural --text "你好啊,我是智能语音助手" --write-media hello_in_cn.mp3
--rate参数可以通过加号或者减号同步加快或者减慢合成语音的语速。
亦或者,调整合成语音的音量:
edge-tts --volume=-50% --voice zh-CN-XiaoyiNeural --text "你好啊,我是智能语音助手" --write-media hello_in_cn.mp3
--volume参数可以调整语音的音量。
遗憾的是,和微软Azure官方的语音合成库相比,开源的语音合成库并不支持基于标记语言 (SSML)的语音调优,比如语调、情绪的调整,但这毕竟是免费的,要求也不能太高了。
除了通过命令进行语音合成,edge-tts也支持在Python脚本,编辑test.py文件:
import asyncio import edge_tts TEXT = "你好哟,我是智能语音助手,小伊" VOICE = "zh-CN-XiaoyiNeural" OUTPUT_FILE = "/Users/liuyue/Downloads/test.mp3" async def _main() -> None: communicate = edge_tts.Communicate(TEXT, VOICE) await communicate.save(OUTPUT_FILE) if __name__ == "__main__": asyncio.run(_main())
import asyncio
import edge_tts
TEXT = "你好哟,我是智能语音助手,小伊"
VOICE = "zh-CN-XiaoyiNeural"
OUTPUT_FILE = "/Users/liuyue/Downloads/test.mp3"
async def _main() -> None:
communicate = edge_tts.Communicate(TEXT, VOICE)
await communicate.save(OUTPUT_FILE)
if __name__ == "__main__":
asyncio.run(_main())
这里我们直接通过异步模式调用communicate实例的save方法,就可以并发异步生成语音合成的音频文件,非常方便。
也可以通过语音管理库来自动寻找我们需要的语言:
import asyncio import random import edge_tts from edge_tts import VoicesManager TEXT = "中文语音测试" OUTPUT_FILE ="china.mp3" async def _main() -> None: voices = await VoicesManager.create() voice = voices.find(Gender="Female", Language="zh") communicate = edge_tts.Communicate(TEXT, random.choice(voice)["Name"]) await communicate.save(OUTPUT_FILE) if __name__ == "__main__": asyncio.run(_main())
import random
from edge_tts import VoicesManager
TEXT = "中文语音测试"
OUTPUT_FILE ="china.mp3"
voices = await VoicesManager.create()
voice = voices.find(Gender="Female", Language="zh")
communicate = edge_tts.Communicate(TEXT, random.choice(voice)["Name"])
这里通过内置的VoicesManager库来随机挑选中文语音角色完成语音合成操作。
除此之外,也可以通过脚本将语音流和字母同步进行生成:
import asyncio import edge_tts TEXT = "这里是语音流测试" VOICE = "zh-CN-XiaoyiNeural" OUTPUT_FILE = "test.mp3" WEBVTT_FILE = "test.vtt" async def _main() -> None: communicate = edge_tts.Communicate(TEXT, VOICE) submaker = edge_tts.SubMaker() with open(OUTPUT_FILE, "wb") as file: async for chunk in communicate.stream(): if chunk["type"] == "audio": file.write(chunk["data"]) elif chunk["type"] == "WordBoundary": submaker.create_sub((chunk["offset"], chunk["duration"]), chunk["text"]) with open(WEBVTT_FILE, "w", encoding="utf-8") as file: file.write(submaker.generate_subs()) if __name__ == "__main__": asyncio.run(_main())
TEXT = "这里是语音流测试"
OUTPUT_FILE = "test.mp3"
WEBVTT_FILE = "test.vtt"
submaker = edge_tts.SubMaker()
with open(OUTPUT_FILE, "wb") as file:
async for chunk in communicate.stream():
if chunk["type"] == "audio":
file.write(chunk["data"])
elif chunk["type"] == "WordBoundary":
submaker.create_sub((chunk["offset"], chunk["duration"]), chunk["text"])
with open(WEBVTT_FILE, "w", encoding="utf-8") as file:
file.write(submaker.generate_subs())
这里异步调用之后,音频会写入test.mp3,而字幕文件则会写入test.vtt。后续则可以通过ffmpeg将生成的字幕文件叠加到视频中即可,请参见:基于Python3(Autosub)以及Ffmpeg配合GoogleTranslation(谷歌翻译)为你的影片实现双语版字幕(逐字稿)
开源语音合成edge-tts库可以提高语音合成效率,并且极大地降低了语音合成门槛,为自动化视频剪辑铺平了道路,未来结合基于Stable-Diffusion算法的AI绘图框架,人工智能AI一键式绘制、配音、上字幕的一条龙服务指日可待。
原文链接:https://www.cnblogs.com/v3ucn/p/17186731.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728