From 25fc5d5835353f500e4e5d1dfeea859b74613d90 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 25 Feb 2024 02:08:37 +0100 Subject: [PATCH] wip: Add quicksync support --- docker-compose.dev.yml | 9 +++++++++ docker-compose.prod.yml | 9 +++++++++ docker-compose.yml | 9 +++++++++ shell.nix | 2 +- transcoder/src/hwaccel.go | 15 ++++++++++++++- 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 681957f1..65607171 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -95,6 +95,15 @@ services: - GOTRANSCODER_HWACCEL=vaapi - GOTRANSCODER_VAAPI_RENDERER=${GOTRANSCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['vaapi'] + # qsv is the same setup as vaapi but with the hwaccel env var different + transcoder-qsv: + <<: *transcoder-base + devices: + - /dev/dri:/dev/dri + environment: + - GOTRANSCODER_HWACCEL=qsv + - GOTRANSCODER_VAAPI_RENDERER=${GOTRANSCODER_VAAPI_RENDERER:-/dev/dri/renderD128} + profiles: ['qsv'] ingress: image: nginx diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 9e0571ac..d85edf73 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -72,6 +72,15 @@ services: - GOTRANSCODER_HWACCEL=vaapi - GOTRANSCODER_VAAPI_RENDERER=${GOTRANSCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['vaapi'] + # qsv is the same setup as vaapi but with the hwaccel env var different + transcoder-qsv: + <<: *transcoder-base + devices: + - /dev/dri:/dev/dri + environment: + - GOTRANSCODER_HWACCEL=qsv + - GOTRANSCODER_VAAPI_RENDERER=${GOTRANSCODER_VAAPI_RENDERER:-/dev/dri/renderD128} + profiles: ['qsv'] ingress: image: nginx diff --git a/docker-compose.yml b/docker-compose.yml index 658e1642..d85f42c0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -71,6 +71,15 @@ services: - GOTRANSCODER_HWACCEL=vaapi - GOTRANSCODER_VAAPI_RENDERER=${GOTRANSCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['vaapi'] + # qsv is the same setup as vaapi but with the hwaccel env var different + transcoder-qsv: + <<: *transcoder-base + devices: + - /dev/dri:/dev/dri + environment: + - GOTRANSCODER_HWACCEL=qsv + - GOTRANSCODER_VAAPI_RENDERER=${GOTRANSCODER_VAAPI_RENDERER:-/dev/dri/renderD128} + profiles: ['qsv'] ingress: image: nginx diff --git a/shell.nix b/shell.nix index f9358ebd..6129db68 100644 --- a/shell.nix +++ b/shell.nix @@ -27,7 +27,7 @@ in wgo mediainfo libmediainfo - ffmpeg + ffmpeg-full postgresql_15 eslint_d prettierd diff --git a/transcoder/src/hwaccel.go b/transcoder/src/hwaccel.go index 71609ae3..91096ef8 100644 --- a/transcoder/src/hwaccel.go +++ b/transcoder/src/hwaccel.go @@ -17,7 +17,7 @@ func DetectHardwareAccel() HwAccelT { EncodeFlags: []string{ "-c:v", "libx264", // superfast or ultrafast would produce a file extremly big so we prever veryfast or faster. - "-preset", "faster", + "-preset", "fast", // sc_threshold is a scene detection mechanisum used to create a keyframe when the scene changes // this is on by default and inserts keyframes where we don't want to (it also breaks force_key_frames) // we disable it to prevents whole scenes from behing removed due to the -f segment failing to find the corresonding keyframe @@ -64,6 +64,19 @@ func DetectHardwareAccel() HwAccelT { }, ScaleFilter: "scale_vaapi=%d:%d", } + case "qsv", "intel": + return HwAccelT{ + Name: name, + DecodeFlags: []string{ + "-hwaccel", "qsv", + "-hwaccel_output_format", "qsv", + }, + EncodeFlags: []string{ + "-c:v", "h264_qsv", + "-preset", "fast", + }, + ScaleFilter: "scale_qsv=%d:%d", + } default: log.Printf("No hardware accelerator named: %s", name) os.Exit(2)