Problem with external subtitles in Jellyfin 10.8

Hello, external subtitles do not show up in the player for all media in the current Jellyfin beta (10.8.0 beta 1). The only subtitles visible are those embedded in the video.

What I meant by not showing up was that they are not visible in the subtitles menu.

The external subtitles issue still exists.

I am on the latest InfuseSync 1.4.2. This is what I can see from jellyfin logs:

[2022-06-10 13:56:27.364 +00:00] [DBG] [22] MediaBrowser.MediaEncoding.Subtitles.SubtitleEncoder: charset "utf-8" detected for "/data/media/xxxxxxxxxxxxxxxxxxxxxxxxxx.en.srt"
[2022-06-10 13:56:27.378 +00:00] [ERR] [8] Jellyfin.Server.Middleware.ExceptionMiddleware: Error processing request. URL "GET" "/Videos/fb1684376cf0dc9dbe5644ee58026ddb/fb1684376cf0dc9dbe5644ee58026ddb/Subtitles/0/0/Stream.subrip".
System.ArgumentException: Unsupported format: subrip
   at MediaBrowser.MediaEncoding.Subtitles.SubtitleEncoder.GetWriter(String format)
   at MediaBrowser.MediaEncoding.Subtitles.SubtitleEncoder.ConvertSubtitles(Stream stream, String inputFormat, String outputFormat, Int64 startTimeTicks, Int64 endTimeTicks, Boolean preserveOriginalTimestamps, CancellationToken cancellationToken)
   at MediaBrowser.MediaEncoding.Subtitles.SubtitleEncoder.MediaBrowser.Controller.MediaEncoding.ISubtitleEncoder.GetSubtitles(BaseItem item, String mediaSourceId, Int32 subtitleStreamIndex, String outputFormat, Int64 startTimeTicks, Int64 endTimeTicks, Boolean preserveOriginalTimestamps, CancellationToken cancellationToken)
   at Jellyfin.Api.Controllers.SubtitleController.GetSubtitle(Guid routeItemId, String routeMediaSourceId, Int32 routeIndex, String routeFormat, Nullable`1 itemId, String mediaSourceId, Nullable`1 index, String format, Nullable`1 endPositionTicks, Boolean copyTimestamps, Boolean addVttTimeMap, Int64 startPositionTicks)
   at lambda_method1547(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(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 Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Jellyfin.Server.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
   at Jellyfin.Server.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
   at Jellyfin.Server.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
   at Jellyfin.Server.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.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.Server.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Server.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Server.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)

It looks like Jellyfin is complaining about an unsupported ‘subrip’ subtitle format.

Not sure this is an issue with Infuse. Does this work in other clients?

What type of subtitles?

It works perfectly well in the official web client and windows client from jellyfin. It boggled me, so I have taken a peek at how the jellyfin web gets its subtitles, and the request was actually similar. I think Jellyfin must have changed the API route for fetching subrip subtitles.

Judging by the logs, Infuse was trying to hit the /Videos/fb1684376cf0dc9dbe5644ee58026ddb/fb1684376cf0dc9dbe5644ee58026ddb/Subtitles/0/0/Stream.subrip, while jellyfin web cliented requested a slightly different route (different only in the extension): /Videos/fb168437-6cf0-dc9d-be56-44ee58026ddb/fb1684376cf0dc9dbe5644ee58026ddb/Subtitles/0/0/Stream.js

What do you think?

Looking into this. Thanks.

1 Like

I have found that the URI /Videos/fb168437-6cf0-dc9d-be56-44ee58026ddb/fb1684376cf0dc9dbe5644ee58026ddb/Subtitles/0/0/Stream.srt works as well. /Videos/fb168437-6cf0-dc9d-be56-44ee58026ddb/fb1684376cf0dc9dbe5644ee58026ddb/Subtitles/0/0/Stream.subrip returns HTTP 400 code along with an error message: Error processing request.

Hi. You know that Jellyfin is out of beta? Did you try upgrading to the official 1.8.0? Maybe the problem is fixed?

Yeah, I am aware. I have already updated. However the issue is most likely not related to Jellyfin, but rather Infuse, since other jellyfin clients work as expected. There was probably a slight change in 10.8 API which is causing the problem for Infuse.

Might be. I noticed that deleting media with subtitles which were downloaded using Jellyfin errors out, even though Infuse finally deletes the show. So maybe this is an Infuse problem indeed

If this helps, there are folks over at GitHub experiencing the same issue and even linked our forum post :smiley: External subtitles are not displayed · Issue #417 · jellyfin/Swiftfin · GitHub There’s a linked PR as well with possible fix.

Seems to be fixed in the latest beta. Nice one, @james!

1 Like

7.4.1 with a fix for this is now available on the App Store. :slight_smile:

1 Like