Replies: 10 comments 29 replies
-
Overall this proposal looks great. I believe keeping chapters & segments separate is the right approach. I got one question and a suggestion;
SkipSegments: [{
StartPosition: Ticks
EndPosition: Ticks
Type: SkipType
}] or SkipSegments: [{
Start: Ticks
End: Ticks
Type: SkipType
}] |
Beta Was this translation helpful? Give feedback.
-
I wonder if And how detailed should |
Beta Was this translation helpful? Give feedback.
-
These objects contextually represent "a period or a moment of time in media". Due to this, I think that just a single type can represent current Chapters and these "SkipSegments", however we don't need to constrain this to just "skips". I propose the following encoding, names subject to change: class MediaSegment {
long StartPositionTicks
long EndPositionTicks
MediaSegmentType Type
string Name
string ImagePath
DateTime ImageDateModified
string ImageTag
} Which allows and would result in:
enum MediaSegmentType {
SKIP
MUTE
SCENE_MARKER // or POI
COMMERCIAL_BREAK
INTRO
OUTRO
CHAPTER
RECAP
// more
} [0] - Chapters can be defined as a range instead of a single moment in time. The very context of chapters is "I am in a chapter and when I select a chapter, I want to go to the beginning of the chapter". Just like a book. So, technically, chapters should have |
Beta Was this translation helpful? Give feedback.
-
Based on comments in here and the SponsorBlock documentation I think some new enums might look like this. We'd be missing the cut action from EDL but I'm not sure it would serve a purpose when the clients can't actually cut streams. Also added a preview category that doesn't seem to exist anywhere. Several categories and actions from SponsorBlock were excluded (full, filler, sponsor, promo, etc) because I couldn't find a good reason to add them yet. enum MediaSegmentAction {
NONE
SKIP
MUTE
}
enum MediaSegmentCategory {
CHAPTER
COMMERCIAL
INTRO
OUTRO
PREVIEW
RECAP
} |
Beta Was this translation helpful? Give feedback.
-
Another potential application of skipping in Jellyfin-land would be skips that transform extended/collector's cuts into other, shorter cuts. Expanding on this, it would be excellent if it we could exclude some tracks from skipping so that we could keep commentary or rifftrax that may only be for the theatrical cut. When defining a section to be skipped, we would need to option to indicate the tracks that were excluded from skipping. And of course, it would be awesome if, when selecting a track which was excluded by a set of skips, we either warn the user that its for a different version, or automatically apply the skips. |
Beta Was this translation helpful? Give feedback.
-
Is there anything that's holding this back? Would love to put a bounty on this if anyone is willing to take a crack at it. |
Beta Was this translation helpful? Give feedback.
-
ConfusedPolarBear's intro-skipper plugin highlights the real obstacle at present - displaying buttons/text boxes/anything else during playback. The plugin seemed to work, and active development appears to be in progress on one of it's forks, but it requires a custom webui to display skip buttons etc. The ability for plugins to display buttons etc during playback would make features such as intro/outro skipping implementable purely via plugins, and IMO would be significantly more beneficial than just a native implementation of those features. It would open up the possibility of plugins similar to Amazon Prime's X-Ray for example. |
Beta Was this translation helpful? Give feedback.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
We have a strong wish to implement media segments for Jellyfin 10.10. The current state is kinda complicated with this proposal, the somewhat similar pull request and the rebased variant. To make the situation even worse I've made an updated proposal with slightly more detail. Some of the functionality available in the existing pull request is moved to a "possible future extensions" list to avoid complicating the initial change too much, it's highly possible some of those items will still make it to 10.10 though. Initial implementation (MVP)The "core" of the media segment implementation. This should be split over multiple pull requests to make it easy to review.
Possible future extensionsShould not be part of initial changeset and discussion on these should be postponed to when the MVP is ready.
Possible official plugins
|
Beta Was this translation helpful? Give feedback.
-
The Current state of the MediaSegments are tracked in the Media Segments Project Board |
Beta Was this translation helpful? Give feedback.
-
I think the path forward for adding intro skipping support to Jellyfin is to add it in a generic way such that it can be used for intro/outro skipping, commercial skipping, and potentially others.
Add support for skip lists to items in server. (List of start times, end times (or duration), and type. Basically what EDL uses + custom types for intros and outros.)
Clients check for skip times (and types) to automatically skip or show skip button.
Plugins can write to skip lists using whatever scanning etc they need.
A
SkipSegments
field should be added to theBaseItem
using the following structure.Where
SkipType
is an enum with the following values.Clients could then take action based on the
SkipType
at the proper time. Some skip types directly correspond to the action that should be performed, but others such as Scene Marker, Commercial Break, Intro, and Outro could potentially be configured per client to Skip, Prompt to Skip, or Mute.Other Software Supported Skip Types/Actions
MPlayer EDL Actions
SponsorBlock Action Types
Alternative Approaches
Using Chapters
Another proposed approach has been to reuse the existing Chapter support. This solution is insufficient in my opinion due to the following:
StartPositionTicks
there is no overlap between the data required for Skip Segments vs ChaptersChapters schema for reference:
References
Beta Was this translation helpful? Give feedback.
All reactions