conversion_project/ENCODER_SWITCH.md
2026-01-08 18:52:06 -05:00

2.5 KiB

Dual Encoder Support - Implementation Complete

Features Added

The transcoder now supports switching between two video encoders via the --encoder CLI option:

1. HEVC NVENC 10-bit (Default)

  • Command: --encoder nvenc or default (no flag needed)
  • Codec: hevc_nvenc
  • Preset: slow (high quality)
  • Bit Depth: 10-bit
  • Pixel Format: yuv420p10le
  • Use Case: Best quality archival format, suitable for Plex compatibility

2. AV1 NVENC 8-bit

  • Command: --encoder av1
  • Codec: av1_nvenc
  • Preset: p7 (high quality)
  • Bit Depth: 8-bit
  • Pixel Format: yuv420p
  • Use Case: Maximum file size reduction, modern playback devices

Usage Examples

# Default to HEVC NVENC 10-bit with smart resolution scaling
python main.py "C:\Videos\Movies"

# Force AV1 NVENC 8-bit encoding
python main.py "C:\Videos\TV" --encoder av1

# AV1 with explicit resolution
python main.py "C:\Videos\Anime" --encoder av1 --r 1080

# AV1 with CQ mode at specific quality
python main.py "C:\Videos\Low-Res" --encoder av1 --cq 28

# AV1 with bitrate mode
python main.py "C:\Videos\Movies" --encoder av1 --m bitrate

# HEVC (explicit, though it's the default)
python main.py "C:\Videos\TV" --encoder nvenc --cq 26

Configuration

Encoder settings are stored in config.xml:

<encoder default="nvenc">
  <av1_nvenc preset="p7" bit_depth="8" pix_fmt="yuv420p" />
  <hevc_nvenc preset="slow" bit_depth="10" pix_fmt="yuv420p10le" />
</encoder>

The default="nvenc" attribute can be changed, but CLI --encoder flag always takes precedence.

Files Modified

  1. config.xml - Added <encoder> section with both encoder configurations
  2. main.py - Added --encoder argument, defaults to "nvenc"
  3. encode_engine.py - Updated run_ffmpeg() to:
    • Accept encoder parameter
    • Dynamically set encoder codec, preset, bit depth, and pixel format
    • Display encoder details in logging output
  4. process_manager.py - Updated to:
    • Accept and pass encoder parameter through processing pipeline
    • Updated both Phase 1 (initial encode) and Phase 2 (bitrate retry) encode calls

Quality Notes

Aspect HEVC NVENC AV1 NVENC
File Size ~80-90% of AV1 Smallest (baseline)
Quality Excellent Excellent
Preset slow (p6) p7
Bit Depth 10-bit 8-bit
Compatibility Excellent (Plex) Good (modern devices)
Encoding Speed Fast Fast

Both encoders use NVIDIA GPU acceleration (NVENC) for fast encoding.