devedeng-extended/FORK_NOTES.md
Luna 962a373c6c Update FORK_NOTES: accurate features + clear setup instructions
Add a Requirements/Install/Run-from-source/Tests section (runtime tools,
Debian & Arch package lists, pip install, source-tree launch, pytest).
Correct the feature descriptions to match the code: High profile is
automatic 2-pass VBR (fewest discs, then fill); split discs now get a
per-disc menu when the project menu is enabled; add a Reliability section
covering the deadlock-proof I/O, error reporting, and test suite.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 01:08:35 -07:00

5.4 KiB

DeVeDe-NG — Hardsub & Auto-split Fork

This is a fork of DeVeDe-NG aimed at producing burn-ready NTSC DVDs from arbitrary video files, with three additions on top of upstream:

  1. Embedded subtitle detection + hardsubbing (burn-in).
  2. Selectable DVD encode profiles (Compatibility / High quality / Custom).
  3. Automatic splitting of over-long projects across multiple ISOs / DVD-Rs.

It also hardens the app itself: a test suite, deadlock-proof subprocess handling, and clearer error reporting (see Reliability below).

The baseline encode is modelled on the known-good script in contrib/dvd-safe-converter.sh.


Requirements

Runtime tools (must be on PATH):

  • ffmpeg and ffprobe — encoding and media analysis (the default backend).
  • dvdauthor — builds the DVD-Video structure.
  • mkisofs or genisoimage — creates the ISO image.
  • spumux (part of dvdauthor) — for soft (selectable) subtitles.
  • Optional: a player for preview (vlc, mpv, or mplayer) and a burner (brasero, k3b, or xfburn).

Python / GUI: Python ≥ 3.12, GTK 3, PyGObject (gi), and pycairo.

On Debian/Ubuntu:

sudo apt install ffmpeg dvdauthor genisoimage \
     python3 python3-gi gir1.2-gtk-3.0 python3-cairo python3-gi-cairo \
     vlc            # optional: preview player

On Arch:

sudo pacman -S ffmpeg dvdauthor cdrkit gtk3 python-gobject python-cairo \
     vlc            # optional: preview player

Install

sudo python3 -m pip install .
# if pip refuses on an externally-managed system:
sudo python3 -m pip install --break-system-packages .

Then launch it from your menu or run devede_ng.

Run from source (no install)

Best for trying it out or developing — runs straight from the checkout:

PYTHONPATH=src python3 -c "import devedeng.devedeng as d; d.py()"

Tests

python3 -m pip install --break-system-packages pytest   # one-time
python3 -m pytest

The suite is headless (no display, no encoding) and runs in CI on Codeberg (.forgejo/workflows/tests.yml).


1. Hardsubbing embedded subtitles

The analyzer (ffprobe/avprobe) detects embedded subtitle tracks and classifies each as text (SubRip/ASS/mov_text/WebVTT) or image (PGS/VOBSUB/DVD subtitle). In a movie's Subtitles properties page a "Burn in embedded subtitle" dropdown lets you pick one track to render permanently into the picture.

  • Text subs are burned with ffmpeg's subtitles= (libass) filter, applied after scaling to the DVD size.
  • Image subs are composited with an overlay filtergraph before scaling, so bitmap positioning stays aligned with the source frame. (OCR-to-text is a planned option; today the bitmap is overlaid directly.)

Burned-in subtitles are part of the video; the existing soft subtitle support (spumux subpicture streams from external files) is unchanged.

2. Encode profiles

A project-level Encode profile selector sits next to the disc-size control (DVD only). NTSC DVD audio is AC3 for all profiles (upstream used MP2 for NTSC), matching the baseline script and maximising player compatibility.

Profile Video Audio Notes
Compatibility (4500k) CBR 4500k AC3 192k Old-player-safe baseline (~133 min / single-layer disc).
High quality (fill disc) 2-pass VBR, auto AC3 448k Picks the fewest discs that hold the project, then raises the bitrate (up to ~9000k) to fill each disc.
Custom your kbps your kbps Advanced; clamped to stay within DVD spec.

Selecting Custom reveals video/audio kbps fields.

3. Splitting long projects across discs

Usable disc capacity comes from the selected disc size (with the existing ~10% safety margin). When a project does not fit on one disc at the chosen quality, you are asked whether to:

  • Split into N discs — keep the quality and author one DVD/ISO per disc (name-disc1.iso, name-disc2.iso, …), or
  • Reduce bitrate — squeeze everything onto a single disc (upstream behaviour), or Cancel.

Multiple titles are distributed across discs whole. A single movie larger than one disc is split by time at the chapter boundary nearest each disc's capacity (falling back to an even time cut when it has no chapters); each segment's chapter markers stay inside the segment. If the project has a menu enabled, each split disc gets its own menu listing that disc's titles; otherwise each disc auto-plays.

Reliability

This fork also reworks the app's process handling and error reporting:

  • Deadlock-proof subprocesses. Child output is drained by background reader threads, so a long encode can't be wedged by a stalled/closed GUI (the encoders even keep running if the editor/terminal that launched the app dies).
  • Clear errors. A failed job leads with the step that failed, its command, and the last lines of its output — with the full log still available.
  • Test suite + CI guard the split planner, bitrate math, generated ffmpeg commands, subtitle detection, and the subprocess I/O.

Known limitations

  • Burning multiple discs is done one at a time: the app produces the ISOs; burn each in turn.
  • Image-subtitle burn-in is supported by the ffmpeg backend; the legacy avconv backend handles text subtitles only.
  • See ROADMAP.md for what's planned next.