Local batch burner · v1.0.0

Burn dozens at once, then go to sleep

Take the subtitles downloaded from the web "batch processing" page and burn them into finished videos one by one with the native ffmpeg on your computer. Unattended, resumable, with automatic retries.

Your videos stay on your machine from start to finish. No sign-up, no uploading — after fetching a subtitle font the first time, it works fully offline.

Download (about 35 KB)

macOS / Windows / Linux · requires Python 3.8+ and ffmpeg · standard library only, nothing to pip install

It fixes the last awkward step of the web workflow

In the batch pipeline, recognition and translation run on the server (you can close the page) — but burning the finished videos happens in the browser, one file at a time. Twenty videos mean twenty rounds of waiting with the tab open, the computer awake, and large files sometimes killed by the browser halfway through.

⚡️

An order of magnitude faster

Native codecs instead of the browser wasm sandbox.

🌙

Unattended

Point it at a folder, let it burn everything, and get a system notification when it is done.

⏯

Resumable

Shut down halfway? Run the same command again and it picks up where it stopped, skipping finished files.

🎯

Matches what you see on the web

Same style engine, same subtitle font — the local output matches the web preview.

Start in three steps

  1. 1

    Install ffmpeg (once only)

    # macOS brew install ffmpeg
    # Windows winget install Gyan.FFmpeg
    # Ubuntu sudo apt install ffmpeg

    Open a new terminal after installing, then continue.

  2. 2

    Unpack the downloaded archive

    You get a smilesub-burn-1.0.0 folder containing smilesub_burn.py and README.md.

  3. 3

    Double-click to run, or use the command line

    On macOS double-click burn.command, on Windows double-click burn.bat, then drag the two folders in. For the full feature set use the command line:

    # Preview how the pairing will look first (not a single byte is burned)
    python3 smilesub_burn.py --videos ./raw --subs ./batch.zip \
      --out ./burned --dry-run
    # Once it looks right, drop --dry-run and start for real
    python3 smilesub_burn.py --videos ./raw --subs ./batch.zip --out ./burned
💡 Strongly recommended the first time: add --dry-runIt only prints which subtitle goes with which video and what file names would be produced. Discovering a mismatch two hours into a batch run is a very common pitfall.

What it does not do

  • · Nothing is uploaded — your videos stay on your machine from start to finish.
  • · No network access (except fetching a font the first time).
  • · No recognition or translation — that is the web app's job; this tool only covers the last mile.
  • · Not a replacement for the web app — style templates, glossaries and multi-language translation are chosen on the web; this tool only materializes the result.

FAQ

What do I need to install?

Python 3.8 or newer, plus ffmpeg (with ffprobe). The tool itself uses only the Python standard library — nothing to pip install. After installing ffmpeg, open a new terminal before running it.

Are my videos uploaded?

No. Your videos stay on your machine from start to finish, and the tool does not touch the network — the only exception is downloading a subtitle font on first run (about 16MB), which is then cached locally and works fully offline afterwards. You can also pass --font-dir with your own font directory to avoid the network entirely.

My machine shut down halfway. Do I have to start over?

No. Progress is recorded in "burn-progress.json" inside the output folder; run the same command again and it resumes, skipping finished files. Completion is decided by a content fingerprint (subtitle content + video size and modification time + encoding parameters), so if you change a translation or the style it will re-burn automatically.

The video is done but the subtitles are blank or show boxes. What now?

This is the most common silent failure of local burning: the font named in the ASS subtitle does not exist on your system, and the renderer draws nothing instead of raising an error. By default the tool fetches the same font the web app uses to avoid this; if you changed fonts, pass --font with a font installed locally (on macOS usually "PingFang SC", on Windows "Microsoft YaHei"), or provide a font directory with --font-dir.

How does it relate to "batch processing" on the web?

Division of labor, not a replacement. Recognition, translation, glossaries and style templates are done and billed on the web; this tool handles only the last step — burning the produced subtitles into finished videos in bulk. It needs no login and consumes no credits.

How do I burn only a few languages?

Use --variant to pick the subtitle kind (translated / bilingual / ass for styled ASS / source) and --lang to filter languages, e.g. --variant bilingual --lang en. Checking the manifest with --dry-run first is the safest.

Not sure where to get the subtitles?

Pick a batch of videos on the web → choose target languages and a style → run it and download the ZIP, then burn them all at once with this tool.

Go to batch processing