Add missing subtitles. Recursive video-to-SRT transcription using whisper.cpp
Project description
NOTE: This is a vibe coded app. Proceed with caution.
add_subs_to_videos
You have video files but no subtitles. This tool fixes that.
It crawls a directory recursively, transcribes every video it finds using whisper.cpp, and writes a .srt sidecar file next to each one. Already-transcribed files are skipped, so re-running is fast.
Repo
https://github.com/simnim/add_subs_to_videos
GUI screenshot
Install
Every option below gives you both the add_subs_to_videos CLI command and an
"Add Subs to Videos" desktop GUI.
Ubuntu (snap — recommended, no prerequisites):
sudo snap install add-subs-to-videos
Installs the add-subs-to-videos CLI plus an "Add Subs to Videos" launcher in your applications menu (add-subs-to-videos-gui).
macOS (.dmg — no prerequisites):
Download Add Subs to Videos-<version>.dmg from GitHub Releases, open it, and drag the app to Applications. The DMG also includes a standalone add_subs_to_videos CLI binary and an Install CLI.command helper — double-click it to symlink the CLI into /usr/local/bin so add_subs_to_videos --help works from a terminal.
Metal GPU acceleration is auto-detected on macOS — no extra steps needed.
Any platform with Python 3.12+ (via pip/pipx):
pip install "add-subs-to-videos[gui]"
# or
pipx install "add-subs-to-videos[gui]"
This installs both the add_subs_to_videos CLI and the add-subs-to-videos-gui GUI entry point. Drop [gui] if you only want the CLI.
pywhispercppcompiles a C++ extension at install time (requires CMake —brew install cmake ffmpegon macOS, or on Ubuntu/Debiansudo apt install cmake ffmpeg).ffmpeg/ffprobeare also needed at runtime to decode non-WAV media and show per-file progress. On Linux with CUDA:WHISPER_CUDA=1 pip install "add-subs-to-videos[gui]"
Usage
CLI
add_subs_to_videos /path/to/videos
add_subs_to_videos /path/to/videos --model large-v3 --language en
add_subs_to_videos /path/to/videos --force # re-transcribe even if .srt exists
movie.mp4 → movie.srt, placed in the same directory. Supports .mp4, .mkv, .avi, .mov, .m4v, .webm, and more.
Models
| Model | Speed | Quality |
|---|---|---|
tiny / base |
Very fast | Lower accuracy |
small / medium |
Moderate | Good for most content |
large-v3 |
Slow | Best accuracy |
medium is the default. Use large-v3 when accuracy matters; use tiny or base for quick drafts on long files.
Output
Each video gets a .srt file in the same directory:
movie.mp4 → movie.srt
1
00:00:01,240 --> 00:00:04,120
Welcome to the presentation.
2
00:00:04,500 --> 00:00:07,300
Today we'll cover three topics.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file add_subs_to_videos-0.1.21.tar.gz.
File metadata
- Download URL: add_subs_to_videos-0.1.21.tar.gz
- Upload date:
- Size: 263.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f8302dd7c3fa48ef8b666d1bd4a51765265c2799c360f4e606adf7a3cf0ae46
|
|
| MD5 |
975784243dddc429c32c23302fb9e110
|
|
| BLAKE2b-256 |
39f89de9dc0328c3bb62b6e4a5ed3adaf1db625736473923d81cb2c039633798
|
File details
Details for the file add_subs_to_videos-0.1.21-py3-none-any.whl.
File metadata
- Download URL: add_subs_to_videos-0.1.21-py3-none-any.whl
- Upload date:
- Size: 21.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dfd36563c58c337a88bb93af3c8f31c960bed77b96e3a1cd32c905b8684a841
|
|
| MD5 |
f2bf132609168eb037c6d1a426c9387e
|
|
| BLAKE2b-256 |
ea89d0814d3f3825aec62640b0c445e26ebe995b96c8e2172d07d265c3d32694
|