Support for stream copy of H264 streams in AVI #4085

Closed
opened 2026-02-07 00:23:59 +03:00 by OVERLORD · 5 comments
Owner

Originally created by @gaudat on GitHub (Aug 6, 2022).

Continuing from #8164 where it is observed the H264 streams in AVI containers are always transcoded.
@cvium mentioned H264 is not supposed to go in AVI containers and the correct codec is be Xvid (Appears in Web UI as MPEG4).

Command to create the AVI file:
ffmpeg -re -f lavfi -i "smptehdbars=rate=30:size=1920x1080" -f lavfi -i "sine=frequency=1000:sample_rate=48000" -to 10 -c:v h264 -profile:v baseline -pix_fmt yuv420p -preset ultrafast -tune zerolatency -crf 28 -c:a mp3 testvid.avi

Media Info of the file

Container: avi
Path: [REDACTED]\testvid.avi
Size: 0 MB

Video
Title: 1080p H264 SDR
Codec: H264
Codec tag: H264
AVC: No
Profile: Constrained Baseline
Level: 40
Resolution: 1920x1080
Aspect ratio: 16:9
Interlaced: No
Framerate: 30
Bitrate: 129 kbps
Bit depth: 8 bit
Video range: SDR
Video range type: SDR
Pixel format: yuv420p
Ref frames: 1
NAL: 0

Audio
Title: MP3 - Mono - Default
Codec: MP3
Layout: mono
Channels: 1 ch
Bitrate: 64 kbps
Sample rate: 48000 Hz
Default: Yes
Forced: No
External: No

Logs

Jul 24 03:21:19 raspberrypi jellyfin[14513]: [03:21:19] [DBG] 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": null, "MaxAlbumArtHeight": null, "MaxIconWidth": null, "MaxIconHeight": null, "MaxStreamingBitrate": 120000000, "MaxStaticBitrate": 100000000, "MusicStreamingTranscodingBitrate": 384000, "MaxStaticMusicBitrate": 8000000, "SonyAggregationFlags": null, "ProtocolInfo": null, "TimelineOffsetSeconds": 0, "RequiresPlainVideoItems": false, "RequiresPlainFolders": false, "EnableMSMediaReceiverRegistrar": false, "IgnoreTranscodeByteRangeRequests": false, "XmlRootAttributes": [], "DirectPlayProfiles": [{"Container": "webm", "AudioCodec": "vorbis,opus", "VideoCodec": "vp8,vp9,av1", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "mp4,m4v", "AudioCodec": "aac,mp3,opus,flac,vorbis", "VideoCodec": "h264,vp8,vp9,av1", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "opus", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webm", "AudioCodec": "opus", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "mp3", "AudioCodec": null, "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": "m4b", "AudioCodec": "aac", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "flac", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webma", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webm", "AudioCodec": "webma", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "wav", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "ogg", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}], "TranscodingProfiles": [{"Container": "ts", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 1, "SegmentLength": 0, "BreakOnNonKeyFrames": true, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "aac", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "mp3", "Type": "Audio", "VideoCodec": "", "AudioCodec": "mp3", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "opus", "Type": "Audio", "VideoCodec": "", "AudioCodec": "opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "wav", "Type": "Audio", "VideoCodec": "", "AudioCodec": "wav", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "opus", "Type": "Audio", "VideoCodec": "", "AudioCodec": "opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "mp3", "Type": "Audio", "VideoCodec": "", "AudioCodec": "mp3", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "aac", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "wav", "Type": "Audio", "VideoCodec": "", "AudioCodec": "wav", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "ts", "Type": "Video", "VideoCodec": "h264", "AudioCodec": "aac,mp3", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 1, "SegmentLength": 0, "BreakOnNonKeyFrames": true, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "webm", "Type": "Video", "VideoCodec": "vp8,vp9,av1,vpx", "AudioCodec": "vorbis,opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$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, "Conditions": [], "$type": "TranscodingProfile"}], "ContainerProfiles": [], "CodecProfiles": [{"Type": "VideoAudio", "Conditions": [{"Condition": "Equals", "Property": "IsSecondaryAudio", "Value": "false", "IsRequired": false, "$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": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoRangeType", "Value": "SDR", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "VideoLevel", "Value": "52", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "NotEquals", "Property": "IsInterlaced", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "h264", "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "NotEquals", "Property": "IsAnamorphic", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoProfile", "Value": "main", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoRangeType", "Value": "SDR", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "VideoLevel", "Value": "120", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "NotEquals", "Property": "IsInterlaced", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "hevc", "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "EqualsAny", "Property": "VideoRangeType", "Value": "SDR|HDR10|HLG", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "vp9", "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "EqualsAny", "Property": "VideoRangeType", "Value": "SDR|HDR10|HLG", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "av1", "Container": null, "$type": "CodecProfile"}], "ResponseProfiles": [{"Container": "m4v", "AudioCodec": null, "VideoCodec": null, "Type": "Video", "OrgPn": null, "MimeType": "video/mp4", "Conditions": [], "$type": "ResponseProfile"}], "SubtitleProfiles": [{"Format": "vtt", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ass", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ssa", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}], "$type": "DeviceProfile"}
Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [INF] User policy for [REDACTED]. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [DBG] Profile: Unknown Profile, Path: [REDACTED], isEligibleForDirectPlay: True, isEligibleForDirectStream: False
Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [DBG] Profile: VideoAudioCodecProfile, DirectPlay=false. Reason=Unknown Profile.IsSecondaryAudio Condition: Equals. ConditionValue: false. IsRequired: False. Path: [REDACTED]
Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [DBG] DirectPlay Result for Profile: Anonymous Profile, Path: [REDACTED], PlayMethod: null, AudioStreamIndex: 1, SubtitleStreamIndex: -1, Reasons: SecondaryAudioNotSupported
Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [DBG] Transcode Result for Profile: Anonymous Profile, Path: [REDACTED], PlayMethod: Transcode, AudioStreamIndex: 1, SubtitleStreamIndex: -1, Reasons: SecondaryAudioNotSupported
Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [INF] StreamBuilder.BuildVideoItem( Profile=Anonymous Profile, Path=[REDACTED], AudioStreamIndex=null, SubtitleStreamIndex=null ) => ( PlayMethod=Transcode, TranscodeReason=SecondaryAudioNotSupported ) media:/videos/de91dce8-abbe-9c68-93fa-e46f0ff8415e/master.m3u8?MediaSourceId=de91dce8abbe9c6893fae46f0ff8415e&VideoCodec=h264,h264&AudioCodec=mp3&AudioStreamIndex=1&VideoBitrate=139936000&AudioBitrate=64000&AudioSampleRate=48000&MaxFramerate=30&api_key=<token>&SubtitleMethod=Encode&TranscodingMaxAudioChannels=2&RequireAvc=false&Tag=21f31e38e6113e678863bbfafa6f78b5&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-level=40&h264-videobitdepth=8&h264-profile=constrainedbaseline&h264-audiochannels=1&h264-rangetype=SDR&h264-deinterlace=true&TranscodeReasons=SecondaryAudioNotSupported

FFmpeg Logs
TBD

Stats for Nerds Screenshots
TBD

Server System (please complete the following information):

  • OS: Debian amd64 / Docker on Debian arm64
  • Jellyfin Version: 10.9.0
  • Hardware settings & device: No hardware encoding configured
  • Reverse proxy: None / Nginx
  • Other hardware notes: Nil

Client System (please complete the following information):

  • Device: Any
  • OS: Win 10 + Win 11 + Android
  • Client: Web UI
  • Browser: FF on Android + Chrome/FF on Windows
  • Client and Browser Version: Latest as of 2022-07-27
Originally created by @gaudat on GitHub (Aug 6, 2022). Continuing from #8164 where it is observed the H264 streams in AVI containers are always transcoded. @cvium mentioned H264 is not supposed to go in AVI containers and the correct codec is be Xvid (Appears in Web UI as MPEG4). Command to create the AVI file: `ffmpeg -re -f lavfi -i "smptehdbars=rate=30:size=1920x1080" -f lavfi -i "sine=frequency=1000:sample_rate=48000" -to 10 -c:v h264 -profile:v baseline -pix_fmt yuv420p -preset ultrafast -tune zerolatency -crf 28 -c:a mp3 testvid.avi` **Media Info of the file** ```testvid Container: avi Path: [REDACTED]\testvid.avi Size: 0 MB Video Title: 1080p H264 SDR Codec: H264 Codec tag: H264 AVC: No Profile: Constrained Baseline Level: 40 Resolution: 1920x1080 Aspect ratio: 16:9 Interlaced: No Framerate: 30 Bitrate: 129 kbps Bit depth: 8 bit Video range: SDR Video range type: SDR Pixel format: yuv420p Ref frames: 1 NAL: 0 Audio Title: MP3 - Mono - Default Codec: MP3 Layout: mono Channels: 1 ch Bitrate: 64 kbps Sample rate: 48000 Hz Default: Yes Forced: No External: No ``` **Logs** ``` Jul 24 03:21:19 raspberrypi jellyfin[14513]: [03:21:19] [DBG] 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": null, "MaxAlbumArtHeight": null, "MaxIconWidth": null, "MaxIconHeight": null, "MaxStreamingBitrate": 120000000, "MaxStaticBitrate": 100000000, "MusicStreamingTranscodingBitrate": 384000, "MaxStaticMusicBitrate": 8000000, "SonyAggregationFlags": null, "ProtocolInfo": null, "TimelineOffsetSeconds": 0, "RequiresPlainVideoItems": false, "RequiresPlainFolders": false, "EnableMSMediaReceiverRegistrar": false, "IgnoreTranscodeByteRangeRequests": false, "XmlRootAttributes": [], "DirectPlayProfiles": [{"Container": "webm", "AudioCodec": "vorbis,opus", "VideoCodec": "vp8,vp9,av1", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "mp4,m4v", "AudioCodec": "aac,mp3,opus,flac,vorbis", "VideoCodec": "h264,vp8,vp9,av1", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "opus", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webm", "AudioCodec": "opus", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "mp3", "AudioCodec": null, "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": "m4b", "AudioCodec": "aac", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "flac", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webma", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webm", "AudioCodec": "webma", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "wav", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "ogg", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}], "TranscodingProfiles": [{"Container": "ts", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 1, "SegmentLength": 0, "BreakOnNonKeyFrames": true, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "aac", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "mp3", "Type": "Audio", "VideoCodec": "", "AudioCodec": "mp3", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "opus", "Type": "Audio", "VideoCodec": "", "AudioCodec": "opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "wav", "Type": "Audio", "VideoCodec": "", "AudioCodec": "wav", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "opus", "Type": "Audio", "VideoCodec": "", "AudioCodec": "opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "mp3", "Type": "Audio", "VideoCodec": "", "AudioCodec": "mp3", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "aac", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "wav", "Type": "Audio", "VideoCodec": "", "AudioCodec": "wav", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "ts", "Type": "Video", "VideoCodec": "h264", "AudioCodec": "aac,mp3", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 1, "SegmentLength": 0, "BreakOnNonKeyFrames": true, "Conditions": [], "$type": "TranscodingProfile"}, {"Container": "webm", "Type": "Video", "VideoCodec": "vp8,vp9,av1,vpx", "AudioCodec": "vorbis,opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "Conditions": [], "$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, "Conditions": [], "$type": "TranscodingProfile"}], "ContainerProfiles": [], "CodecProfiles": [{"Type": "VideoAudio", "Conditions": [{"Condition": "Equals", "Property": "IsSecondaryAudio", "Value": "false", "IsRequired": false, "$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": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoRangeType", "Value": "SDR", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "VideoLevel", "Value": "52", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "NotEquals", "Property": "IsInterlaced", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "h264", "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "NotEquals", "Property": "IsAnamorphic", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoProfile", "Value": "main", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoRangeType", "Value": "SDR", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "VideoLevel", "Value": "120", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "NotEquals", "Property": "IsInterlaced", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "hevc", "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "EqualsAny", "Property": "VideoRangeType", "Value": "SDR|HDR10|HLG", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "vp9", "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "EqualsAny", "Property": "VideoRangeType", "Value": "SDR|HDR10|HLG", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "av1", "Container": null, "$type": "CodecProfile"}], "ResponseProfiles": [{"Container": "m4v", "AudioCodec": null, "VideoCodec": null, "Type": "Video", "OrgPn": null, "MimeType": "video/mp4", "Conditions": [], "$type": "ResponseProfile"}], "SubtitleProfiles": [{"Format": "vtt", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ass", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ssa", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}], "$type": "DeviceProfile"} Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [INF] User policy for [REDACTED]. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [DBG] Profile: Unknown Profile, Path: [REDACTED], isEligibleForDirectPlay: True, isEligibleForDirectStream: False Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [DBG] Profile: VideoAudioCodecProfile, DirectPlay=false. Reason=Unknown Profile.IsSecondaryAudio Condition: Equals. ConditionValue: false. IsRequired: False. Path: [REDACTED] Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [DBG] DirectPlay Result for Profile: Anonymous Profile, Path: [REDACTED], PlayMethod: null, AudioStreamIndex: 1, SubtitleStreamIndex: -1, Reasons: SecondaryAudioNotSupported Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [DBG] Transcode Result for Profile: Anonymous Profile, Path: [REDACTED], PlayMethod: Transcode, AudioStreamIndex: 1, SubtitleStreamIndex: -1, Reasons: SecondaryAudioNotSupported Jul 24 03:21:20 raspberrypi jellyfin[14513]: [03:21:20] [INF] StreamBuilder.BuildVideoItem( Profile=Anonymous Profile, Path=[REDACTED], AudioStreamIndex=null, SubtitleStreamIndex=null ) => ( PlayMethod=Transcode, TranscodeReason=SecondaryAudioNotSupported ) media:/videos/de91dce8-abbe-9c68-93fa-e46f0ff8415e/master.m3u8?MediaSourceId=de91dce8abbe9c6893fae46f0ff8415e&VideoCodec=h264,h264&AudioCodec=mp3&AudioStreamIndex=1&VideoBitrate=139936000&AudioBitrate=64000&AudioSampleRate=48000&MaxFramerate=30&api_key=<token>&SubtitleMethod=Encode&TranscodingMaxAudioChannels=2&RequireAvc=false&Tag=21f31e38e6113e678863bbfafa6f78b5&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-level=40&h264-videobitdepth=8&h264-profile=constrainedbaseline&h264-audiochannels=1&h264-rangetype=SDR&h264-deinterlace=true&TranscodeReasons=SecondaryAudioNotSupported ``` **FFmpeg Logs** ```TBD``` <!-- Please paste any FFmpeg logs if remuxing or transcoding appears to be part of the issue. --> **Stats for Nerds Screenshots** ```TBD``` <!-- If available, add screenshots of the stats for nerds screen to help show the issue problem. --> **Server System (please complete the following information):** - OS: Debian amd64 / Docker on Debian arm64 - Jellyfin Version: 10.9.0 - Hardware settings & device: No hardware encoding configured - Reverse proxy: None / Nginx - Other hardware notes: Nil - **Client System (please complete the following information):** - Device: Any - OS: Win 10 + Win 11 + Android - Client: Web UI - Browser: FF on Android + Chrome/FF on Windows - Client and Browser Version: Latest as of 2022-07-27
OVERLORD added the stale label 2026-02-07 00:23:59 +03:00
Author
Owner

@gaudat commented on GitHub (Aug 6, 2022):

https://github.com/jellyfin/jellyfin/blob/master/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs#L1877

Looks like Stream Copy of H264 in AVI is specifically excluded here. That exclusion is here since the initial commit of our encestor "Emby.Common". Maybe really old versions of ffmpeg did not support it?

The comment // see Coach S01E01 - Kelly and the Professor(0).avi is worth looking into.

@gaudat commented on GitHub (Aug 6, 2022): https://github.com/jellyfin/jellyfin/blob/master/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs#L1877 Looks like Stream Copy of H264 in AVI is specifically excluded here. That exclusion is here since the initial commit of our encestor "Emby.Common". Maybe really old versions of ffmpeg did not support it? The comment `// see Coach S01E01 - Kelly and the Professor(0).avi` is worth looking into.
Author
Owner

@gaudat commented on GitHub (Aug 6, 2022):

Hold on, why ffprobe returns "is_avc" == false on the file? I thought H264 and AVC are the same thing.

https://github.com/jellyfin/jellyfin/issues/8164#issuecomment-1193150478

I found a SO question on this. Link
Then mentioned the flag -flags +global_header. Maybe we can add it to our ffprobe invocation.

Digging in the ffmpeg source code reveals there 2 H264 codecs, "avc1" and "h264". From a discussion on the difference between two Link, "Micheal Espinola" says:

Almost 10 years later, but here is your answer – if you never found out on your own:

One is a raw stream, and the other is not. Streams are saved in small bits (.mts files) that do not have “start codes” indicating where they stop and end. When you save (concatenate/recombine) a stream to a proper file, the start codes are added.

The codec is the same, but the formalities of the file internally have different indicators.

Another discussion Link says:

containers like MP4 and MKV don't need the start codes in the AVC elementary stream. OTOH, containers like MPG, TS and AVI work better when the AVC elementary stream includes the start codes. The Fourcc "H264" normally means the AVI file contains AVC in the so-called Annex B format. Using the Fourcc "AVC1" is not recommended, because it may break the functionality of several splitters and/or decoders.

So we can deduce that stream copy of H264 streams on current Jellyfin only works on MP4 and MKV (both observed) but not AVI (observed) or TS.

"Alessandro Angeli" saying there is nothing special about H264 in AVI: Link

There's really nothing special about H.264: MPEG-4.2/ASP, aka DivX/XviD, or WMV/VC-1 also have reordered B-brames (and even GMC ones) and they have always worked in AVI.
There is also nothing special in MP4 to support reordered frames: MP4 simply indexes the frames in decoding order marking the keyframes, same as AVI or WMV or MPEG-2 PS/TS.
After all, the encoder spits out the ES in decodng order and that is what the decoder expects and what AVI or any other container stores.
The only grain of truth in AVI being unsuitable to store H.264 (or anything else with reordered frames, including DivX/XviD) is not actually something about AVI itself but about old VCM codecs, traditionally used to decode data in AVIs, which assume non-reordered frames (1 compressed frame comes in, 1 uncompressed frame goes out). Despite that, a VCM decoder can still do an acceptable job. Since almost no player out there uses VFW for playback anymore and newer frameworks like DirectShow or VLC/ffmpeg have no such limitation, storing H.264, which would have worked even with VCM codecs, has no issues at all.
That does not mean that H.264 in AVI will work on an STB, which may have hardcoded combinations of formats and H.264 in AVI is not a common one.
FYI, I use H.264 in AVIs regularly.
This is just another legend like the "fact" that AVI does not stream while in fact AVI streams perfectly well, since it is no different than ASF/WMV or MOV/MP4. The only reason while AVIs do not usually stream on Windows is the implementation of the URLReader and AVISplitter in DirectShow: the AVISplitter wants the index right away, even if it is not needed (if fact, it will reject an AVI without an index, despite the fact that the index is optional), so it will seek to the end of the file first, but the URLReader is not smart enough to use the protocol's seeking capabilities and will simply cache the whole file until it can return the index.
Both situations arise from mistaking what AVI can do for limitations of specific implementations of AVI players.
@gaudat commented on GitHub (Aug 6, 2022): Hold on, why ffprobe returns "is_avc" == false on the file? I thought H264 and AVC are the same thing. https://github.com/jellyfin/jellyfin/issues/8164#issuecomment-1193150478 I found a SO question on this. [Link](https://stackoverflow.com/questions/51844515/ffmpeg-produces-is-avc-false-with-h264-nvenc-tee-muxer) Then mentioned the flag `-flags +global_header`. Maybe we can add it to our ffprobe invocation. Digging in the ffmpeg source code reveals there 2 H264 codecs, "avc1" and "h264". From a discussion on the difference between two [Link](https://creativecow.net/forums/thread/avc1-vs-h264/), "Micheal Espinola" says: ``` Almost 10 years later, but here is your answer – if you never found out on your own: One is a raw stream, and the other is not. Streams are saved in small bits (.mts files) that do not have “start codes” indicating where they stop and end. When you save (concatenate/recombine) a stream to a proper file, the start codes are added. The codec is the same, but the formalities of the file internally have different indicators. ``` Another discussion [Link](https://forum.videohelp.com/threads/360190-Is-avc1-the-same-for-H-264-MPEG-4-AVC) says: ``` containers like MP4 and MKV don't need the start codes in the AVC elementary stream. OTOH, containers like MPG, TS and AVI work better when the AVC elementary stream includes the start codes. The Fourcc "H264" normally means the AVI file contains AVC in the so-called Annex B format. Using the Fourcc "AVC1" is not recommended, because it may break the functionality of several splitters and/or decoders. ``` So we can deduce that stream copy of H264 streams on current Jellyfin only works on MP4 and MKV (both observed) but not AVI (observed) or TS. "Alessandro Angeli" saying there is nothing special about H264 in AVI: [Link](https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/39b287de-7277-4461-a72f-070c289c2a32/how-to-write-h264-encoded-data-into-avi-container?forum=windowsdirectshowdevelopment) ``` There's really nothing special about H.264: MPEG-4.2/ASP, aka DivX/XviD, or WMV/VC-1 also have reordered B-brames (and even GMC ones) and they have always worked in AVI. There is also nothing special in MP4 to support reordered frames: MP4 simply indexes the frames in decoding order marking the keyframes, same as AVI or WMV or MPEG-2 PS/TS. After all, the encoder spits out the ES in decodng order and that is what the decoder expects and what AVI or any other container stores. The only grain of truth in AVI being unsuitable to store H.264 (or anything else with reordered frames, including DivX/XviD) is not actually something about AVI itself but about old VCM codecs, traditionally used to decode data in AVIs, which assume non-reordered frames (1 compressed frame comes in, 1 uncompressed frame goes out). Despite that, a VCM decoder can still do an acceptable job. Since almost no player out there uses VFW for playback anymore and newer frameworks like DirectShow or VLC/ffmpeg have no such limitation, storing H.264, which would have worked even with VCM codecs, has no issues at all. That does not mean that H.264 in AVI will work on an STB, which may have hardcoded combinations of formats and H.264 in AVI is not a common one. FYI, I use H.264 in AVIs regularly. This is just another legend like the "fact" that AVI does not stream while in fact AVI streams perfectly well, since it is no different than ASF/WMV or MOV/MP4. The only reason while AVIs do not usually stream on Windows is the implementation of the URLReader and AVISplitter in DirectShow: the AVISplitter wants the index right away, even if it is not needed (if fact, it will reject an AVI without an index, despite the fact that the index is optional), so it will seek to the end of the file first, but the URLReader is not smart enough to use the protocol's seeking capabilities and will simply cache the whole file until it can return the index. Both situations arise from mistaking what AVI can do for limitations of specific implementations of AVI players. ```
Author
Owner

@gaudat commented on GitHub (Aug 6, 2022):

Found the source.

https://emby.media/community/index.php?/topic/54683-emby-having-problems-with-avi-files/

From Luke:

@@Waldonnis this is an interesting one because it occurs when trying to stream copy both the video and audio and output with hls.
I think the video stream needs to be transcoded but making this decision is a little tricky. What I'm leaning towards right now is not allowing h264 stream copy from an avi container when the AVC flag is NO. These kinds of blanket bans are always difficult though because inevitably someone will come out of the woodwork and complain about the transcoding.

And 4 years later someone starts complaining about it haha

From Waldonnis:

I'm not sure what there might be to look for, really.  Looking back at some of my test archive, I can't find an AVI file that contains h.264 that actually has is_avc set to 1, so that may not be a reliable indicator.
In this case, the lack of PTS will be problematic when remuxing to HLS.  I haven't tried it in an Emby context, but -fflags +genpts will probably be needed to create the streams' PTS values.  Unfortunately, the only way I can think of offhand to tell if this would be needed would be from looking at the first video frame's pkt_pts value (if it's N/A, it'll need timestamps), which isn't exactly the easiest or quickest thing to do during a probe.  Doesn't help that ffprobe's stream info for the video stream shows a 0 start_pts value, which doesn't match the frame dump info's "N/A" (audio does have PTS, which may be where that value is coming from).
@[@Arkieboy72472](https://emby.media/community/index.php?/profile/259120-arkieboy72472/), AVI and Roku tend not to play well together (I say this as a fellow Roku owner, and I'm using a Roku to test this case right now because of that).  Still, I'm hopeful that Luke and I can figure out a way to get stream copies to work so you don't have to manually remux to mkv or mp4 if you don't want to...and I'm trying to avoid transcoding video entirely unless absolutely necessary.
Actually, I'll amend the above AVI and h.264 don't generally play well together  :P
Yes and no.  The PTS/DTS differences between the ffmpeg (with genpts) and mkvmerge output aren't what I expected to see, and playback of ffmpeg's output is jerky (mkvmerge's is fine).  I've been distracted most of the night, so I still have a lot of things to look at and try.
Edit: As stated before, the mp4 remux plays fine, and both pkt_dts and pkt_pts appear to have been completely (re)generated (pkt_dts is the same as the original).  The same cannot be said for the matroska or mpegts remuxes (the mpegts frames' timestamps are even stranger than the matroska file).  I'm wondering if there's a problem with the best effort timestamp estimation with this particular input container/codec combo and it not having PTS set.  I did find a bug report from years ago that was similar, but it had ordering issues as well that don't apply here.  I've also found some discussion indicating that nobody has ever really addressed these cases on the avcodec/ffmpeg side, but didn't look at the code to see if that was the case.
I know timestamp generation for h.264 is difficult since it supports variable framerate, but why there's a difference in muxers' output is puzzling without looking deeply at the code.  I'd say that remuxing to matroska file-wise may not be the best idea unless you use mkvmerge (which seems to do it well).  I have no idea what to do with HLS (using mpegts segments) yet, though, as I haven't done many tests with it yet.
@gaudat commented on GitHub (Aug 6, 2022): Found the source. https://emby.media/community/index.php?/topic/54683-emby-having-problems-with-avi-files/ From Luke: ``` @@Waldonnis this is an interesting one because it occurs when trying to stream copy both the video and audio and output with hls. I think the video stream needs to be transcoded but making this decision is a little tricky. What I'm leaning towards right now is not allowing h264 stream copy from an avi container when the AVC flag is NO. These kinds of blanket bans are always difficult though because inevitably someone will come out of the woodwork and complain about the transcoding. ``` And 4 years later someone starts complaining about it haha From Waldonnis: ``` I'm not sure what there might be to look for, really. Looking back at some of my test archive, I can't find an AVI file that contains h.264 that actually has is_avc set to 1, so that may not be a reliable indicator. In this case, the lack of PTS will be problematic when remuxing to HLS. I haven't tried it in an Emby context, but -fflags +genpts will probably be needed to create the streams' PTS values. Unfortunately, the only way I can think of offhand to tell if this would be needed would be from looking at the first video frame's pkt_pts value (if it's N/A, it'll need timestamps), which isn't exactly the easiest or quickest thing to do during a probe. Doesn't help that ffprobe's stream info for the video stream shows a 0 start_pts value, which doesn't match the frame dump info's "N/A" (audio does have PTS, which may be where that value is coming from). @[@Arkieboy72472](https://emby.media/community/index.php?/profile/259120-arkieboy72472/), AVI and Roku tend not to play well together (I say this as a fellow Roku owner, and I'm using a Roku to test this case right now because of that). Still, I'm hopeful that Luke and I can figure out a way to get stream copies to work so you don't have to manually remux to mkv or mp4 if you don't want to...and I'm trying to avoid transcoding video entirely unless absolutely necessary. Actually, I'll amend the above AVI and h.264 don't generally play well together :P ``` ``` Yes and no. The PTS/DTS differences between the ffmpeg (with genpts) and mkvmerge output aren't what I expected to see, and playback of ffmpeg's output is jerky (mkvmerge's is fine). I've been distracted most of the night, so I still have a lot of things to look at and try. Edit: As stated before, the mp4 remux plays fine, and both pkt_dts and pkt_pts appear to have been completely (re)generated (pkt_dts is the same as the original). The same cannot be said for the matroska or mpegts remuxes (the mpegts frames' timestamps are even stranger than the matroska file). I'm wondering if there's a problem with the best effort timestamp estimation with this particular input container/codec combo and it not having PTS set. I did find a bug report from years ago that was similar, but it had ordering issues as well that don't apply here. I've also found some discussion indicating that nobody has ever really addressed these cases on the avcodec/ffmpeg side, but didn't look at the code to see if that was the case. I know timestamp generation for h.264 is difficult since it supports variable framerate, but why there's a difference in muxers' output is puzzling without looking deeply at the code. I'd say that remuxing to matroska file-wise may not be the best idea unless you use mkvmerge (which seems to do it well). I have no idea what to do with HLS (using mpegts segments) yet, though, as I haven't done many tests with it yet. ```
Author
Owner

@gaudat commented on GitHub (Aug 6, 2022):

I commented out the H264 in AVI case and tested it. Everything works for all 3 files that I have in this format. Playback is smooth. Seeking works. CPU usage is low.

If fact it loads even faster than direct playing files. I'm now inclined to disable direct play and use remux for everything.

@gaudat commented on GitHub (Aug 6, 2022): I commented out the H264 in AVI case and tested it. Everything works for all 3 files that I have in this format. Playback is smooth. Seeking works. CPU usage is low. If fact it loads even faster than direct playing files. I'm now inclined to disable direct play and use remux for everything.
Author
Owner

@jellyfin-bot commented on GitHub (Dec 5, 2022):

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 master branch, 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.

@jellyfin-bot commented on GitHub (Dec 5, 2022): 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 master branch, 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](https://docs.jellyfin.org/general/getting-help.html).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/jellyfin#4085