All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- CLI help string and docs for
--no-dialogue-intelligence.
- Updated oslex2.
- Fix metering-mode enum parsing for CLI (NathanDrake2406).
- Bug when it comes to negative delays.
- When using progress bars dialnorm is now displayed (dd, ddp, and atmos):
- If the user does not provide a
--custom-dialnormthen the measured dialnorm is displayed on DEE step 2 measure at the end of the measure progress bar. - If the user does provide
--custom-dialnormthen the custom dialnorm is appended to the end of the encode progress bar.
- If the user does not provide a
- Improved logging for FFMPEG downmix.
- DPLII for encoder DD job was failing.
- Output token
{stem}was removing additional characters besides DELAY.
- Output template token
{stem}now strips DELAY Ns/ms from filename upon reconstruction.
- Added new token for output_template
{stem-cleaned}.- Returns a cleaned version of the input file stem and is useful when you want a tidy, human-readable piece of the original filename without common metadata (see documentation for more details).
- Temp directories not being removed in some cases since v1.3.7.
- Improved temp file handling across all encoders.
- Temp files are now deleted on broken jobs (as long as
--keep-tempor--reuse-temp-filesare not used). - Remove non word characters and unicode characters for temp paths to prevent processing errors with DEE.
temp_dirnot being pulled from config.
- Add support for output token
{opt-delay}:- If used and delay is 0 no delay related output will be returned.
- Temp directories are now unique for each run as long as
--keep-temp/--reuse-temp-filesare not used. This allows multiple DeeZy processes to work on a single file and even single track channels without colliding and attempting to clean up the working folders of other jobs.- If
--keep-temp/--reuse-temp-filesis used the behavior is the same as before to maintain reuse/cache abilities.
- If
truehddpath failing on atmos encoder.
- Added support for ADM BWF for AC4 and Atmos profiles.
- Logger for failure to get source bitrate from config is now a
debuginstead of awarning. - Default temporary path behavior changed to use short, platform-specific per-input job folders (reduces Windows long-path issues).
--parse-elementary-delayis now deprecated and will be removed on 1.4.0. This is all now handled automatically and internally.- If the arg is passed you will get a warning and it'll be ignored.
- DDP resetting detected delay for the output file name only (was properly stripped still).
- Output names being generated automatically could potentially output the wrong delay in the filename.
- Config:
-
AC4 now supports default bitrate by source channel with an optional atmos suffix.
Example:
#[default_source_bitrates.ac4] # ch_6 = 256 # ch_6_atmos = 320 < -- NEW
-
- Don't display the arg
--upmix-50-to-51for DDP-BluRay.
- Relative path bug with DEE.
- CLI:
--upmix-50-to-51:- Valid only for dd and ddp encoders (ignored for ddp-bluray).
- If you utilize this arg and the input is 5 channels (5.0) we will utilize
pan=5.1(side)|FL=c0|FR=c1|FC=c2|LFE=0*c0|SL=c3|SR=c4filter to make a silent LFE channel allowing a 5.1 channel layout.
- All FFMPEG commands now use -map_metadata -1.
- Improved the efficiency when building FFMPEG command lines.
- Auto generated output names use the target channels instead of the source.
-
Output filename templating (opt-in):
- New CLI flag:
--output-template— provide a lightweight template for auto-generated outputs when you don't supply--outputexplicitly. Supported tokens:{title},{year},{stem},{source},{lang},{channels},{worker},{delay}. --output-preview— preview the rendered filename without performing any work (safe dry-run for templates).- Template behavior mirrors the automatic filename generator's delay semantics (prefers mediainfo delay, falls back to filename parsing, and injects
[DELAY 0ms]when a delay was stripped and ignore was requested).
- New CLI flag:
-
Tests: Added unit tests covering the template renderer and delay flag helper to ensure consistent behavior across edge cases (token substitution, sanitization, filename delay parsing, TV season/episode handling, and delay injection behavior).
-
Default bitrates setting for AC4.
-
--parse-elementary-delay- When input is an elementary (demuxed) stream, parse any delay in the filename and reset it to zero. -
--working-dir- Set a centralized working directory for job files, logs, and batch-results. Overrides config default when provided. -
--batch-summary-output- Path to write a JSON summary for a batch run. When provided, a single JSON file with per-file metadata (status, durations, log file, output path) is emitted. -
--batch-output-dir- When supplied, encoders will place generated outputs into this directory unless the user explicitly supplied--outputfor a job. Useful for centralized batch storage. -
--overwrite- encode sub command flag to allow overwriting existing output files. When not set, the CLI will fast-fail/skips jobs whose target outputs already exist. -
--max-parallel- Integer (default 1). Controls how many files are processed concurrently in batch mode. -
--max-logs- Integer to retain a maximum number of log files in the working logs directory; older logs are trimmed automatically. -
--max-batch-results- Integer to retain a maximum number of batch result JSON files in the working batch-results directory; older results are trimmed. -
Centralized atomic move helper in the DEE encoder base class to perform safe, fast output file placement. Uses an atomic replace when possible and falls back to a cross-filesystem-safe move when needed.
-
DRY refactor: replaced per-encoder unlink+move logic with the centralized helper across DD, DDP, Atmos and AC4 encoders. This unifies overwrite semantics and reduces duplicated code.
-
Automatic filename generation has been greatly improved:
- Will check for common attributes via the mediainfo/input name and append that to the automatically generated file name.
- Detects name, year, season, episode and adds them to the name when generating a new name.
-
CLI:
--temp-dir- When supplied, encoders now create a predictable per-input subfolder under the provided base directory:<temp-dir>/<input_stem>_deezy. This centralizes temporary artifacts while keeping them isolated per-source for safe reuse and selective cleanup.--reuse-temp-files- Opt-in flag that enables reusing extractor outputs (FFmpeg / TrueHDD) when the extractor command signature matches a previously saved extraction. When--reuse-temp-filesis used the encoder registers metadata about the extraction so subsequent runs can reuse it. This flag implies--keep-temp(temp files are preserved when reuse is requested).
-
Encoders / Internal:
- Temporary artifact filenames are now codec-scoped (for example:
{output_stem}.DD.wavor{output_stem}.DDP_BLURAY.wav) to avoid cross-variant collisions when a shared temp folder is used. - Per-encoder metadata is stored in a single metadata file inside the temp folder and now uses an
"encoders"map to keep signatures and produced filenames isolated per encoder/format. - Metadata writes use atomic same-directory replace semantics (write a tmp file then os.replace) to avoid partially written files.
- Temporary artifact filenames are now codec-scoped (for example:
-
Concurrency & phase limits:
- New CLI flags:
--limit-ffmpeg,--limit-dee,--limit-truehddallow fine-tuning concurrency for each heavy phase. - If per-phase flags are not provided, each phase defaults to the value of
--max-parallel. - Exception: the DEE phase defaults to a conservative fraction of
--max-parallel(roughly half) to avoid saturating CPU/IO on slower machines; users can override with--limit-dee. - Values greater than
--max-parallelare capped to--max-paralleland a warning is emitted at startup. --jitter-msflag: introduces a small randomized delay before heavy phases to reduce thundering-herd spikes in high-parallel runs.
- New CLI flags:
-
Added support for optional per-source default bitrate sections in the configuration file under
[default_source_bitrates.<codec>](for example[default_source_bitrates.ddp]).- Keys are
ch_1..ch_8and are opt-in (the generateddeezy-conf.tomlcontains commented example blocks). Encoders will use these values when no CLI/preset bitrate is provided. Encoders validate config values and will select the closest allowed bitrate if a configured value is not permitted. Precedence is: CLI > per-source config > format-level config > built-in defaults.
- Keys are
-
Config Breaking Change:
[default_bitrates.ddp_bluray]needs to be renamed to[default_bitrates.ddp-bluray]to match the codec properly. This will be automatic if you generate a new config, otherwise you should make this change manually if using the config.- Updated some of the default bitrates in the generated config.
-
Config: Use platform-aware user config location and unified Windows folder
ConfigManagernow prefers a stable user config location when no explicit config path is provided. The search order is: current working directory (per-project) → user config directory (platform default) → working dir beside the executable (for bundled/exe usage).- On Windows the user config file will be placed in a single
deezyfolder under your local app data (for example:%LOCALAPPDATA%\deezy\deezy-conf.toml). deezy config generatenow writes to the user config dir by default when no path is supplied. This makes config placement deterministic across installations while preserving portable per-executable configs.
-
Parsing delay from filename:
- When a file is in it's elementary format (demuxed by itself) and there is a delay string we will parse it and zero it out if
--parse-elementary-delayis used. This will effectively set the audio to 0ms delay during encoding as well as strip it from the filename.- If the user explicitly defines an output file name no logic will be ran on the output file (as to not change the users desired output name).
- If
--parse-elementary-delayis not used, delays will be handled like they was previously in containers and no logic will be ran against elementary files.
- When a file is in it's elementary format (demuxed by itself) and there is a delay string we will parse it and zero it out if
-
Improved language detection for elementary formats.
-
Updated default config.
-
Temp directories by default now get built beside the input file (but can go to a parent folder if specified by the user).
-
DEE json output files are now suffixed with
input_file_name.encoder.json. -
Refactor: DRYed up delay-handling logic across DEE encoders by adding a shared helper in the DEE base encoder. This centralized computation for template-related delay flags and reduced duplicate code across DD, DDP, Atmos and AC4 encoders.
- Codec channel/bitrate defaults from config was not being set.
- Encoder DD doesn't support DPLII, so FFMPEG is used when DPLII is requested. This has been fixed.
- Arg
--no-bed-conformis changed to--bed-conformas it now defaults to Off.
- Hard coded default for DolbyDigitalPlusBluRay mode (would have been corrected regardless).
- Now captures all exceptions and logs them in debug mode.
--track-index: (where N is your typical track index)a:N- This is the same behavior as before.
s:N- Works identically to FFMPEG's
-map 0:Ncommand, it access the track based on the stream instead of audio.
- Works identically to FFMPEG's
- Note, backwards compatibility is retained, you can still simply pass
--track-index N.
- Added support for AC4:
- New
encode ac4command for next-generation Dolby AC-4 encoding --encoding-profile: Support for IMS and IMS Music profiles--ims-legacy-presentation: Backward compatibility presentation option- Multiple independent DRC settings for different playback scenarios:
--ddp-drc: DDP-compatible DRC settings--flat-panel-drc: Flat panel TV speaker optimization--home-theatre-drc: Home theater system optimization--portable-headphones-drc: Portable device and headphone optimization--portable-speakers-drc: Small speaker optimization
- Automatic TrueHD Atmos metadata preservation in immersive stereo output
- Requires minimum 6-channel (5.1) input or higher
- Enhanced metering with full 1770-4 loudness standard support
- New
- Progress bars will now be the same width.
- Progress bar time elapsed has been replaced by a spinner.
- Added a new example preset
ac4_stereoto the default config.
- Handle weird inputs with multiple channel counts (i.e. 8 / 6) and correctly determine the highest count.
- Issue where paths could break for MacOS.
- Atmos streaming mode was missing 1024 bitrate selection.
- Atmos bluray mode was defaulting to 448, should have been 1280 (this would have been corrected automatically).
- Will now read delay from file if it's not provided over CLI and the audio is not in a container with other streams (Video, audio, text, etc).
- In the generated config dependency
truehdshould betruehdd. This is fixed when you generate a new config, but you can manually modify it. - Dependencies was not being pulled from the config if provided.
- Progress reporting in debug mode could sometimes be in accurate between DEE measure -> encode phases.
- Progress was time instead of percentage in ffmpeg with no progress bars for non atmos jobs.
- Automatic detection for tty terminals to disable rich progress bars when DeeZy is called as a subprocess.
- TrueHD files with off time codes could sometimes have a FFMPEG warning (that is harmless) that could cause issues with reporting progress.
- DeeZy now only buffers one line for real time progress when called as a progress.
- New CLI args to manage your the automatic temp directory.
- Now checks for valid arguments on presets and gives the user helpful error messages.
- For formats that don't have a duration available (THD, other raw elementary formats) there is now a loading circle for progress when processing with FFMPEG.
- DEE related errors will be displayed without deezy running in DEBUG mode. (You may still need to run in debug for edge cases).
deezy config generatenow generates a cleaner and more descriptive default template.- Checks for required executable dependencies in the CLI before attempting to run any encoders.
- Some more arg parser help messages.
- Generated config had invalid pre defined presets.
- Numerous issues with config.
- Major bug where the user defined bitrate wouldn't be set on all 3 encoders since the re-work.
- Use case insensitive checks for DRC.
- DEE config
prepend_silence_durationandappend_silence_durationset to defaults. - Fixed an issue opening files with no FPS/duration data (only effected elementary files).
- Rebuilt config to be more maintainable with improved error handling.
- Preset arg has changed:
- You now call preset as it's own "encoder"
deezy encode preset --name YOUR_PRESET_NAME.
- You now call preset as it's own "encoder"
- DEE key
time_baseis now set tofile_positioninstead ofembedded_timecode. - Automatic temp directory now stores all job files in a parent folder
deezy. - Set automatic bitrate selection when not supplied by the user to a DEBUG message instead of info.
- Un-needed logging statement for channel defaults.
- Config system that allows user defined defaults and presets.
- Logging that will show substantially more information when used with DEBUG.
- Program wide configurable logger (defaults to INFO).
- CLI args:
- General:
--log-level: Sets the log level (defaults to INFO).--log-to-file: Write log to file (defaults to input path with suffix of .log).--no-progress-bars: Disables progress bars on level INFO (disabled for DEBUG or higher).--drc-line-mode: Dynamic range compression settings.--drc-rf-mode: Dynamic range compression settings.--custom-dialnorm: Custom dialnorm (0 disables custom dialnorm).--no-dialogue-intelligence: Dialogue intelligence enabled. Option ignored for 1770-1 or LeqA metering mode.--speech-threshold: If the percentage of speech is higher than the threshold, the encoder uses speech gating to set the dialnorm value. (Otherwise, the encoder uses level gating).--no-low-pass-filter: Disables low pass filter.--no-surround-3db: Disables surround 3db attenuation.--no-surround-90-deg-phase-shift: Disables surround 90 degree phase shift.--lt-rt-center: Lt/Rt center downmix level.--lt-rt-surround: Lt/Rt surround downmix level.--lo-ro-center: Lo/Ro center downmix level.--lo-ro-surround: Lo/Ro surround downmix level.--metering-mode: Loudness measuring mode according to one of the broadcast standards.
- DDP-BluRay:
ddp-bluray: Added a new encoder mode to allow higher bitrates for channel 7.1 layouts.
- Atmos:
atmos: Added a new encoder mode to separate Atmos from DDP.--atmos-mode: Atmos encoding mode (streaming/bluray).thd-warp-mode: Specify warp mode when not present in metadata (truehdd).--no-bed-conform: Disables bed conformance for Atmos content (truehdd).
- General:
- Steps in progress output could be incorrect.
- Issues where progress sometimes wasn't reported correctly for very tiny file sizes.
- Re-worked entire program essentially to utilize DEE and JSON, checking for accuracy, fixing numerous issues etc.
- Help portions of the CLI are now cleaner, using user friendly strings instead of raw enums.
- Improved automatic bitrate selection when the user choses an invalid bitrate, if 2 valid bitrates are returned it now automatically chooses the next highest quality.
- Re-wrote DD encoder module.
- Re-wrote DDP encoder module.
- DEE is no longer fed XML, it's handled via JSON.
- DRC default is now FILM_LIGHT.
- Updated numerous help strings for CLI args to be more descriptive/nicer.
- Progress Changes:
- For very tiny files once the progress returns 0 where the progress could sometimes only be calculated to 99%, progress is now updated to 100%.
- Added progress bars for each task/step (this can be toggled via
--no-progress-barsor by setting--log-levelto DEBUG) . - Unified all logic for progress, easier to maintain and update if needed later.
- CLI help indent has been slightly increased.
- All shorthand arguments (-c, etc.).
- Removed
--normalize.
- Dolby Atmos Support: Full support for Atmos encoding
- TrueHD Atmos decoder integration
- Atmos-specific CLI arguments (
--atmos,--no-bed-conform) - Support for Atmos channel layouts (5.1.2, 5.1.4, 7.1.2, 7.1.4)
- Automatic fallback to regular DDP if no Atmos content detected
- Smart Dependencies: Conditional TrueHD decoder requirement
- Only requires TrueHD decoder when actually encoding Atmos content
- Graceful dependency detection and error handling
- Enhanced Channel Support: Extended channel layout options
- Added Atmos channel configurations
- Improved channel auto-detection
- Configuration System: Complete TOML-based configuration management
deezy config generate- Generate default configuration filesdeezy config info- Display configuration status and active settingsdeezy config generate --overwrite- Replace existing configuration- Automatic config detection in multiple locations (portable and user directories)
- Dependency path configuration (FFmpeg, DEE, TrueHD)
- Encoding defaults per format (DD/DDP)
- Global preferences (progress mode, temp directory, etc.)
- User-defined preset support with full CLI integration
--presetCLI flag for using predefined encoding profiles- Preset validation and error handling with helpful error messages
- Priority system: CLI args > Preset values > Config file > Built-in defaults
- Configuration schema validation with proper error handling
- Configuration integration with CLI argument parsing
- Smart dependency detection using config values as fallbacks
- Enhanced README with comprehensive configuration system documentation
- Added preset system usage examples and workflows
- Updated Quick Start section with preset examples
- Comprehensive configuration setup guide
- Updated encoding workflow examples
- Updated CLI help to include configuration commands
- Improved dependency resolution to use configuration paths when CLI paths not specified
- DDP Encoder Improvements: Complete class refactoring
- Proper typing throughout DDP encoder class
- Cleaned up encoder logic and error handling
- Fixed numerous potential errors in encoding pipeline
- MediaInfo Optimization: Streamlined payload handling
- Optimized MediaInfo payload processing
- Improved metadata extraction efficiency
- FFmpeg Optimizations: Enhanced external process handling
- Optimized FFmpeg calls for better performance
- Improved audio processing pipeline
- DEE Encoder Enhancements: Refined Dolby Encoding Engine integration
- Optimized calls to DEE encoder
- Updated default speech threshold from 15 to 20
- Updated default DRC to "Film Standard"
- TOML file generation now produces proper TOML format (using
tomlkit.dumps()) - Configuration command parsing no longer requires input files
- Proper scoping of dependency path variables in CLI integration
- README Formatting: Fixed markdown structure and nesting issues
- Corrected malformed code blocks (````)
- Fixed missing
</details>closing tags - Properly nested collapsible sections
- Balanced details/summary block structure
- Temp Path Handling: Resolved potential temp directory build issues
- Edge Case Errors: Fixed potential errors during DEE encoding
- Process Reliability: Improved error handling in encoding workflows