Jellyfin Forum
SOLVED: Jellyfin not transcoding on Docker - 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: SOLVED: Jellyfin not transcoding on Docker (/t-solved-jellyfin-not-transcoding-on-docker)



Jellyfin not transcoding on Docker - beridam - 2025-05-09

SOLVED, check latest post. Drivers issue.

Open Media Vault (Debian base), latest version, Intel Celeron N100, 16GB LPDDR5 RAM, 500GB SSD for system, 12TB HDD for docker and media files.

Hi, as the title states, hardware transcoding doesn't seem to work at all. I try to play a file in 4K HEVC Dolby Video 8.1 (with HDR10 fallback) and the Firefox and Android Players instantly crash (fatal player error). On my LG C4 it works since it can direct play DV, but not on those other two.
And even before resorting to transcoding, shouldn't it first fallback to HDR10 since it's DV8.1? That's also weird.

On Plex, hardware transcoding worked out of the box, so my CPU (Intel Celeron N100) is capable enough of doing it.

My Jellyfin transcoding settings are as follows:
  • Hardware ac: VAAPI
  • Va-API device: /dev/dri/renderD128
  • Enable hw decoding for:
  1. H264
  2. HEVC
  3. MPEG2
  4. AV1
  5. HEV 10bit
  • Enable hardware encoding
  • Enable Intel Low-Power H264 hw encoder
  • Enable Intel Low-Power HEVC hw encoder
  • Allow encoding in HEVC format
  • Allow encoding in AV1 format
  • Enable VPP Tone mapping (just in case, but disabling it doesn't change anything)
The rest are the default values. Changing VAAPI to QSV doesn't fix anything.


I'm attaching logs from right now, just after trying one of those files.

I've been troubleshooting via ChatGPT to see if I could fix it myself, but I'm at my wit's end. From what I understand, Jellyfin can't access the proper drivers. I can just start from scratch if needed, but I'm afraid I've mucked about with the video drivers (I've installed the non-free intel driver, for instance).

Here's the relevant bits of my compose file:

Code:
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    environment:
      - JELLYFIN_LOG_LEVEL=debug
      - LIBVA_DRIVER_NAME=iHD
    devices:
      - /dev/dri:/dev/dri
      - /dev/dri/card0:/dev/dri/card0
      - /dev/dri/renderD128:/dev/dri/renderD128
    networks:
      - swag-net
    ports:
      - 8096:8096
    user: ${PUID}:${PGID}
    volumes:
      - ${appdata}/jellyfin/config:/config
      - ${appdata}/jellyfin/cache:/cache
      - ${data}/media/movies:/movies
      - ${data}/media/tv:/tv
      - ${data}/es-media/movies:/es-movies
      - ${data}/es-media/tv:/es-tv
    restart: unless-stopped

The declared user is called "plex" and belongs to both the "video" and "render" groups. "plex" is also the owner of the files in the declared volumes of the compose file.
I added that "LIBVA" line at chatgpt's suggestion, since I've got a headless system. But it doesn't make a difference.

this is ls -l /dev/dri

Code:
total 0
drwxr-xr-x 2 root root        80 May  9 04:00 by-path
crw-rw---- 1 root video  226,  0 May  9 04:00 card0
crw-rw---- 1 root render 226, 128 May  9 04:00 renderD128

vainfo returns

Code:
vainfo
error: can't connect to X server!
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_17
libva error: /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so init failed
libva info: va_openDriver() returns 1
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

And this is the jellyfin log.

Code:
[06:38:11] [INF] [79] Emby.Server.Implementations.HttpServer.WebSocketManager: WS 192.168.64.4 request
[06:38:17] [INF] [68] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for germankupfer. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[06:38:17] [INF] [54] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[06:38:17] [INF] [54] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -f matroska -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -i file:"/tv/Daredevil - Born Again/Season 1/Daredevil - Born Again - S01E02 - With Interest WEBDL-2160p.mkv" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 av1_vaapi -rc_mode VBR -b:v 14643678 -maxrate 14643678 -bufsize 29287356 -profile:v:0 main -force_key_frames:0 "expr:gte(t,n_forced*3)" -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale_vaapi=format=nv12:extra_hw_frames=24" -codec:a:0 libfdk_aac -ac 2 -ab 256000 -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 "69b44d266ffe65ef7e328139e56add9a-1.mp4" -start_number 0 -hls_segment_filename "/cache/transcodes/69b44d266ffe65ef7e328139e56add9a%d.mp4" -hls_playlist_type vod -hls_list_size 0 -y "/cache/transcodes/69b44d266ffe65ef7e328139e56add9a.m3u8"
[06:38:18] [ERR] [54] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 187
[06:38:18] [ERR] [54] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL GET /videos/15f64e7e-2d14-c434-7ec5-5772f02b9dae/hls1/main/-1.mp4.
MediaBrowser.Common.FfmpegException: FFmpeg exited with code 187
  at MediaBrowser.MediaEncoding.Transcoding.TranscodeManager.StartFfMpeg(StreamState state, String outputPath, String commandLineArguments, Guid userId, TranscodingJobType transcodingJobType, CancellationTokenSource cancellationTokenSource, String workingDirectory)
  at Jellyfin.Api.Controllers.DynamicHlsController.GetDynamicSegment(StreamingRequestDto streamingRequest, Int32 segmentId)
  at Jellyfin.Api.Controllers.DynamicHlsController.GetHlsVideoSegment(Guid itemId, String playlistId, Int32 segmentId, String container, Int64 runtimeTicks, Int64 actualSegmentLengthTicks, Nullable`1 static, String params, String tag, String deviceProfileId, String playSessionId, String segmentContainer, Nullable`1 segmentLength, Nullable`1 minSegments, String mediaSourceId, String deviceId, String audioCodec, Nullable`1 enableAutoStreamCopy, Nullable`1 allowVideoStreamCopy, Nullable`1 allowAudioStreamCopy, Nullable`1 breakOnNonKeyFrames, Nullable`1 audioSampleRate, Nullable`1 maxAudioBitDepth, Nullable`1 audioBitRate, Nullable`1 audioChannels, Nullable`1 maxAudioChannels, String profile, String level, Nullable`1 framerate, Nullable`1 maxFramerate, Nullable`1 copyTimestamps, Nullable`1 startTimeTicks, Nullable`1 width, Nullable`1 height, Nullable`1 maxWidth, Nullable`1 maxHeight, Nullable`1 videoBitRate, Nullable`1 subtitleStreamIndex, Nullable`1 subtitleMethod, Nullable`1 maxRefFrames, Nullable`1 maxVideoBitDepth, Nullable`1 requireAvc, Nullable`1 deInterlace, Nullable`1 requireNonAnamorphic, Nullable`1 transcodingMaxAudioChannels, Nullable`1 cpuCoreLimit, String liveStreamId, Nullable`1 enableMpegtsM2TsMode, String videoCodec, String subtitleCodec, String transcodeReasons, Nullable`1 audioStreamIndex, Nullable`1 videoStreamIndex, Nullable`1 context, Dictionary`2 streamOptions, Boolean enableAudioVbrEncoding, Boolean alwaysBurnInSubtitleWhenTranscoding)
  at lambda_method1456(Closure, Object)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
  at Jellyfin.Api.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
  at Jellyfin.Api.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
  at Jellyfin.Api.Middleware.IPBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
  at Jellyfin.Api.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
  at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
  at Jellyfin.Api.Middleware.QueryStringDecodingMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.ReDoc.ReDocMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
  at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
  at Jellyfin.Api.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
  at Jellyfin.Api.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
  at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
  at Jellyfin.Api.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context, IServerConfigurationManager serverConfigurationManager)
  at Jellyfin.Api.Middleware.ExceptionMiddleware.Invoke(HttpContext context)
[06:38:18] [INF] [73] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for germankupfer. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[06:38:18] [INF] [54] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: Deleting partial stream file(s) /cache/transcodes/69b44d266ffe65ef7e328139e56add9a.m3u8
[06:38:18] [INF] [54] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[06:38:18] [INF] [54] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -f matroska -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -i file:"/tv/Daredevil - Born Again/Season 1/Daredevil - Born Again - S01E02 - With Interest WEBDL-2160p.mkv" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 av1_vaapi -rc_mode VBR -b:v 14643678 -maxrate 14643678 -bufsize 29287356 -profile:v:0 main -force_key_frames:0 "expr:gte(t,n_forced*3)" -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale_vaapi=format=nv12:extra_hw_frames=24" -codec:a:0 libfdk_aac -ac 2 -ab 256000 -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 "d1cafab2ba024a07ffa0a51693d3d443-1.mp4" -start_number 0 -hls_segment_filename "/cache/transcodes/d1cafab2ba024a07ffa0a51693d3d443%d.mp4" -hls_playlist_type vod -hls_list_size 0 -y "/cache/transcodes/d1cafab2ba024a07ffa0a51693d3d443.m3u8"
[06:38:18] [ERR] [67] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 187
[06:38:18] [INF] [79] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Adding playback tracker : TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6MTM4LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTM4LjB8MTc0NjI5OTQ4MjQ5NA11-657a5cc861bb4ca8a577a6fe192d3377-15f64e7e2d14c4347ec55772f02b9dae
[06:38:18] [INF] [79] Jellyfin.Plugin.PlaybackReporting.Data.PlaybackTracker: PlaybackTracker : Adding Start Event : 05/09/2025 06:38:18
[06:38:18] [INF] [79] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Creating StartPlaybackTimer Task
[06:38:18] [INF] [68] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : Entered
[06:38:18] [ERR] [68] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL GET /videos/15f64e7e-2d14-c434-7ec5-5772f02b9dae/hls1/main/-1.mp4.
MediaBrowser.Common.FfmpegException: FFmpeg exited with code 187
  at MediaBrowser.MediaEncoding.Transcoding.TranscodeManager.StartFfMpeg(StreamState state, String outputPath, String commandLineArguments, Guid userId, TranscodingJobType transcodingJobType, CancellationTokenSource cancellationTokenSource, String workingDirectory)
  at Jellyfin.Api.Controllers.DynamicHlsController.GetDynamicSegment(StreamingRequestDto streamingRequest, Int32 segmentId)
  at Jellyfin.Api.Controllers.DynamicHlsController.GetHlsVideoSegment(Guid itemId, String playlistId, Int32 segmentId, String container, Int64 runtimeTicks, Int64 actualSegmentLengthTicks, Nullable`1 static, String params, String tag, String deviceProfileId, String playSessionId, String segmentContainer, Nullable`1 segmentLength, Nullable`1 minSegments, String mediaSourceId, String deviceId, String audioCodec, Nullable`1 enableAutoStreamCopy, Nullable`1 allowVideoStreamCopy, Nullable`1 allowAudioStreamCopy, Nullable`1 breakOnNonKeyFrames, Nullable`1 audioSampleRate, Nullable`1 maxAudioBitDepth, Nullable`1 audioBitRate, Nullable`1 audioChannels, Nullable`1 maxAudioChannels, String profile, String level, Nullable`1 framerate, Nullable`1 maxFramerate, Nullable`1 copyTimestamps, Nullable`1 startTimeTicks, Nullable`1 width, Nullable`1 height, Nullable`1 maxWidth, Nullable`1 maxHeight, Nullable`1 videoBitRate, Nullable`1 subtitleStreamIndex, Nullable`1 subtitleMethod, Nullable`1 maxRefFrames, Nullable`1 maxVideoBitDepth, Nullable`1 requireAvc, Nullable`1 deInterlace, Nullable`1 requireNonAnamorphic, Nullable`1 transcodingMaxAudioChannels, Nullable`1 cpuCoreLimit, String liveStreamId, Nullable`1 enableMpegtsM2TsMode, String videoCodec, String subtitleCodec, String transcodeReasons, Nullable`1 audioStreamIndex, Nullable`1 videoStreamIndex, Nullable`1 context, Dictionary`2 streamOptions, Boolean enableAudioVbrEncoding, Boolean alwaysBurnInSubtitleWhenTranscoding)
  at lambda_method1456(Closure, Object)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
  at Jellyfin.Api.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
  at Jellyfin.Api.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
  at Jellyfin.Api.Middleware.IPBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
  at Jellyfin.Api.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
  at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
  at Jellyfin.Api.Middleware.QueryStringDecodingMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.ReDoc.ReDocMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
  at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
  at Jellyfin.Api.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
  at Jellyfin.Api.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
  at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
  at Jellyfin.Api.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context, IServerConfigurationManager serverConfigurationManager)
  at Jellyfin.Api.Middleware.ExceptionMiddleware.Invoke(HttpContext context)
[06:38:18] [INF] [68] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for germankupfer. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[06:38:18] [INF] [68] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: Deleting partial stream file(s) /cache/transcodes/d1cafab2ba024a07ffa0a51693d3d443.m3u8
[06:38:18] [INF] [68] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[06:38:18] [INF] [68] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -f matroska -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -i file:"/tv/Daredevil - Born Again/Season 1/Daredevil - Born Again - S01E02 - With Interest WEBDL-2160p.mkv" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 av1_vaapi -rc_mode VBR -b:v 14643678 -maxrate 14643678 -bufsize 29287356 -profile:v:0 main -force_key_frames:0 "expr:gte(t,n_forced*3)" -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale_vaapi=format=nv12:extra_hw_frames=24" -codec:a:0 libfdk_aac -ac 2 -ab 256000 -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 "b90405838276d70908d14ec79ac320c2-1.mp4" -start_number 0 -hls_segment_filename "/cache/transcodes/b90405838276d70908d14ec79ac320c2%d.mp4" -hls_playlist_type vod -hls_list_size 0 -y "/cache/transcodes/b90405838276d70908d14ec79ac320c2.m3u8"
[06:38:18] [ERR] [79] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 187
[06:38:18] [ERR] [79] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL GET /videos/15f64e7e-2d14-c434-7ec5-5772f02b9dae/hls1/main/-1.mp4.
MediaBrowser.Common.FfmpegException: FFmpeg exited with code 187
  at MediaBrowser.MediaEncoding.Transcoding.TranscodeManager.StartFfMpeg(StreamState state, String outputPath, String commandLineArguments, Guid userId, TranscodingJobType transcodingJobType, CancellationTokenSource cancellationTokenSource, String workingDirectory)
  at Jellyfin.Api.Controllers.DynamicHlsController.GetDynamicSegment(StreamingRequestDto streamingRequest, Int32 segmentId)
  at Jellyfin.Api.Controllers.DynamicHlsController.GetHlsVideoSegment(Guid itemId, String playlistId, Int32 segmentId, String container, Int64 runtimeTicks, Int64 actualSegmentLengthTicks, Nullable`1 static, String params, String tag, String deviceProfileId, String playSessionId, String segmentContainer, Nullable`1 segmentLength, Nullable`1 minSegments, String mediaSourceId, String deviceId, String audioCodec, Nullable`1 enableAutoStreamCopy, Nullable`1 allowVideoStreamCopy, Nullable`1 allowAudioStreamCopy, Nullable`1 breakOnNonKeyFrames, Nullable`1 audioSampleRate, Nullable`1 maxAudioBitDepth, Nullable`1 audioBitRate, Nullable`1 audioChannels, Nullable`1 maxAudioChannels, String profile, String level, Nullable`1 framerate, Nullable`1 maxFramerate, Nullable`1 copyTimestamps, Nullable`1 startTimeTicks, Nullable`1 width, Nullable`1 height, Nullable`1 maxWidth, Nullable`1 maxHeight, Nullable`1 videoBitRate, Nullable`1 subtitleStreamIndex, Nullable`1 subtitleMethod, Nullable`1 maxRefFrames, Nullable`1 maxVideoBitDepth, Nullable`1 requireAvc, Nullable`1 deInterlace, Nullable`1 requireNonAnamorphic, Nullable`1 transcodingMaxAudioChannels, Nullable`1 cpuCoreLimit, String liveStreamId, Nullable`1 enableMpegtsM2TsMode, String videoCodec, String subtitleCodec, String transcodeReasons, Nullable`1 audioStreamIndex, Nullable`1 videoStreamIndex, Nullable`1 context, Dictionary`2 streamOptions, Boolean enableAudioVbrEncoding, Boolean alwaysBurnInSubtitleWhenTranscoding)
  at lambda_method1456(Closure, Object)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
  at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
  at Jellyfin.Api.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
  at Jellyfin.Api.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
  at Jellyfin.Api.Middleware.IPBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
  at Jellyfin.Api.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
  at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
  at Jellyfin.Api.Middleware.QueryStringDecodingMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.ReDoc.ReDocMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
  at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
  at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
  at Jellyfin.Api.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
  at Jellyfin.Api.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
  at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
  at Jellyfin.Api.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context, IServerConfigurationManager serverConfigurationManager)
  at Jellyfin.Api.Middleware.ExceptionMiddleware.Invoke(HttpContext context)
[06:38:18] [INF] [54] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: Deleting partial stream file(s) /cache/transcodes/b90405838276d70908d14ec79ac320c2.m3u8
[06:38:20] [INF] [67] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app Jellyfin Web 10.10.7 playing Optics. Stopped at 0 ms
[06:38:20] [INF] [27] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Playback stop tracker found, processing stop : TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6MTM4LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTM4LjB8MTc0NjI5OTQ4MjQ5NA11-657a5cc861bb4ca8a577a6fe192d3377-15f64e7e2d14c4347ec55772f02b9dae
[06:38:20] [INF] [27] Jellyfin.Plugin.PlaybackReporting.Data.PlaybackTracker: PlaybackTracker : Adding Stop Event : 05/09/2025 06:38:20
[06:38:20] [INF] [27] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Playback stop but TrackedPlaybackInfo not found! not storing activity in DB

Any help at all would be much appreciated.


RE: Jellyfin not transcoding on Docker - bitmap - 2025-05-09

Check here for some troubleshooting steps: https://forum.jellyfin.org/t-transcoding-fails-with-ffmpeg-exit-code-187

The first one I'd suggest is looking at your encoding settings. Hardware acceleration for Intel requires some extra steps depending on processor. You can consult the HWA guide on whether the N100 has any quirks: https://jellyfin.org/docs/general/post-install/transcoding/hardware-acceleration/known-issues#intel-on-linux.

I didn't see any with the N100 specifically, but above may have more info. The first topic I posted pegged low-power encoding as the culprit.


RE: Jellyfin not transcoding on Docker - beridam - 2025-05-09

(2025-05-09, 07:50 PM)bitmap Wrote: Check here for some troubleshooting steps: https://forum.jellyfin.org/t-transcoding-fails-with-ffmpeg-exit-code-187

The first one I'd suggest is looking at your encoding settings. Hardware acceleration for Intel requires some extra steps depending on processor. You can consult the HWA guide on whether the N100 has any quirks: https://jellyfin.org/docs/general/post-install/transcoding/hardware-acceleration/known-issues#intel-on-linux.

I didn't see any with the N100 specifically, but above may have more info. The first topic I posted pegged low-power encoding as the culprit.
As you said, there is no specific info regarding N100. I've disabled low power hardware encoding, but still no dice. I'm thinking it might be a permissions or general file location issue because of:

Code:
AVHWDeviceContext @ 0x556502910d00] No VA display found for device /dev/dri/renderD128.
Device creation failed: -22.
Failed to set value 'vaapi=va:/dev/dri/renderD128,driver=iHD' for option 'init_hw_device': Invalid argument
Error parsing global options: Invalid argument

But permissions should be fine, my user "plex", which is declared inside the container, belongs to both video and render.


RE: Jellyfin not transcoding on Docker - bitmap - 2025-05-09

Try changing your docker compose to this:

Code:
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    environment:
      - JELLYFIN_LOG_LEVEL=debug
    devices:
      - /dev/dri/card0:/dev/dri/card0
      - /dev/dri/renderD128:/dev/dri/renderD128
    group_add:
      - 104 # run 'id' and change this to your render group
    networks:
      - swag-net
    ports:
      - 8096:8096
    user: ${PUID}:${PGID}
    volumes:
      - ${appdata}/jellyfin/config:/config
      - ${appdata}/jellyfin/cache:/cache
      - ${data}/media/movies:/movies
      - ${data}/media/tv:/tv
      - ${data}/es-media/movies:/es-movies
      - ${data}/es-media/tv:/es-tv
    restart: unless-stopped

Make sure that QSV is selected and that /dev/dri/renderD128 is listed. You weren't specific whether vainfo was run inside the container or outside the container. Run it again inside the container.

Code:
docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo

Here's info for decode support and encode support on codecs:

Decode (most important): https://www.intel.com/content/www/us/en/docs/onevpl/developer-reference-media-intel-hardware/1-1/overview.html#DECODE-OVERVIEW-OTHER
Encode: https://www.intel.com/content/www/us/en/docs/onevpl/developer-reference-media-intel-hardware/1-1/overview.html#ENCODE-OVERVIEW-OTHER

Ensure that the decode section in Jellyfin matches what is supported according to the Intel documentation. Uncheck allow encoding in AV1 (not supported). Seems like HEVC is supported.


RE: Jellyfin not transcoding on Docker - beridam - 2025-05-10

(2025-05-09, 08:29 PM)beridam Wrote:
(2025-05-09, 07:50 PM)bitmap Wrote: Check here for some troubleshooting steps: https://forum.jellyfin.org/t-transcoding-fails-with-ffmpeg-exit-code-187

The first one I'd suggest is looking at your encoding settings. Hardware acceleration for Intel requires some extra steps depending on processor. You can consult the HWA guide on whether the N100 has any quirks: https://jellyfin.org/docs/general/post-install/transcoding/hardware-acceleration/known-issues#intel-on-linux.

I didn't see any with the N100 specifically, but above may have more info. The first topic I posted pegged low-power encoding as the culprit.
As you said, there is no specific info regarding N100. I've disabled low power hardware encoding, but still no dice. I'm thinking it might be a permissions or general file location issue because of:

Code:
AVHWDeviceContext @ 0x556502910d00] No VA display found for device /dev/dri/renderD128.
Device creation failed: -22.
Failed to set value 'vaapi=va:/dev/dri/renderD128,driver=iHD' for option 'init_hw_device': Invalid argument
Error parsing global options: Invalid argument

But permissions should be fine, my user "plex", which is declared inside the container, belongs to both video and render.

Hey, thanks for your help.

I've now changed the encoding and decoding settings to what's listed there in the Intel page.

id plex confirms that the user "plex" belongs to "render(105)".

My vainfo inside the container:

Code:
docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo
Trying display: drm
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva error: /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so init failed
libva info: va_openDriver() returns 1
libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva error: /usr/lib/jellyfin-ffmpeg/lib/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

Still, I get the error when playing a DV 8.1 file on Firefox. Meaning it's not transcoding. This is the log:

Code:
ffmpeg version 7.0.2-Jellyfin Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 12 (Debian 12.2.0-14)
  configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable-static --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto=auto --enable-gpl --enable-version3 --enable-shared --enable-gmp --enable-gnutls --enable-chromaprint --enable-opencl --enable-libdrm --enable-libxml2 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libharfbuzz --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libopenmpt --enable-libdav1d --enable-libsvtav1 --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libshaderc --enable-libplacebo --enable-vulkan --enable-vaapi --enable-amf --enable-libvpl --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
  libavutil      59.  8.100 / 59.  8.100
  libavcodec    61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample  5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
[AVHWDeviceContext @ 0x559a99190d00] libva: /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so init failed
[AVHWDeviceContext @ 0x559a99190d00] Failed to initialise VAAPI connection: 1 (operation failed).
Device creation failed: -5.
Failed to set value 'vaapi=va:/dev/dri/renderD128,driver=iHD' for option 'init_hw_device': Input/output error
Error parsing global options: Input/output error

This is my current compose file:

Code:
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    environment:
      - JELLYFIN_LOG_LEVEL=debug
    devices:
      - /dev/dri/card0:/dev/dri/card0
      - /dev/dri/renderD128:/dev/dri/renderD128
    group_add:
      - 105 # run 'id' and change this to your render group
    networks:
      - swag-net
    ports:
      - 8096:8096
    user: ${PUID}:${PGID}
    volumes:
      - ${appdata}/jellyfin/config:/config
      - ${appdata}/jellyfin/cache:/cache
      - ${data}/media/movies:/movies
      - ${data}/media/tv:/tv
      - ${data}/es-media/movies:/es-movies
      - ${data}/es-media/tv:/es-tv
    restart: unless-stopped

And these are the hw enc/dec settings (QSV chosen, not VAAPI, although the docker exec command talks about VAAPI, I guess because QSV is based on it).

[Image: imagen.png]

Edit. Just to see what happened, I disabled every decoding option except for HEVC and HEVC 10 bit, still getting the error.

Another edit. My N100 doesn't appear in the list of QSV supported devices. Switched to VAAPI. This is the error now:

Code:
ffmpeg version 7.0.2-Jellyfin Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 12 (Debian 12.2.0-14)
  configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable-static --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto=auto --enable-gpl --enable-version3 --enable-shared --enable-gmp --enable-gnutls --enable-chromaprint --enable-opencl --enable-libdrm --enable-libxml2 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libharfbuzz --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libopenmpt --enable-libdav1d --enable-libsvtav1 --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libshaderc --enable-libplacebo --enable-vulkan --enable-vaapi --enable-amf --enable-libvpl --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
Input #0, matroska,webm, from 'file:/tv/Star Wars - Andor/Season 2/Andor - S02E04 - TBA WEBDL-2160p.mkv':
  Metadata:
    encoder         : libebml v1.4.5 + libmatroska v1.7.1
  Duration: 00:53:50.56, start: 0.000000, bitrate: 10661 kb/s
  Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 16:9], 24 fps, 24 tbr, 1k tbn (default)
      Metadata:
        BPS             : 9888166
        DURATION        : 00:53:50.542000000
        NUMBER_OF_FRAMES: 77533
        NUMBER_OF_BYTES : 3993017181
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:1(eng): Audio: eac3 (Dolby Digital Plus + Dolby Atmos), 48000 Hz, 5.1(side), fltp, 768 kb/s (default)
      Metadata:
        BPS             : 768000
        DURATION        : 00:53:50.560000000
        NUMBER_OF_FRAMES: 100955
        NUMBER_OF_BYTES : 310133760
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:2(eng): Subtitle: subrip (srt)
      Metadata:
        title           : English [SDH]
        BPS             : 63
        DURATION        : 00:49:20.875000000
        NUMBER_OF_FRAMES: 709
        NUMBER_OF_BYTES : 23623
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:3(chi): Subtitle: subrip (srt)
      Metadata:
        title           : Chinese (Hong Kong SAR China)
        BPS             : 46
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 705
        NUMBER_OF_BYTES : 18682
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:4(chi): Subtitle: subrip (srt)
      Metadata:
        title           : Chinese Traditional
        BPS             : 47
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 702
        NUMBER_OF_BYTES : 19160
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:5(cze): Subtitle: subrip (srt)
      Metadata:
        title           : Czech
        BPS             : 54
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 699
        NUMBER_OF_BYTES : 21748
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:6(dan): Subtitle: subrip (srt)
      Metadata:
        title           : Danish
        BPS             : 50
        DURATION        : 00:53:40.792000000
        NUMBER_OF_FRAMES: 442
        NUMBER_OF_BYTES : 20363
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:7(dut): Subtitle: subrip (srt)
      Metadata:
        title           : Dutch
        BPS             : 56
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 650
        NUMBER_OF_BYTES : 22850
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:8(spa): Subtitle: subrip (srt)
      Metadata:
        title           : European Spanish
        BPS             : 57
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 699
        NUMBER_OF_BYTES : 23234
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:9(fin): Subtitle: subrip (srt)
      Metadata:
        title           : Finnish
        BPS             : 56
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 699
        NUMBER_OF_BYTES : 22706
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:10(fre): Subtitle: subrip (srt)
      Metadata:
        title           : French
        BPS             : 50
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 707
        NUMBER_OF_BYTES : 20487
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:11(ger): Subtitle: subrip (srt)
      Metadata:
        title           : German
        BPS             : 59
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 740
        NUMBER_OF_BYTES : 24130
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:12(gre): Subtitle: subrip (srt)
      Metadata:
        title           : Greek
        BPS             : 98
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 701
        NUMBER_OF_BYTES : 39613
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:13(hun): Subtitle: subrip (srt)
      Metadata:
        title           : Hungarian
        BPS             : 55
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 687
        NUMBER_OF_BYTES : 22451
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:14(ita): Subtitle: subrip (srt)
      Metadata:
        title           : Italian
        BPS             : 55
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 699
        NUMBER_OF_BYTES : 22370
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:15(jpn): Subtitle: subrip (srt)
      Metadata:
        title           : Japanese
        BPS             : 44
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 696
        NUMBER_OF_BYTES : 18086
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:16(kor): Subtitle: subrip (srt)
      Metadata:
        title           : Korean
        BPS             : 60
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 703
        NUMBER_OF_BYTES : 24430
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:17(spa): Subtitle: subrip (srt)
      Metadata:
        title           : Latin America Spanish
        BPS             : 54
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 700
        NUMBER_OF_BYTES : 21936
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:18(nor): Subtitle: subrip (srt)
      Metadata:
        title           : Norwegian
        BPS             : 54
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 700
        NUMBER_OF_BYTES : 21856
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:19(pol): Subtitle: subrip (srt)
      Metadata:
        title           : Polish
        BPS             : 58
        DURATION        : 00:49:21.500000000
        NUMBER_OF_FRAMES: 699
        NUMBER_OF_BYTES : 21637
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:20(por): Subtitle: subrip (srt)
      Metadata:
        title           : Portuguese
        BPS             : 57
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 698
        NUMBER_OF_BYTES : 23046
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:21(por): Subtitle: subrip (srt)
      Metadata:
        title           : Portuguese Brazilian
        BPS             : 60
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 699
        NUMBER_OF_BYTES : 24477
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:22(rum): Subtitle: subrip (srt)
      Metadata:
        title           : Romanian
        BPS             : 57
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 688
        NUMBER_OF_BYTES : 22990
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:23(slo): Subtitle: subrip (srt)
      Metadata:
        title           : Slovak
        BPS             : 53
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 682
        NUMBER_OF_BYTES : 21424
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:24(swe): Subtitle: subrip (srt)
      Metadata:
        title           : Swedish
        BPS             : 51
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 477
        NUMBER_OF_BYTES : 20561
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
  Stream #0:25(tur): Subtitle: subrip (srt)
      Metadata:
        title           : Turkish
        BPS             : 55
        DURATION        : 00:53:40.625000000
        NUMBER_OF_FRAMES: 700
        NUMBER_OF_BYTES : 22311
        _STATISTICS_WRITING_APP: mkvmerge v84.0 ('Sleeper') 64-bit
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
[AVHWDeviceContext @ 0x559ee2caf640] libva: /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so init failed
[AVHWDeviceContext @ 0x559ee2caf640] libva: /usr/lib/jellyfin-ffmpeg/lib/dri/i965_drv_video.so init failed
[AVHWDeviceContext @ 0x559ee2caf640] Failed to initialise VAAPI connection: -1 (unknown libva error).
Device creation failed: -5.
[vist#0:0/hevc @ 0x559ee2c8d280] [dec:hevc @ 0x559ee2c9d240] No device available for decoder: device type vaapi needed for codec hevc.
[vist#0:0/hevc @ 0x559ee2c8d280] [dec:hevc @ 0x559ee2c9d240] Hardware device setup failed for decoder: Input/output error
[vost#0:0/h264_vaapi @ 0x559ee2c8b140] Error initializing a simple filtergraph
Error opening output file /cache/transcodes/331f7a7a1f16a950c290f7aa3477c42e.m3u8.
Error opening output files: Input/output error



RE: Jellyfin not transcoding on Docker - beridam - 2025-05-15

Sorry for the bump. I don't know what else to try. From what I understand by reading the logs, jellyfin can't find vaapi. But vaapi is (apparently) correctly configured, declared inside the container, and my user "plex" which runs the container and owns all the files that jellyfin reads (as well as the qbittorrent, sonar, radarr, etc. containers) belongs to both "video" and "render". Not only that, but "group add: 105" is declared inside the container as well, just to be on the safe side, but that doesn't seem to do anything.

Is there any way to diagnose whether it's the graphics drivers misbehaving? Because that is my last idea.

Edit. this is my vainfo output. It seems i965 failed to initialize?

Code:
error: can't connect to X server!
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_17
libva error: /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so init failed
libva info: va_openDriver() returns 1
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit


EDIT: SOLVED

I seem to have fixed it. It was a drivers issue. Fixed it, with chatgpt's help, by installing missing blobs for my iGPU. Reinstalling the intel va firmware did nothing, only these commands worked.

Code:
mkdir -p /tmp/linux-firmware-i915 && cd /tmp/linux-firmware-i915

wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/adlp_dmc.bin
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/adlp_dmc_ver2_16.bin
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/tgl_guc_70.bin
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/tgl_guc_70.1.1.bin
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/tgl_guc_69.0.3.bin

sudo mkdir -p /lib/firmware/i915
sudo cp *.bin /lib/firmware/i915/
sudo chmod 644 /lib/firmware/i915/*.bin

sudo reboot

And that did it.