mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-13 14:37:43 +01:00
[extractor/biliintl] Add intro and ending chapters (#6018)
Authored by: HobbyistDev
This commit is contained in:
parent
05799a48c7
commit
0ba87dd279
@ -933,6 +933,19 @@ class BiliIntlIE(BiliIntlBaseIE):
|
|||||||
'episode': 'Episode 2',
|
'episode': 'Episode 2',
|
||||||
'timestamp': 1602259500,
|
'timestamp': 1602259500,
|
||||||
'description': 'md5:297b5a17155eb645e14a14b385ab547e',
|
'description': 'md5:297b5a17155eb645e14a14b385ab547e',
|
||||||
|
'chapters': [{
|
||||||
|
'start_time': 0,
|
||||||
|
'end_time': 76.242,
|
||||||
|
'title': '<Untitled Chapter 1>'
|
||||||
|
}, {
|
||||||
|
'start_time': 76.242,
|
||||||
|
'end_time': 161.161,
|
||||||
|
'title': 'Intro'
|
||||||
|
}, {
|
||||||
|
'start_time': 1325.742,
|
||||||
|
'end_time': 1403.903,
|
||||||
|
'title': 'Outro'
|
||||||
|
}],
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
# Non-Bstation page
|
# Non-Bstation page
|
||||||
@ -947,6 +960,19 @@ class BiliIntlIE(BiliIntlBaseIE):
|
|||||||
'episode': 'Episode 3',
|
'episode': 'Episode 3',
|
||||||
'upload_date': '20211219',
|
'upload_date': '20211219',
|
||||||
'timestamp': 1639928700,
|
'timestamp': 1639928700,
|
||||||
|
'chapters': [{
|
||||||
|
'start_time': 0,
|
||||||
|
'end_time': 88.0,
|
||||||
|
'title': '<Untitled Chapter 1>'
|
||||||
|
}, {
|
||||||
|
'start_time': 88.0,
|
||||||
|
'end_time': 156.0,
|
||||||
|
'title': 'Intro'
|
||||||
|
}, {
|
||||||
|
'start_time': 1173.0,
|
||||||
|
'end_time': 1259.535,
|
||||||
|
'title': 'Outro'
|
||||||
|
}],
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
# Subtitle with empty content
|
# Subtitle with empty content
|
||||||
@ -970,6 +996,20 @@ class BiliIntlIE(BiliIntlBaseIE):
|
|||||||
'upload_date': '20221212',
|
'upload_date': '20221212',
|
||||||
'title': 'Kimetsu no Yaiba Season 3 Official Trailer - Bstation',
|
'title': 'Kimetsu no Yaiba Season 3 Official Trailer - Bstation',
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
# episode id without intro and outro
|
||||||
|
'url': 'https://www.bilibili.tv/en/play/1048837/11246489',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '11246489',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'E1 - Operation \'Strix\' <Owl>',
|
||||||
|
'description': 'md5:b4434eb1a9a97ad2bccb779514b89f17',
|
||||||
|
'timestamp': 1649516400,
|
||||||
|
'thumbnail': 'https://pic.bstarstatic.com/ogv/62cb1de23ada17fb70fbe7bdd6ff29c29da02a64.png',
|
||||||
|
'episode': 'Episode 1',
|
||||||
|
'episode_number': 1,
|
||||||
|
'upload_date': '20220409',
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://www.biliintl.com/en/play/34613/341736',
|
'url': 'https://www.biliintl.com/en/play/34613/341736',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
@ -1022,12 +1062,31 @@ def _extract_video_metadata(self, url, video_id, season_id):
|
|||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
season_id, ep_id, aid = self._match_valid_url(url).group('season_id', 'ep_id', 'aid')
|
season_id, ep_id, aid = self._match_valid_url(url).group('season_id', 'ep_id', 'aid')
|
||||||
video_id = ep_id or aid
|
video_id = ep_id or aid
|
||||||
|
chapters = None
|
||||||
|
|
||||||
|
if ep_id:
|
||||||
|
intro_ending_json = self._call_api(
|
||||||
|
f'/web/v2/ogv/play/episode?episode_id={ep_id}&platform=web',
|
||||||
|
video_id, fatal=False) or {}
|
||||||
|
if intro_ending_json.get('skip'):
|
||||||
|
# FIXME: start time and end time seems a bit off a few second even it corrext based on ogv.*.js
|
||||||
|
# ref: https://p.bstarstatic.com/fe-static/bstar-web-new/assets/ogv.2b147442.js
|
||||||
|
chapters = [{
|
||||||
|
'start_time': float_or_none(traverse_obj(intro_ending_json, ('skip', 'opening_start_time')), 1000),
|
||||||
|
'end_time': float_or_none(traverse_obj(intro_ending_json, ('skip', 'opening_end_time')), 1000),
|
||||||
|
'title': 'Intro'
|
||||||
|
}, {
|
||||||
|
'start_time': float_or_none(traverse_obj(intro_ending_json, ('skip', 'ending_start_time')), 1000),
|
||||||
|
'end_time': float_or_none(traverse_obj(intro_ending_json, ('skip', 'ending_end_time')), 1000),
|
||||||
|
'title': 'Outro'
|
||||||
|
}]
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
**self._extract_video_metadata(url, video_id, season_id),
|
**self._extract_video_metadata(url, video_id, season_id),
|
||||||
'formats': self._get_formats(ep_id=ep_id, aid=aid),
|
'formats': self._get_formats(ep_id=ep_id, aid=aid),
|
||||||
'subtitles': self.extract_subtitles(ep_id=ep_id, aid=aid),
|
'subtitles': self.extract_subtitles(ep_id=ep_id, aid=aid),
|
||||||
|
'chapters': chapters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user