Skip to content

v0.6.0 — Mux, don't burn.

Choose a tag to compare

@Shironex Shironex released this 22 May 11:01
· 66 commits to main since this release

Soft subs, both directions. v0.6.0 adds a path that skips libass entirely: mux an external .ass into an MKV as a separate, selectable subtitle track — video and audio stream-copied, no re-encode, done in seconds — and the inverse, extract embedded subtitle tracks back out of a container to standalone .ass / .srt files. The hardsub burn-in pipeline is untouched; this is a second way to ship subtitles, for when you'd rather keep them toggleable.

Headline feature: "Mux only (soft subs)" turns a 1.5 GB episode + an .ass into a playable MKV with a language-labeled, selectable subtitle track in seconds instead of minutes — because nothing is encoded, only copied.

Install

  • Windows — Moekoder-0.6.0-win-x64.exe. Still unsigned; SmartScreen will show More info → Run anyway on first launch.
  • macOS — Moekoder-0.6.0-mac-arm64.dmg. Still unsigned; after dragging into /Applications, run:
    xattr -cr /Applications/Moekoder.app
    to clear the Gatekeeper quarantine.
  • Linux — not shipped this release. Still on the roadmap.

Upgrading from v0.5.x: the Windows auto-updater pulls this in the background; the next launch comes up on v0.6.0. macOS users grab the DMG manually until code-signing lands.

Soft-sub mux

  • "Mux only (soft subs)" toggle in Settings → Encoding. When on, the encoder skips the libass burn-in filter and emits ffmpeg -i <video> -i <subs> -map 0:v -map 0:a -map 1:0 -c copy -c:s ass -metadata:s:s:0 language=<lang> -disposition:s:0 default <out.mkv>. Video + audio are stream-copied; the .ass becomes a default-flagged subtitle track. Opens in VLC / mpv with the subs selectable.
  • MKV forced — soft-subs in MP4 are a pain, so mux mode forces the MKV container and warns if you had MP4 selected.
  • Language from the filename — .en.ass / .pl.ass → eng / pol (ISO-639-2), with a manual override field.
  • I/O-bound, not encode-bound — reuses the existing -progress parser; the bar fills near-instantly.

Subtitle extraction

  • Dedicated Extract screen (new Titlebar entry) — open a container and its embedded subtitle streams are probed and listed (index / codec / language / title) in a multi-select table. Pick an output folder, pull the selected text tracks out. Image subtitles (PGS / VOBSUB) are shown but can't be selected.
  • Output-format selector — ASS / SRT / Match source, default ASS. Copies verbatim when the source already matches; transcodes otherwise (SubRip → .ass, or .ass → .srt with a styling-loss note).
  • No collisions — output filenames carry the track ordinal (<stem>.<lang>.s<N>.<ext>), so a full + a signs track both tagged eng don't overwrite each other.

Added

  • Soft-sub mux mode, the dedicated Extract screen, the subtitle:extract IPC channel, and a shared resolveSubtitleOutput codec ⇄ extension resolver.

Changed

  • Removed the deprecated escapeSubtitlePath / escapeSubtitlePathFor libass-escape aliases — no remaining callers; mux and extract args go straight to spawn (no shell, no libass filter), so no path escaping is needed.

Fixed

  • text-codec extraction no longer fabricates a .ass file that ffmpeg rejects — the generic ffprobe text tag is no longer treated as a selectable text codec.
  • Dropped-queue container extension is now correct when mux mode is toggled (stale-closure dependency fix on the drop-to-queue handler).

Tests

Desktop suite: 263 (was 234). Web suite: 28. New mux-arg, subtitle-codec, extractor, and renderer codec / language coverage. Lint, typecheck, and prettier clean.

Known limitations

  • Multiple subtitle tracks in a single mux is out of scope — one external .ass per mux (planned for v0.7).
  • Extraction handles text subtitles only (copy or transcode between .ass / .srt); image subtitles (PGS / VOBSUB) can't be exported.
  • Same as v0.5.x: binaries are unsigned, the auto-updater is Windows-only, there's no Linux build, and embedded-font extraction still runs per-job (no font cache).

Source under the Moekoder Source Available License.