Microsoft TTS(text-to-speech) text-to-speech free open source library edge-tts speech synthesis practice (Python3.10)

It cannot be denied that the influence of Microsoft Azure in the TTS(text-to-speech text-to-speech) segment of artificial intelligence is dominant, just as ChatGPT is in the NLP field as it can do whatever it wants. Don't you see that almost all Douyin marketing accounts use Microsoft's speech synthesis technology, and its influence can be seen from this. The only flaw is that the price is slightly higher, although it can also be used in China. iFLYTEK Speech Synthesis Replacement, but we only want the best one. This time we use the free open source library edge-tts to realize the text-to-speech operation and grab the wool of Microsoft edge.

TTS text-to-speech basic usage

First install the edge-tts library:

pip3 install edge-tts

After the installation is successful, run the edge-tts command directly on the terminal:

edge-tts

The help menu is displayed to indicate a successful installation:

➜  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]

Then enter the command:

edge-tts --list-voices

This command can list the built-in language roles in the Edge browser:

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

It can be seen at a glance that almost all mainstream lingua francas are supported. The Gender field is the gender of the synthesized voice, Male means male, Female means female, and characters starting with zh are Chinese voice characters. Here is an example of Xiaoyi from Microsoft:

edge-tts --voice zh-CN-XiaoyiNeural --text "Hello, I am a smart voice assistant" --write-media hello_in_cn.mp3

The meaning of this command is to use the zh-CN-XiaoyiNeural character to synthesize the voice: "Hello, I am a smart voice assistant", and then write the audio stream to the hello\_in\_cn.mp3 file.

The program returns:

Downloads edge-tts --voice zh-CN-XiaoyiNeural --text "Hello, I am a smart voice assistant" --write-media hello_in_cn.mp3  
WEBVTT  
  
00:00:00.100 --> 00:00:00.525  
Hello  
  
00:00:00.525 --> 00:00:00.912  
ah  
  
00:00:01.050 --> 00:00:01.238  
I  
  
00:00:01.238 --> 00:00:01.375  
yes  
  
00:00:01.387 --> 00:00:01.700  
intelligent  
  
00:00:01.700 --> 00:00:02.050  
voice  
  
00:00:02.062 --> 00:00:02.550  
assistant

The program will automatically output the time axis and voice text, so that even subtitle files are available, which can be said to kill two birds with one stone and kill two birds with one stone.

At the same time, we can also adjust the speech rate of the synthesized speech:

edge-tts --rate=-50% --voice zh-CN-XiaoyiNeural --text "Hello, I am a smart voice assistant" --write-media hello_in_cn.mp3

The --rate parameter can speed up or slow down the speech rate of the synthesized speech synchronously through the plus or minus sign.

Alternatively, adjust the volume of synthesized speech:

edge-tts --volume=-50%  --voice zh-CN-XiaoyiNeural --text "Hello, I am a smart voice assistant" --write-media hello_in_cn.mp3

The --volume parameter can adjust the volume of the voice.

Unfortunately, and The official speech synthesis library of Microsoft Azure In contrast, the open source speech synthesis library does not support voice tuning based on markup language (SSML), such as intonation and emotion adjustment, but this is free after all, and the requirements should not be too high.

Python Script Speech Synthesis

In addition to speech synthesis through commands, edge-tts also supports Python scripts, edit the test.py file:

import asyncio  
  
import edge_tts  
  
TEXT = "Hello, I am a smart voice assistant, Xiaoyi"  
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())

Here we directly call the save method of the communicate instance through the asynchronous mode, and the audio files of speech synthesis can be generated concurrently and asynchronously, which is very convenient.

It is also possible to automatically find the language we need through the voice management library:

import asyncio  
import random  
  
import edge_tts  
from edge_tts import VoicesManager  
  
TEXT = "Chinese Speech Test"  
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())

Here, the built-in VoicesManager library is used to randomly select Chinese voice characters to complete the speech synthesis operation.

In addition, voice streams and letters can also be generated synchronously through scripts:

import asyncio  
  
import edge_tts  
  
TEXT = "Here is the voice stream test"  
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())

After this asynchronous call, the audio will be written to test.mp3, and the subtitle file will be written to test.vtt. Later, the generated subtitle file can be superimposed on the video through ffmpeg, please refer to: Based on Python3(Autosub) and Ffmpeg with GoogleTranslation (Google Translate) to achieve bilingual subtitles (verbatim) for your videos

epilogue

The open source speech synthesis edge-tts library can improve the efficiency of speech synthesis, and greatly reduce the threshold of speech synthesis, paving the way for automated video editing. In the future, it will be combined with the AI ​​drawing framework based on the Stable-Diffusion algorithm, and artificial intelligence AI one-click drawing The one-stop service of dubbing, dubbing and subtitles is just around the corner.

Tags: edge tts

Posted by Brand Hill on Tue, 07 Mar 2023 15:51:48 +1030