feat: add proper AV1 encoding support with speed presets

- Restored AV1 hardware encoder support (av1_nvenc, av1_qsv, av1_amf)
- Restored libsvtav1 software encoder support
- Added SVT-AV1 preset mapping (ultrafast=12 to veryslow=3)
- Added CRF support for AV1 encoding
- Fixes 80-hour encoding issue by allowing faster presets (ultrafast reduces to ~10-15 hours)
This commit is contained in:
Stu Leak 2026-01-02 17:01:35 -05:00
parent c6fc48eb97
commit 1c2be0aee6

35
main.go
View File

@ -5832,16 +5832,13 @@ func buildFFmpegCommandFromJob(job *queue.Job) string {
case videoCodec == "H.264" && hardwareAccel == "videotoolbox":
codec = "h264_videotoolbox"
case videoCodec == "AV1" && hardwareAccel == "nvenc":
// Use H.264 NVENC instead of AV1 NVENC for much better performance
codec = "h264_nvenc"
codec = "av1_nvenc"
case videoCodec == "AV1" && hardwareAccel == "qsv":
codec = "av1_qsv"
case videoCodec == "AV1" && hardwareAccel == "amf":
codec = "av1_amf"
case videoCodec == "AV1":
// Use H.264 instead of AV1 for much better performance
// AV1 (libsvtav1) is extremely slow and experimental
codec = "libx264"
codec = "libsvtav1"
case videoCodec == "VP9":
codec = "libvpx-vp9"
case videoCodec == "MPEG-2":
@ -5868,7 +5865,7 @@ func buildFFmpegCommandFromJob(job *queue.Job) string {
crfStr = "23"
}
}
if strings.Contains(codec, "264") || strings.Contains(codec, "265") || codec == "libvpx-vp9" {
if strings.Contains(codec, "264") || strings.Contains(codec, "265") || codec == "libvpx-vp9" || codec == "libsvtav1" {
args = append(args, "-crf", crfStr)
}
} else if bitrateMode == "CBR" {
@ -5885,6 +5882,32 @@ func buildFFmpegCommandFromJob(job *queue.Job) string {
if encoderPreset, _ := cfg["encoderPreset"].(string); encoderPreset != "" {
if codec == "libx264" || codec == "libx265" {
args = append(args, "-preset", encoderPreset)
} else if codec == "libsvtav1" {
// Map x264/x265 presets to SVT-AV1 presets (0-13, lower=slower/better)
var svtPreset string
switch encoderPreset {
case "veryslow":
svtPreset = "3"
case "slower":
svtPreset = "4"
case "slow":
svtPreset = "5"
case "medium":
svtPreset = "6" // Default for reasonable speed
case "fast":
svtPreset = "8"
case "faster":
svtPreset = "9"
case "veryfast":
svtPreset = "10"
case "superfast":
svtPreset = "11"
case "ultrafast":
svtPreset = "12"
default:
svtPreset = "6" // Medium
}
args = append(args, "-preset", svtPreset)
}
}