Batch video transcoder for home archival. Scans your movie collection, lets you pick tracks in a TUI, saves a JSON plan, then encodes everything with NVEncC (NVIDIA hardware encoder).
- Plan, review, then run — choose tracks and preview in a TUI, save a JSON plan you can inspect or edit before hours of encoding
- Resumable — failed jobs retry on next run, plan updated atomically after each job
- Live progress on every long step — ffmpeg extraction, eac3to, qaac, mkvmerge, NVEncC all stream into one unified progress bar; no more silent multi-gigabyte waits
- Auto quality — CQ value interpolated by pixel area, no manual tuning across SD/720p/1080p/4K
- Disc demux — Blu-ray (BDMV) and DVD (VIDEO_TS) fed straight into the pipeline with playlist/title selection
- Anamorphic SAR fix — detects and corrects wrong sample aspect ratio on DVD sources
- Dolby Vision — Profile 7 FEL (converted to P8.1) and Profile 8 MEL with RPU passthrough via dovi_tool
- HDR10 passthrough — mastering display, content light level, BT.2020/PQ preserved through encode
- Auto deinterlace — detects interlaced content from the video stream and applies nnedi (neural network) automatically
- Smart crop — black bars detected automatically across the timeline
- mpv preview — audition audio tracks, check subtitles, or preview video right from the TUI before committing
- Per-track downmix — fold 7.1 or 5.1 into stereo or 5.1 from the track selector, useful when the multichannel mix is a fake upmix or the movie is dialogue-heavy
- Satellite files — external audio and subtitle files next to the video are picked up as extra tracks automatically
furnace plan <source> -o <output> --audio-lang rus,eng --sub-lang rus,eng
# -> opens TUI for track selection -> saves furnace-plan.json
furnace run furnace-plan.json
# -> encodes all pending jobs with live progress TUI
- Python 3.13+
- ffmpeg / ffprobe
- MKVToolNix (mkvmerge, mkvpropedit)
- eac3to
- qaac64
- mkclean
- mpv (track preview)
- MakeMKV (DVD demux)
- NVEncC (video encoder)
- dovi_tool (Dolby Vision RPU, optional)
uv pip install .Copy furnace.toml.example to furnace.toml and set paths to your tools. Searched in order: --config flag, current directory, %APPDATA%\furnace\.
Plan with dry run (no TUI, just print what would happen):
furnace plan D:\Movies -o E:\Encoded --audio-lang jpn --sub-lang eng --dry-runPlan and encode:
furnace plan D:\Movies -o E:\Encoded --audio-lang rus,eng --sub-lang rus,eng
furnace run E:\Encoded\furnace-plan.jsonEnable VMAF + SSIM quality scoring (single pass):
furnace plan D:\Movies -o E:\Encoded --audio-lang eng --sub-lang eng --vmafCopy eligible video streams verbatim instead of re-encoding (audio still processed, container rebuilt):
furnace plan D:\Movies -o E:\Encoded --audio-lang eng --sub-lang eng --copy-videoEligible streams are copied as-is (crop/deinterlace skipped); interlaced and Dolby Vision P7 FEL sources fall back to a normal encode, and the plan report shows passthrough (copy video) or encode (<reason>) per file.
Inventory a folder and check Furnace-encode status (read-only — never modifies files):
furnace scan D:\MoviesEach video file is listed with its encode status (Furnace vX.Y.Z, not encoded, or unreadable) and its video, audio and subtitle tracks. Filter by encode status to find files needing a (re)encode — the flags union (OR):
furnace scan D:\Movies --not-encoded # no parseable Furnace tag
furnace scan D:\Movies --encoded # encoded by any Furnace version
furnace scan D:\Movies --max-version 1.19.3 # encoded by Furnace <= 1.19.3The table prints to stdout and is redirect-safe (ASCII box, no ANSI, no truncation); the N of M shown summary and any warnings go to stderr, so furnace scan D:\Movies > out.txt yields a clean plain-text file.
