mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-09-23 23:30:11 +00:00
[SponsorBlock] Support chapter
category (#5260)
Authored by: ajayyy, pukkandan
This commit is contained in:

committed by
GitHub

parent
814bba3933
commit
63c547d71c
@@ -16,7 +16,7 @@ class ModifyChaptersPP(FFmpegPostProcessor):
|
||||
*, sponsorblock_chapter_title=DEFAULT_SPONSORBLOCK_CHAPTER_TITLE, force_keyframes=False):
|
||||
FFmpegPostProcessor.__init__(self, downloader)
|
||||
self._remove_chapters_patterns = set(remove_chapters_patterns or [])
|
||||
self._remove_sponsor_segments = set(remove_sponsor_segments or []) - set(SponsorBlockPP.POI_CATEGORIES.keys())
|
||||
self._remove_sponsor_segments = set(remove_sponsor_segments or []) - set(SponsorBlockPP.NON_SKIPPABLE_CATEGORIES.keys())
|
||||
self._ranges_to_remove = set(remove_ranges or [])
|
||||
self._sponsorblock_chapter_title = sponsorblock_chapter_title
|
||||
self._force_keyframes = force_keyframes
|
||||
@@ -99,7 +99,7 @@ class ModifyChaptersPP(FFmpegPostProcessor):
|
||||
'start_time': start,
|
||||
'end_time': end,
|
||||
'category': 'manually_removed',
|
||||
'_categories': [('manually_removed', start, end)],
|
||||
'_categories': [('manually_removed', start, end, 'Manually removed')],
|
||||
'remove': True,
|
||||
} for start, end in self._ranges_to_remove)
|
||||
|
||||
@@ -290,13 +290,12 @@ class ModifyChaptersPP(FFmpegPostProcessor):
|
||||
c.pop('_was_cut', None)
|
||||
cats = c.pop('_categories', None)
|
||||
if cats:
|
||||
category = min(cats, key=lambda c: c[2] - c[1])[0]
|
||||
cats = orderedSet(x[0] for x in cats)
|
||||
category, _, _, category_name = min(cats, key=lambda c: c[2] - c[1])
|
||||
c.update({
|
||||
'category': category,
|
||||
'categories': cats,
|
||||
'name': SponsorBlockPP.CATEGORIES[category],
|
||||
'category_names': [SponsorBlockPP.CATEGORIES[c] for c in cats]
|
||||
'categories': orderedSet(x[0] for x in cats),
|
||||
'name': category_name,
|
||||
'category_names': orderedSet(x[3] for x in cats),
|
||||
})
|
||||
c['title'] = self._downloader.evaluate_outtmpl(self._sponsorblock_chapter_title, c.copy())
|
||||
# Merge identically named sponsors.
|
||||
|
@@ -14,6 +14,10 @@ class SponsorBlockPP(FFmpegPostProcessor):
|
||||
POI_CATEGORIES = {
|
||||
'poi_highlight': 'Highlight',
|
||||
}
|
||||
NON_SKIPPABLE_CATEGORIES = {
|
||||
**POI_CATEGORIES,
|
||||
'chapter': 'Chapter',
|
||||
}
|
||||
CATEGORIES = {
|
||||
'sponsor': 'Sponsor',
|
||||
'intro': 'Intermission/Intro Animation',
|
||||
@@ -23,7 +27,7 @@ class SponsorBlockPP(FFmpegPostProcessor):
|
||||
'filler': 'Filler Tangent',
|
||||
'interaction': 'Interaction Reminder',
|
||||
'music_offtopic': 'Non-Music Section',
|
||||
**POI_CATEGORIES,
|
||||
**NON_SKIPPABLE_CATEGORIES
|
||||
}
|
||||
|
||||
def __init__(self, downloader, categories=None, api='https://sponsor.ajay.app'):
|
||||
@@ -68,12 +72,13 @@ class SponsorBlockPP(FFmpegPostProcessor):
|
||||
|
||||
def to_chapter(s):
|
||||
(start, end), cat = s['segment'], s['category']
|
||||
title = s['description'] if cat == 'chapter' else self.CATEGORIES[cat]
|
||||
return {
|
||||
'start_time': start,
|
||||
'end_time': end,
|
||||
'category': cat,
|
||||
'title': self.CATEGORIES[cat],
|
||||
'_categories': [(cat, start, end)]
|
||||
'title': title,
|
||||
'_categories': [(cat, start, end, title)],
|
||||
}
|
||||
|
||||
sponsor_chapters = [to_chapter(s) for s in duration_match]
|
||||
@@ -89,7 +94,7 @@ class SponsorBlockPP(FFmpegPostProcessor):
|
||||
url = f'{self._API_URL}/api/skipSegments/{hash[:4]}?' + urllib.parse.urlencode({
|
||||
'service': service,
|
||||
'categories': json.dumps(self._categories),
|
||||
'actionTypes': json.dumps(['skip', 'poi'])
|
||||
'actionTypes': json.dumps(['skip', 'poi', 'chapter'])
|
||||
})
|
||||
for d in self._download_json(url) or []:
|
||||
if d['videoID'] == video_id:
|
||||
|
Reference in New Issue
Block a user