
edge-tts
CLIConverts text to speech with Microsoft Edge's online TTS service and can generate subtitle files at the same time. No API key needed, with voices for many languages. Not an official Microsoft project and depends on that online service staying available.
edge-tts
edge-tts is a Python module that allows you to use Microsoft Edge's online text-to-speech service from within your Python code or using the provided edge-tts or edge-playback command.
Installation
To install it, run the following command:
$ pip install edge-tts
If you only want to use the edge-tts and edge-playback commands, it would be better to use pipx:
$ pipx install edge-tts
Usage
Basic usage
If you want to use the edge-tts command, you can simply run it with the following command:
$ edge-tts --text "Hello, world!" --write-media hello.mp3 --write-subtitles hello.srt
If you wish to play it back immediately with subtitles, you could use the edge-playback command:
$ edge-playback --text "Hello, world!"
Note that edge-playback requires the installation of the mpv command line player, except on Windows.
All edge-tts commands work with edge-playback with the exception of the --write-media, --write-subtitles and --list-voices options.
Changing the voice
You can change the voice used by the text-to-speech service by using the --voice option. The --list-voices option can be used to list all available voices.
$ edge-tts --list-voices
Name Gender ContentCategories VoicePersonalities
--------------------------------- -------- --------------------- --------------------------------------
af-ZA-AdriNeural Female General Friendly, Positive
af-ZA-WillemNeural Male General Friendly, Positive
am-ET-AmehaNeural Male General Friendly, Positive
am-ET-MekdesNeural Female General Friendly, Positive
ar-AE-FatimaNeural Female General Friendly, Positive
ar-AE-HamdanNeural Male General Friendly, Positive
ar-BH-AliNeural Male General Friendly, Positive
ar-BH-LailaNeural Female General Friendly, Positive
ar-DZ-AminaNeural Female General Friendly, Positive
ar-DZ-IsmaelNeural Male General Friendly, Positive
ar-EG-SalmaNeural Female General Friendly, Positive
...
$ edge-tts --voice ar-EG-SalmaNeural --text "مرحبا كيف حالك؟" --write-media hello_in_arabic.mp3 --write-subtitles hello_in_arabic.srt
Custom SSML
Support for custom SSML was removed because Microsoft prevents the use of any SSML that could not be generated by Microsoft Edge itself. This means that all the cases where custom SSML would be useful cannot be supported as the service only permits a single <voice> tag with a single <prosody> tag inside it. Any available customization options that could be used in the <prosody> tag are already available from the library or the command line itself.
Changing rate, volume and pitch
You can change the rate, volume and pitch of the generated speech by using the --rate, --volume and --pitch options. When using a negative value, you will need to use --[option]=-50% instead of --[option] -50% to avoid the option being interpreted as a command line option.
$ edge-tts --rate=-50% --text "Hello, world!" --write-media hello_with_rate_lowered.mp3 --write-subtitles hello_with_rate_lowered.srt
$ edge-tts --volume=-50% --text "Hello, world!" --write-media hello_with_volume_lowered.mp3 --write-subtitles hello_with_volume_lowered.srt
$ edge-tts --pitch=-50Hz --text "Hello, world!" --write-media hello_with_pitch_lowered.mp3 --write-subtitles hello_with_pitch_lowered.srt
Progress
When stderr is a terminal, a progress bar is drawn on it while the audio is generated:
42%|███████████████████▌ | 1.5MB 00:03<00:04
The percentage is the audio received so far against the total length estimated from the service's boundary metadata, so it tracks how much work is left rather than how much text has been read out. The bar is suppressed when stderr is redirected, when subtitles are being written to stderr with --write-subtitles -, and when --no-progress is passed.
$ edge-tts --no-progress --text "Hello, world!" --write-media hello.mp3
Python module
It is possible to use the edge-tts module directly from Python. Examples from the project itself include:
Other projects that use the edge-tts module include:
- hass-edge-tts
- Podcastfy
- tts-samples - a collection of mp3 sound samples to facilitate picking a voice for your project.
Related resources

notebooklm-py
CLIUnofficial Python library and CLI for driving Google NotebookLM (now Gemini Notebook): bulk-import sources, ask cited questions, and generate and download podcasts, videos, slides, quizzes and flashcards. Ships an agent skill. Relies on undocumented APIs and needs a Google sign-in.
teng-lin/notebooklm-py19.8k
MLX-Audio
CLIOffline speech toolkit for Apple Silicon Macs: CLI text-to-speech (including Chinese and voice cloning) and speech-to-text, for voicing lessons and explainer videos or transcribing lectures and interviews, with data staying local. Needs an M-series Mac and Python 3.10+; MP3 export needs ffmpeg.
Blaizzy/mlx-audio8.1k
whisper-ctranslate2
CLILocal transcription that's compatible with the OpenAI Whisper CLI but faster and lighter: outputs SRT/VTT subtitles or text and can transcribe a live microphone. Needs Python; models download on first run; speaker labels need pyannote.audio and a Hugging Face token.
Softcatala/whisper-ctranslate21.4k
Podcastfy
CLIOpen-source alternative to NotebookLM's podcast feature: turns web pages, PDFs, images, YouTube videos or text into two-host conversational audio, useful for lecture notes or articles. Uses Gemini and OpenAI API keys by default, or local models plus free Edge TTS.
souzatharsis/podcastfy6.6k
Piper
CLILocal neural text-to-speech engine that converts text to speech offline, with voices in dozens of languages, handy for listening materials or narrating articles and course slides. Needs Python; download a voice model before first use. The project is currently looking for maintainers.
OHF-Voice/piper1-gpl5.9k
Kokoro TTS
CLILocal text-to-speech CLI built on the open Kokoro model: batch-converts TXT, EPUB and PDF to MP3 or WAV by chapter, with multiple languages, voice blending and speed control; handy for audio versions of course materials. Needs Python 3.11-3.12 and two model files downloaded first.
nazdridoy/kokoro-tts1.9k