Jellyfin Forum
QSV HW acceleration only sometimes invoked - Printable Version

+- Jellyfin Forum (https://forum.jellyfin.org)
+-- Forum: Support (https://forum.jellyfin.org/f-support)
+--- Forum: Troubleshooting (https://forum.jellyfin.org/f-troubleshooting)
+--- Thread: QSV HW acceleration only sometimes invoked (/t-qsv-hw-acceleration-only-sometimes-invoked)



QSV HW acceleration only sometimes invoked - jakeofalltrades - 2025-04-20

I have an Intel Arc A310 running in a jellyfin docker on a virtualized Ubuntu 24.04 VM hosted by proxmox.

Encoding and decoding works on some files. I can see a new PID formed in intel_gpu_top, and I see a transcode log. But for very similar looking files, no encoding appears to be happening. Looking at the underlying ffmpeg calls, jellyfin is not passing init_hw_device options. The files appear to fall into the encoding and decoding capabilities of the A310. But I am a newbie when it comes to video codecs...

File 1 (jellyfin uses HW acceleration on this one):

Quote:Title: 1080p H264 SDR
Codec: H264
AVC: Yes
Profile: High
Level: 40
Resolution: 1920x1080
Aspect ratio: 16:9
Anamorphic: No
Interlaced: No
Framerate: 23.976025
Bitrate: 14469 kbps
Bit depth: 8 bit
Video range: SDR
Video range type: SDR
Color space: bt709
Color transfer: bt709
Color primaries: bt709
Pixel format: yuv420p
Ref frames: 1
NAL: 4


ffmpeg call for file 1:

Code:
/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -f matroska -init_hw_device vaapi=va:/dev/dri/renderD128,driver=iHD -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -canvas_size 1920x1080 -i file:"<redacted>" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:0 -codec:v:0 av1_vaapi -rc_mode VBR -b:v 14469456 -maxrate 14469456 -bufsize 28938912 -profile:v:0 main -level 15 -force_key_frames:0 "expr:gte(t,n_forced*3)" -filter_complex "[0:2]scale,scale=1920:1080:fast_bilinear,format=bgra,hwupload=derive_device=vaapi[sub];[0:0]setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale_vaapi=format=nv12:extra_hw_frames=24[main];[main][sub]overlay_vaapi=eof_action=pass:repeatlast=0:w=1920:h=1080" -start_at_zero -codec:a:0 libfdk_aac -ac 2 -vbr:a 5 -af "volume=2" -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename "3297079bd018baf24b5e85cc3f595d3e-1.mp4" -start_number 495 -hls_segment_filename "/config/cache/transcodes/3297079bd018baf24b5e85cc3f595d3e%d.mp4" -hls_playlist_type vod -hls_list_size 0 -y "/config/cache/transcodes/3297079bd018baf24b5e85cc3f595d3e.m3u8"

File 2 (jellyfin does not invoke HW acceleration):

Quote:Title: 1080p H264 SDR
Codec: H264
AVC: Yes
Profile: High
Level: 41
Resolution: 1920x804
Aspect ratio: 2.40:1
Anamorphic: No
Interlaced: No
Framerate: 23.976025
Bitrate: 16247 kbps
Bit depth: 8 bit
Video range: SDR
Video range type: SDR
Color space: bt709
Pixel format: yuv420p
Ref frames: 1
NAL: 4

ffmpeg call for file 2:
Code:
/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -fflags +genpts -f matroska  -i file:"<redacted>" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 copy -bsf:v h264_mp4toannexb -start_at_zero -codec:a:0 libfdk_aac -ac 2 -vbr:a 5 -af "volume=2" -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 6 -hls_segment_type fmp4 -hls_fmp4_init_filename "77ae589cc218c04ab40a53386e341ef0-1.mp4" -start_number 0 -hls_segment_filename "/config/cache/transcodes/77ae589cc218c04ab40a53386e341ef0%d.mp4" -hls_playlist_type vod -hls_list_size 0 -y "/config/cache/transcodes/77ae589cc218c04ab40a53386e341ef0.m3u8"

Any idea why jellyfin uses HW acceleration for the first file, but not the second one?

HW config:
   


RE: QSV HW acceleration only sometimes invoked - Efficient_Good_5784 - 2025-04-20

It would be helpful if you could share the ffmpeg logs of both instances.


RE: QSV HW acceleration only sometimes invoked - TheDreadPirate - 2025-04-20

The first video is transcoding to burn in the subtitles.

The reason it fails is because the "QSV Device" field does not accept the device path. It uses an index number (0, 1, 2) when you have multiple Intel devices. When it is blank, the Intel driver will use the first available device.

If only the Arc GPU is available to the VM, you can leave that field blank.