Files
Tutorials/image-filter-tutorial

Image Filter Tutorial Voiceover

Small helper scripts for creating a timed tutorial voiceover from an SRT file, then replacing the original video audio with the generated voiceover.

Files

  • subtitles/Image_Filter_Tutorial_Subtitles.srt — timed narration text
  • scripts/make_voiceover_macos.py — creates voiceover.wav and voiceover.mp3 on macOS
  • scripts/make_voiceover_windows.py — creates voiceover.wav and voiceover.mp3 on Windows
  • scripts/combine_video_audio.py — mutes/replaces video audio and exports final MP4

Install

macOS

brew install ffmpeg

Python is already available on most Macs. If needed, install it from python.org.

Windows

winget install Gyan.FFmpeg

Install Python from python.org or Microsoft Store, then reopen PowerShell and check:

ffmpeg -version
python --version

Create voiceover

Run from the scripts folder.

macOS

python3 make_voiceover_macos.py --voice "Daniel" --rate 185

Windows

python make_voiceover_windows.py --voice "Microsoft David Desktop" --rate 0

Outputs are saved in ../output/voiceover.wav and ../output/voiceover.mp3.

Combine video + audio

Put the original video in the project folder or pass its path directly:

python scripts/combine_video_audio.py --video "Image_Filter_Tutorial_Narrated.mp4" --audio "output/voiceover.wav" --output "output/Image_Filter_Tutorial_Final.mp4"

This removes the original video audio and uses the new voiceover.

Voice and speed options

macOS voice list

say -v '?'

Good tutorial voices: Daniel, Reed (English (US)), Eddy (English (UK)).

Speed example:

python3 make_voiceover_macos.py --voice "Daniel" --rate 190

Windows voice list

Add-Type -AssemblyName System.Speech
$synth = New-Object System.Speech.Synthesis.SpeechSynthesizer
$synth.GetInstalledVoices() | ForEach-Object { $_.VoiceInfo.Name }

Good tutorial voices: Microsoft David Desktop, Microsoft Mark if available.

Windows speed uses -10 to 10:

python make_voiceover_windows.py --voice "Microsoft David Desktop" --rate 2

To add voices: Settings > Time & language > Speech > Manage voices > Add voices.

Notes

If a caption has too much text for its time slot, the script keeps the SRT timing and trims the speech. Fix that by increasing the subtitle duration, shortening the sentence, or increasing speed.