Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jellyfin unnecessarily remuxes movies with external .ass subtitles #1896

Closed
justjanne opened this issue Oct 14, 2019 · 26 comments
Closed

Jellyfin unnecessarily remuxes movies with external .ass subtitles #1896

justjanne opened this issue Oct 14, 2019 · 26 comments
Labels
bug Something isn't working stale Stale and will be closed if no activity occurs

Comments

@justjanne
Copy link

justjanne commented Oct 14, 2019

Describe the bug
Jellyfin forces remuxing of movies if the subtitle format is unsupported — even if this is unnecessary (external ASS subtitles only played back by the custom JS subtitle decoder, never ending up in the video stream, supplied as external file)

ffmpeg -i output for affected files

Input #0, ass, from 'demo.en.ass':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Subtitle: ass
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'The Cat Returns (2002).mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : Neko no Ongaeshi | The Cat Returns (2002)
    encoder         : Lavf57.83.100
  Duration: 01:15:04.00, start: 0.000000, bitrate: 4580 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1036 [SAR 1:1 DAR 480:259], 4265 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(jpn): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 308 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

To Reproduce

  1. Take a normal .mp4 movie, matching above description, with subtitles available as external .ass file
  2. Play the movie with subtitles disabled
  3. Play the movie with subtitles enabled

Expected behavior
In both cases, the file should be played back without any transcoding or remuxing (or subtitles have to be burnt in). Current behaviour is wrong anyway - it doesn't deliver subtitles because target device reports it cannot play those but it doesn't burn them in either.

Actual behavior
With subtitles enabled, the movie is remuxed, because of an unsupported subtitle format

Logs

[2019-10-13 10:36:37.064 +00:00] [INF] Profile: "Unknown Profile", Path: "/media/movies/The Cat Returns (2002).mp4", isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[2019-10-13 10:36:37.064 +00:00] [INF] Not eligible for DirectPlay due to unsupported subtitles
[2019-10-13 10:36:37.064 +00:00] [INF] Not eligible for DirectStream due to unsupported subtitles
http://host-removed//videos/fbda5e84-ffac-b901-4e81-750943540f65/stream.mkv?DeviceId=U2NobGFmemltbWVy&MediaSourceId=fbda5e84ffacb9014e81750943540f65&VideoCodec=h264,vp8&AudioCodec=aac,mp3,opus,flac,vorbis&AudioStreamIndex=1&SubtitleStreamIndex=2&VideoBitrate=10691642&AudioBitrate=308358&StartTimeTicks=343082530&PlaySessionId=2a564e35bfd2494ab3d7fecd9052fba4&api_key=f6faf9ed75fd47b9aef70994388cade6&SubtitleMethod=Encode&TranscodingMaxAudioChannels=2&CopyTimestamps=true&RequireAvc=false&Tag=3716f50bcb9f81d236638fc9ef30504c&h264-profile=high,main,baseline,constrainedbaseline&h264-level=42&aac-audiochannels=2&TranscodeReasons=SubtitleCodecNotSupported

{"Protocol":"File","Id":"fbda5e84ffacb9014e81750943540f65","Path":"/media/movies/The Cat Returns (2002).mp4","Type":"Default","Container":"mov,mp4,m4a,3gp,3g2,mj2","Size":2578668032,"Name":"The Cat Returns (2002)","IsRemote":false,"ETag":"3716f50bcb9f81d236638fc9ef30504c","RunTimeTicks":45040410624,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":false,"RequiresOpening":false,"RequiresClosing":false,"RequiresLooping":false,"SupportsProbing":true,"VideoType":"VideoFile","MediaStreams":[{"Codec":"h264","CodecTag":"avc1","Language":"und","TimeBase":"1/24000","CodecTimeBase":"1001/48000","VideoRange":"SDR","DisplayTitle":"1080P H264","NalLengthSize":"4","IsInterlaced":false,"IsAVC":true,"BitRate":4265161,"BitDepth":8,"RefFrames":1,"IsDefault":true,"IsForced":false,"Height":1036,"Width":1920,"AverageFrameRate":23.9760246,"RealFrameRate":23.9760246,"Profile":"High","Type":"Video","AspectRatio":"1.85:1","Index":0,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"PixelFormat":"yuv420p","Level":50},{"Codec":"aac","CodecTag":"mp4a","Language":"jpn","TimeBase":"1/48000","CodecTimeBase":"1/48000","DisplayTitle":"Jpn AAC 5.1 Default","IsInterlaced":false,"ChannelLayout":"5.1","BitRate":308358,"Channels":6,"SampleRate":48000,"IsDefault":true,"IsForced":false,"Profile":"LC","Type":"Audio","Index":1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Level":0},{"Codec":"ass","Language":"eng","localizedUndefined":"Undefined","localizedDefault":"Default","localizedForced":"Forced","DisplayTitle":"Eng","IsInterlaced":false,"IsDefault":false,"IsForced":false,"Type":"Subtitle","Index":2,"IsExternal":true,"IsTextSubtitleStream":true,"SupportsExternalStream":true,"Path":"/media/movies/The Cat Returns (2002).en.ass"}],"Formats":[],"Bitrate":4580185,"RequiredHttpHeaders":{}}

/usr/local/bin/ffmpeg -ss 00:00:34.308 -fflags +genpts -f mov,mp4,m4a,3gp,3g2,mj2 -i file:"/media/movies/The Cat Returns (2002).mp4" -map 0:0 -map 0:1 -codec:v:0 copy -copyts -avoid_negative_ts disabled -start_at_zero -vsync -1 -map_metadata -1 -map_chapters -1 -threads 0 -codec:a:0 copy -y "/config/transcoding-temp/7989c6bef8f531e6dae5ee023b3e6534.mkv"

More playback logs

[13:44:57] [INF] [68] App: GetPostedPlaybackInfo profile: {"Name": null, "Id": null, "Identification": null, "FriendlyName": null, "Manufacturer": null, "ManufacturerUrl": null, "ModelName": null, "ModelDescription": null, "ModelNumber": null, "ModelUrl": null, "SerialNumber": null, "EnableAlbumArtInDidl": false, "EnableSingleAlbumArtLimit": false, "EnableSingleSubtitleLimit": false, "SupportedMediaTypes": "Audio,Photo,Video", "UserId": null, "AlbumArtPn": null, "MaxAlbumArtWidth": 0, "MaxAlbumArtHeight": 0, "MaxIconWidth": null, "MaxIconHeight": null, "MaxStreamingBitrate": 11000000, "MaxStaticBitrate": 11000000, "MusicStreamingTranscodingBitrate": 192000, "MaxStaticMusicBitrate": null, "SonyAggregationFlags": null, "ProtocolInfo": null, "TimelineOffsetSeconds": 0, "RequiresPlainVideoItems": false, "RequiresPlainFolders": false, "EnableMSMediaReceiverRegistrar": false, "IgnoreTranscodeByteRangeRequests": false, "XmlRootAttributes": [], "DirectPlayProfiles": [{"Container": "mp4,m4v", "AudioCodec": "aac,mp3,opus,flac,vorbis", "VideoCodec": "h264,vp8", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "mkv", "AudioCodec": "aac,mp3,opus,flac,vorbis", "VideoCodec": "h264,vp8", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "mov", "AudioCodec": "aac,mp3,opus,flac,vorbis", "VideoCodec": "h264", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "opus", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "mp3", "AudioCodec": "mp3", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "aac", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "m4a", "AudioCodec": "aac", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "flac", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webma,webm", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "wav", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webm", "AudioCodec": "vorbis,opus", "VideoCodec": "VP8", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "flac", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}], "TranscodingProfiles": [{"Container": "ts", "Type": "Audio", "VideoCodec": null, "AudioCodec": "aac", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 1, "SegmentLength": 0, "BreakOnNonKeyFrames": true, "$type": "TranscodingProfile"}, {"Container": "aac", "Type": "Audio", "VideoCodec": null, "AudioCodec": "aac", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "mp3", "Type": "Audio", "VideoCodec": null, "AudioCodec": "mp3", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "opus", "Type": "Audio", "VideoCodec": null, "AudioCodec": "opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "wav", "Type": "Audio", "VideoCodec": null, "AudioCodec": "wav", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "opus", "Type": "Audio", "VideoCodec": null, "AudioCodec": "opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "mp3", "Type": "Audio", "VideoCodec": null, "AudioCodec": "mp3", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "aac", "Type": "Audio", "VideoCodec": null, "AudioCodec": "aac", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "wav", "Type": "Audio", "VideoCodec": null, "AudioCodec": "wav", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "mkv", "Type": "Video", "VideoCodec": "h264,vp8", "AudioCodec": "aac,mp3,opus,flac,vorbis", "Protocol": null, "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": true, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "mkv", "Type": "Video", "VideoCodec": "h264,vp8", "AudioCodec": "aac,mp3,opus,flac,vorbis", "Protocol": null, "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": true, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "ts", "Type": "Video", "VideoCodec": "h264", "AudioCodec": "mp3,aac,opus", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 1, "SegmentLength": 0, "BreakOnNonKeyFrames": true, "$type": "TranscodingProfile"}, {"Container": "webm", "Type": "Video", "VideoCodec": "vpx", "AudioCodec": "vorbis", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "mp4", "Type": "Video", "VideoCodec": "h264", "AudioCodec": "aac,mp3,opus,flac,vorbis", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": null, "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}], "ContainerProfiles": [], "CodecProfiles": [{"Type": "VideoAudio", "Conditions": [{"Condition": "Equals", "Property": "IsSecondaryAudio", "Value": "false", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "AudioChannels", "Value": "2", "IsRequired": true, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "aac", "Container": null, "$type": "CodecProfile"}, {"Type": "VideoAudio", "Conditions": [{"Condition": "Equals", "Property": "IsSecondaryAudio", "Value": "false", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": null, "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "NotEquals", "Property": "IsAnamorphic", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoProfile", "Value": "high|main|baseline|constrained baseline", "IsRequired": true, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "VideoLevel", "Value": "42", "IsRequired": true, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "VideoBitrate", "Value": "30000000", "IsRequired": true, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "h264", "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "LessThanEqual", "Property": "VideoBitrate", "Value": "30000000", "IsRequired": true, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": null, "Container": null, "$type": "CodecProfile"}, {"Type": "Audio", "Conditions": [{"Condition": "LessThanEqual", "Property": "AudioSampleRate", "Value": "96000", "IsRequired": true, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "flac", "Container": null, "$type": "CodecProfile"}], "ResponseProfiles": [{"Container": "m4v", "AudioCodec": null, "VideoCodec": null, "Type": "Video", "OrgPn": null, "MimeType": "video/mp4", "Conditions": [], "$type": "ResponseProfile"}], "SubtitleProfiles": [{"Format": "js", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}], "$type": "DeviceProfile"}
[13:44:57] [INF] [68] App: User policy for USER. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: False EnableAudioPlaybackTranscoding: False
[13:44:57] [INF] [68] App: Not eligible for DirectPlay due to unsupported subtitles
[13:44:57] [INF] [68] App: Not eligible for DirectStream due to unsupported subtitles
[13:44:57] [INF] [68] App: Profile: Unknown Profile, Path: /media/movies/REDACTED.mp4, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[13:44:57] [INF] [68] App: Not eligible for DirectPlay due to unsupported subtitles
[13:44:57] [INF] [68] App: Not eligible for DirectStream due to unsupported subtitles
[13:44:57] [INF] [68] App: Profile: Unknown Profile, Path: /media/movies/REDACTED.mp4, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[13:44:57] [INF] [68] App: Not eligible for DirectPlay due to unsupported subtitles
[13:44:57] [INF] [68] App: Not eligible for DirectStream due to unsupported subtitles

System (please complete the following information):

  • OS: Docker
  • Browser: Firefox 69.0.2, Chromecast Gen. 1
  • Jellyfin Version: 10.4.0
  • Reverse proxy: kubernetes nginx-ingress
@justjanne justjanne added the bug Something isn't working label Oct 14, 2019
@justjanne
Copy link
Author

If preferred, I can privately share links to the files used, or can provide an account on the instance, to assist with bug reproduction and fixing.

@JustAMan
Copy link
Contributor

This is most likely error in reporting reason, I don't think Firefox can play hevc-encoded videos without transcoding.

P.S. @justjanne I've edited your post to remove the hostname.

@justjanne
Copy link
Author

@JustAMan I actually checked the wrong file, the remuxing happens with this file, which is h264:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'The Cat Returns (2002).mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : Neko no Ongaeshi | The Cat Returns (2002)
    encoder         : Lavf57.83.100
  Duration: 01:15:04.00, start: 0.000000, bitrate: 4580 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1036 [SAR 1:1 DAR 480:259], 4265 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(jpn): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 308 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

@onny
Copy link

onny commented Oct 15, 2019

So Jellyfin-web doesn't support ASS subtitles yet?

@justjanne
Copy link
Author

@onny it absolutely supports them just fine on Firefox, Chrome, etc — but apparently if the playback device is a Chromecast, they break. See the referenced issue above.

@97carmine
Copy link
Contributor

The same happens when you play via DLNA

@JustAMan
Copy link
Contributor

@justjanne So this issue is a doppelganger for jellyfin/jellyfin-chromecast#14, right?

@97carmine please create a separate issue about DLNA.

@justjanne
Copy link
Author

@JustAMan As I couldn't be sure if they're related, or separate, I filed both as separate issues. Please close this issue if you consider it a duplicate

@JustAMan
Copy link
Contributor

@justjanne

@onny it absolutely supports them just fine on Firefox, Chrome, etc — but apparently if the playback device is a Chromecast, they break.

This is what you were saying, which I interpreted as "if I use Firefox to view - subtitles work, but if I cast to Chromecast they're broken"... if this is so please close the issue.

@justjanne
Copy link
Author

@JustAMan well, the encoding and handling of encoding would seem to be an issue with the jellyfin server, as it decides whether to re-encode a movie or not, independently of the client device. Presumably, the code checking for playability of the movie also checks if the subtitle format is supported, regardless of if it would end up in the final container or not

@justjanne
Copy link
Author

But if you'd prefer to handle the issue with the server over on the Chromecast repo's issue tracker, I'll close this one.

@JustAMan
Copy link
Contributor

@JustAMan well, the encoding and handling of encoding would seem to be an issue with the jellyfin server, as it decides whether to re-encode a movie or not, independently of the client device.

This isn't true. Right now it is the client device that reports its "profile" which actually states capabilities of the client device, and according to that capabilities the server decides how to proceed.

However, come to think of it, this one is actually slightly separate, so let's leave it open until we can re-formulate it to make it clearer.

@justjanne
Copy link
Author

@JustAMan well, regardless of the capabilities of the client device, this seems like a bug. If the client device wouldn't support ass subtitles, the video file (which on its own would be supported) should still use DirectStream and DirectPlay (as the video file doesn't even contain ass subtitles, neither before nor after the remuxing step)

@anthonylavado anthonylavado added the confirmed This issue has been reviewed and confirmed label Nov 16, 2019
@seniorm0ment
Copy link

seniorm0ment commented Dec 7, 2019

Seems as if it's related.
Duplicate of #143 from jellyfin-androidtv

Nvidia Shield TV.
Should mention, zero issues when going through an external player on the device.

@JustAMan
Copy link
Contributor

I think it's probably a different one.

I believe we fixed playing .ass subtitles in normal web player in 10.5.0.
@justjanne can you re-check and confirm?

@JustAMan JustAMan removed the confirmed This issue has been reviewed and confirmed label Mar 12, 2020
@justjanne
Copy link
Author

@JustAMan it always worked on web player, not since 10.4.??? on Chromecast though

@JustAMan
Copy link
Contributor

pinging @YouKnowBlom

@YouKnowBlom
Copy link
Contributor

This seems like an issue with the server rather than the old CC receiver @JustAMan

@JustAMan
Copy link
Contributor

How come? Server only decides to burn in if client does not report that it can play subtitles.

@YouKnowBlom
Copy link
Contributor

It's likely I've misunderstood as this thread is a bit all over the place. So the bug is that ass/ssa subs are burned in, as well as being supplied to the client as a separate file, that then gets decoded by the client? Wouldn't that mean the client has support for those subtitle formats?

Is this happening specifically on Chromecast or jf-web as well?

@justjanne
Copy link
Author

Steps to Reproduce:

  1. Disable any and all transcoding and remuxing
  2. Take a video file of format mp4, with h264 yuv420p 8-bit video, and AAC audio, which can be played back directly in the browser.
  3. Take an .ass subtitle file, so that it is associated with the video.
  4. Play the video with subtitles on Jellyfin Chromecast.

Expected:
Either it plays with subtitles, or it plays without subtitles, in either case completely natively without any transcoding

Actual:
Jellyfin will remux the video from mp4(h264, aac) to mp4(h264, aac), with exact same input and output formats, because it says the subtitle format isn’t supported and it has to create a muxed file without subtitles (observe that the subtitles never were part of the media file itself).

@JustAMan
Copy link
Contributor

JustAMan commented May 7, 2020

What happens with subtitles though, are they displayed by CC? As from what you said I think they weren't burnt in.

Also giving us debug server logs of when playback starts (including ffmpeg command line) would be cool.

@justjanne
Copy link
Author

justjanne commented May 7, 2020

@JustAMan Server logs are in the first post on this issue, are those enough or would you want loglevel debug logs?

Also, no, subtitles aren’t displayed at all on Chromecast

@JustAMan
Copy link
Contributor

JustAMan commented May 14, 2020

So I've looked into logs more, and it seems there are two seemingly unrelated issues, first one is CC reporting that it cannot play .ass subtitles (so server receives different profiles when getting media info to display to the user and when actually playing from CC, which is kinda expected as profiles attribute to different devices), and second one is JF remuxing a file needlessly.

First one should be fixed when @YouKnowBlom finishes polishing our new CC receiver - I still hope we'd be able to integrate Octopus there, so CC would play .ass subtitles by itself.

For the second one I'm going to edit this issue so it reflects it better. @justjanne please verify I have edited correctly. Please also add some info on your instance configuration - whether transcoding and remuxing are enabled (or not).

@JustAMan JustAMan changed the title Jellyfin unnecessarily transcodes movies with external .ass subtitles Jellyfin unnecessarily remuxes movies with external .ass subtitles May 14, 2020
@825i
Copy link

825i commented May 20, 2020

Nevermind sorry.

@stale
Copy link

stale bot commented Sep 18, 2020

This issue has gone 120 days without comment. To avoid abandoned issues, it will be closed in 21 days if there are no new comments.
If you're the original submitter of this issue, please comment confirming if this issue still affects you in the latest release or nightlies, or close the issue if it has been fixed. If you're another user also affected by this bug, please comment confirming so. Either action will remove the stale label.
This bot exists to prevent issues from becoming stale and forgotten. Jellyfin is always moving forward, and bugs are often fixed as side effects of other changes. We therefore ask that bug report authors remain vigilant about their issues to ensure they are closed if fixed, or re-confirmed - perhaps with fresh logs or reproduction examples - regularly. If you have any questions you can reach us on Matrix or Social Media.

@stale stale bot added the stale Stale and will be closed if no activity occurs label Sep 18, 2020
@stale stale bot closed this as completed Oct 9, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working stale Stale and will be closed if no activity occurs
Projects
None yet
Development

No branches or pull requests

8 participants