mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:30:46 +00:00 
			
		
		
		
	[ie/vimeo] Fix chapters extraction (#10544)
Closes #5308 Authored by: bashonly
This commit is contained in:
		@@ -212,16 +212,6 @@ class VimeoBaseInfoExtractor(InfoExtractor):
 | 
			
		||||
        owner = video_data.get('owner') or {}
 | 
			
		||||
        video_uploader_url = owner.get('url')
 | 
			
		||||
 | 
			
		||||
        duration = int_or_none(video_data.get('duration'))
 | 
			
		||||
        chapter_data = try_get(config, lambda x: x['embed']['chapters']) or []
 | 
			
		||||
        chapters = [{
 | 
			
		||||
            'title': current_chapter.get('title'),
 | 
			
		||||
            'start_time': current_chapter.get('timecode'),
 | 
			
		||||
            'end_time': next_chapter.get('timecode'),
 | 
			
		||||
        } for current_chapter, next_chapter in zip(chapter_data, chapter_data[1:] + [{'timecode': duration}])]
 | 
			
		||||
        if chapters and chapters[0]['start_time']:  # Chapters may not start from 0
 | 
			
		||||
            chapters[:0] = [{'title': '<Untitled>', 'start_time': 0, 'end_time': chapters[0]['start_time']}]
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            'id': str_or_none(video_data.get('id')) or video_id,
 | 
			
		||||
            'title': video_title,
 | 
			
		||||
@@ -229,8 +219,12 @@ class VimeoBaseInfoExtractor(InfoExtractor):
 | 
			
		||||
            'uploader_id': video_uploader_url.split('/')[-1] if video_uploader_url else None,
 | 
			
		||||
            'uploader_url': video_uploader_url,
 | 
			
		||||
            'thumbnails': thumbnails,
 | 
			
		||||
            'duration': duration,
 | 
			
		||||
            'chapters': chapters or None,
 | 
			
		||||
            'duration': int_or_none(video_data.get('duration')),
 | 
			
		||||
            'chapters': sorted(traverse_obj(config, (
 | 
			
		||||
                'embed', 'chapters', lambda _, v: int(v['timecode']) is not None, {
 | 
			
		||||
                    'title': ('title', {str}),
 | 
			
		||||
                    'start_time': ('timecode', {int_or_none}),
 | 
			
		||||
                })), key=lambda c: c['start_time']) or None,
 | 
			
		||||
            'formats': formats,
 | 
			
		||||
            'subtitles': subtitles,
 | 
			
		||||
            'live_status': live_status,
 | 
			
		||||
@@ -708,6 +702,39 @@ class VimeoIE(VimeoBaseInfoExtractor):
 | 
			
		||||
                'skip_download': True,
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            # chapters must be sorted, see: https://github.com/yt-dlp/yt-dlp/issues/5308
 | 
			
		||||
            'url': 'https://player.vimeo.com/video/756714419',
 | 
			
		||||
            'info_dict': {
 | 
			
		||||
                'id': '756714419',
 | 
			
		||||
                'ext': 'mp4',
 | 
			
		||||
                'title': 'Dr Arielle Schwartz - Therapeutic yoga for optimum sleep',
 | 
			
		||||
                'uploader': 'Alex Howard',
 | 
			
		||||
                'uploader_id': 'user54729178',
 | 
			
		||||
                'uploader_url': 'https://vimeo.com/user54729178',
 | 
			
		||||
                'thumbnail': r're:https://i\.vimeocdn\.com/video/1520099929-[\da-f]+-d_1280',
 | 
			
		||||
                'duration': 2636,
 | 
			
		||||
                'chapters': [
 | 
			
		||||
                    {'start_time': 0, 'end_time': 10, 'title': '<Untitled Chapter 1>'},
 | 
			
		||||
                    {'start_time': 10, 'end_time': 106, 'title': 'Welcoming Dr Arielle Schwartz'},
 | 
			
		||||
                    {'start_time': 106, 'end_time': 305, 'title': 'What is therapeutic yoga?'},
 | 
			
		||||
                    {'start_time': 305, 'end_time': 594, 'title': 'Vagal toning practices'},
 | 
			
		||||
                    {'start_time': 594, 'end_time': 888, 'title': 'Trauma and difficulty letting go'},
 | 
			
		||||
                    {'start_time': 888, 'end_time': 1059, 'title': "Dr Schwartz' insomnia experience"},
 | 
			
		||||
                    {'start_time': 1059, 'end_time': 1471, 'title': 'A strategy for helping sleep issues'},
 | 
			
		||||
                    {'start_time': 1471, 'end_time': 1667, 'title': 'Yoga nidra'},
 | 
			
		||||
                    {'start_time': 1667, 'end_time': 2121, 'title': 'Wisdom in stillness'},
 | 
			
		||||
                    {'start_time': 2121, 'end_time': 2386, 'title': 'What helps us be more able to let go?'},
 | 
			
		||||
                    {'start_time': 2386, 'end_time': 2510, 'title': 'Practical tips to help ourselves'},
 | 
			
		||||
                    {'start_time': 2510, 'end_time': 2636, 'title': 'Where to find out more'},
 | 
			
		||||
                ],
 | 
			
		||||
            },
 | 
			
		||||
            'params': {
 | 
			
		||||
                'http_headers': {'Referer': 'https://sleepsuperconference.com'},
 | 
			
		||||
                'skip_download': 'm3u8',
 | 
			
		||||
            },
 | 
			
		||||
            'expected_warnings': ['Failed to parse XML: not well-formed'],
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            # user playlist alias -> https://vimeo.com/258705797
 | 
			
		||||
            'url': 'https://vimeo.com/user26785108/newspiritualguide',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user