82 lines
2.5 KiB
Markdown
82 lines
2.5 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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`:
|
|
|
|
```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.
|