Repository: yt-dlp/yt-dlp
File: yt_dlp/extractor/slideslive.py (Python)

Code before:
        thumbnails = []
        if url_or_none(player_info.get('thumbnail')):
            thumbnails.append({
                'id': '0',
                'url': player_info['thumbnail'],
            })
        thumbnails.extend(traverse_obj(slides, (..., {
            'id': 'id',
            'url': 'url',
        })))

        chapters = []
        for i in range(len(slides)):
            start_time = traverse_obj(slides, (i, 'time'), expected_type=int)
            if not isinstance(start_time, int) or not traverse_obj(slides, (i, 'id')):
                continue
            next_start = traverse_obj(slides, (i + 1, 'time'), expected_type=int)
            if next_start:
                end_time = next_start - 1
            else:
                end_time = start_time + 1
            chapters.append({
                'title': slides[i]['id'],
                'start_time': start_time,
                'end_time': end_time,
            })

        subtitles = {}
        for sub in traverse_obj(player_info, ('subtitles', ...), expected_type=dict):
            webvtt_url = url_or_none(sub.get('webvtt_url'))
            if not webvtt_url:
                continue
            subtitles.setdefault(sub.get('language') or 'en', []).append({
                'url': webvtt_url,
                'ext': 'vtt',
            })

        info = {
            'id': video_id,
            'title': player_info.get('title') or self._html_search_meta('title', webpage, default=''),
            'timestamp': unified_timestamp(player_info.get('timestamp')),
            'is_live': player_info.get('playlist_type') != 'vod',
            'thumbnails': thumbnails,
            'chapters': chapters,
            'subtitles': subtitles,
        }

        if service_name in ('url', 'yoda'):
            if service_name == 'url':
                info['url'] = service_id
            else:

Review comment (bug):
```suggestion
        slides_xml = None
        if player_info.get('slides_xml_url'):
            slides_xml = self._download_xml(
                player_info['slides_xml_url'], video_id, fatal=False,
                note='Downloading slides XML', errnote='Failed to download slides XML')

        chapters, thumbnails = [], []
        if url_or_none(player_info.get('thumbnail')):
            thumbnails.append({'url': player_info['thumbnail']})
        for slide in slides_xml.findall('./slide') if slides_xml else []:
            name = xpath_text(slide, './slideName', 'name')
            id_ = xpath_text(slide, './orderId', 'id')
            if name:
                thumbnails.append({
                    'id': id_,
                    'url': f'https://cdn.slideslive.com/data/presentations/{video_id}/slides/big/{name}.jpg',
                })
            chapters.append({
                'title': id_,
                'start_time': int_or_none(xpath_text(slide, './timeSec', 'time')),
            }
```

Code after:
                'id': '38979481-013',
                'ext': 'mp4',
                'title': 'How to Train Your MAML to Excel in Few-Shot Classification - Slide 013',
                'duration': 3,
                'timestamp': 1654714877,
                'upload_date': '20220608',
            },
        }],
        'params': {
            'skip_download': 'm3u8',
        },
    }, {
        # /v3/ slides, .jpg and .png, service_name = youtube
        'url': 'https://slideslive.com/embed/38932460/',
        'info_dict': {
            'id': 'RTPdrgkyTiE',
            'display_id': '38932460',
            'ext': 'mp4',
            'title': 'Active Learning for Hierarchical Multi-Label Classification',
            'description': 'Watch full version of this video at https://slideslive.com/38932460.',
            'channel': 'SlidesLive Videos - A',
            'channel_id': 'UC62SdArr41t_-_fX40QCLRw',
            'channel_url': 'https://www.youtube.com/channel/UC62SdArr41t_-_fX40QCLRw',
            'uploader': 'SlidesLive Videos - A',
            'uploader_id': 'UC62SdArr41t_-_fX40QCLRw',
            'uploader_url': 'http://www.youtube.com/channel/UC62SdArr41t_-_fX40QCLRw',
            'upload_date': '20200903',
            'timestamp': 1602599092,
            'duration': 942,
            'age_limit': 0,
            'live_status': 'not_live',
            'playable_in_embed': True,
            'availability': 'unlisted',
            'categories': ['People & Blogs'],
            'tags': [],
            'channel_follower_count': int,
            'like_count': int,
            'view_count': int,
            'thumbnail': r're:^https?://.*\.(?:jpg|png|webp)',
            'thumbnails': 'count:21',
            'chapters': 'count:20',
        },
        'params': {
            'skip_download': 'm3u8',
        },
    }, {
        # service_name = yoda
        'url': 'https://slideslive.com/38903721/magic-a-scientific-resurrection-of-an-esoteric-legend',
        'only_matching': True,
    }, {
        # dead link, service_name = url