A fast, visual subtitle editor built for people who care about timing.
Sub Editor was born out of frustration. After years of doing subtitle work — manually scrubbing through video, counting characters by eye, and losing sessions to crashes — the tools available still felt like they were designed by engineers who had never actually sat down to subtitle a two-hour film.
So this was built from scratch, by someone who has. Every feature exists because it was genuinely needed. The waveform timeline so you can see the speech, not just guess at it. The character limit warnings because CJK and Latin text behave differently and no other tool tracks them separately. The pre-roll so you hear context before each block. The keyboard-first workflow because reaching for the mouse 400 times in a session adds up.
If you've ever:
- Placed a subtitle and had to rewatch the same 3 seconds five times to get the timing right
- Manually split a long line and recalculated the duration yourself
- Lost 20 minutes of work because the app didn't autosave
— this was made for you.
Most subtitle tools force you to work blind — you type text into a table and guess at the timing. Sub Editor is built around a waveform timeline, so you can see exactly where speech starts and ends before you place a single block.
- Tired of manually counting characters for each subtitle? Sub Editor flags overlong lines automatically, with separate limits for CJK and Latin text.
- Tired of switching between a text editor and a video player to check your work? The subtitle overlay updates in real time as you scrub.
- Tired of losing work when the app crashes? Auto-save runs in the background every minute.
Sub Editor is for translators, video editors, and content creators who need to produce clean, well-timed subtitles — without fighting their tools.
Video player with live subtitle overlay · Waveform timeline with subtitle blocks · List view with character limit warnings
| Waveform Timeline | See audio peaks and subtitle blocks side by side. Drag, resize, and snap with precision. |
| Live Subtitle Overlay | Preview subtitles on the video as you edit — no separate preview window needed. |
| Smart List View | Click to edit inline. Pro-rata split (Enter) divides both text and duration at the cursor. |
| Dual-Language Support | Automatic CJK / Latin detection with independent character limit warnings per line. |
| Pre-Roll Playback | Plays back slightly before the target point so you hear context — no more replaying from the start. |
| Audio-Only Mode | Extract and play just the audio for tighter timing on music or fast speech. |
| Find & Replace | Regex-capable search across all subtitle text. |
| Session Restore | Playhead position and timeline zoom are saved with the project (.sep format). |
| Auto-Save & Recovery | Background auto-save every 60 seconds with crash recovery on next launch. |
Get the latest release from the Releases page.
- Download
Sub-Editor-macOS-ARM.dmg - Open the DMG and drag Sub Editor into Applications
- First launch: right-click the app → Open to bypass Gatekeeper
- Download
Sub-Editor-Windows.zip - Extract and run
Sub Editor.exe— no installation required
- Download
Sub-Editor-Linux.deb - Install with:
sudo apt install ./Sub-Editor-Linux.deb
- Launch from your app menu or run
sub-editorin terminal
All required libraries (libmpv, ffmpeg, xcb) are bundled. No extra packages needed.
Prerequisites: Python 3.10+, uv, mpv, and FFmpeg
# macOS
brew install mpv ffmpeg
# Linux
sudo apt install libmpv-dev ffmpeggit clone https://github.com/shfire616/Subtitle-Editor.git
cd Subtitle-Editor
uv run python src/main.pyuv handles the virtual environment and all Python dependencies automatically.
- Drag & drop a video or audio file onto the window
- Or use
File → Open/Cmd+O - If a
.srtfile with the same name exists in the same folder, it loads automatically
| Action | How |
|---|---|
| Move a block | Drag the block body |
| Resize a block | Drag the left or right edge |
| Snap edge to playhead | Right-click the block edge |
| Split at playhead | Press S |
| Add blank block | Press D |
| Zoom | Ctrl+Scroll or Cmd/Ctrl + = / - |
| Action | How |
|---|---|
| Edit text | Left-click any text cell |
| Navigate rows | Arrow keys (playhead follows) |
| Split block at cursor | Enter inside text cell (text and duration split proportionally) |
| Merge with previous | Backspace at start of text |
| Merge with next | Delete at end of text |
File → Export SRTorCmd/Ctrl + E— exports the final.srtfileFile → Export Text— plain text, one line per subtitle
| Key | Action |
|---|---|
Space |
Play / Pause |
S |
Split at playhead (Timeline) |
D |
Add blank subtitle at playhead |
Enter |
Pro-rata split (inside text cell) |
Backspace |
Merge with previous (cursor at line start) |
Delete |
Merge with next (cursor at line end) |
Cmd/Ctrl + M |
Merge selected blocks |
Cmd/Ctrl + E |
Export SRT |
Cmd/Ctrl + F |
Find & Replace |
Cmd/Ctrl + S |
Save project |
Cmd/Ctrl + Z / Y |
Undo / Redo |
Cmd/Ctrl + A |
Select all |
Cmd/Ctrl + = / - |
Zoom timeline in / out |
T |
Toggle list view |
K / L |
Decrease / increase playback speed |
GNU General Public License v3.0 — free to use, modify, and distribute. Derivative works must remain open source.

