[postprocessor] Fix chapters if duration is not extracted (#6037)

Authored by: bashonly
This commit is contained in:
bashonly 2023-03-08 07:10:19 -06:00 committed by GitHub
parent 6f4fc5660f
commit 01ddec7e66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 0 deletions

View File

@ -302,6 +302,11 @@ def get_stream_number(self, path, keys, value):
None) None)
return num, len(streams) return num, len(streams)
def _fixup_chapters(self, info):
last_chapter = traverse_obj(info, ('chapters', -1))
if last_chapter and not last_chapter.get('end_time'):
last_chapter['end_time'] = self._get_real_video_duration(info['filepath'])
def _get_real_video_duration(self, filepath, fatal=True): def _get_real_video_duration(self, filepath, fatal=True):
try: try:
duration = float_or_none( duration = float_or_none(
@ -678,6 +683,7 @@ def _options(target_ext):
@PostProcessor._restrict_to(images=False) @PostProcessor._restrict_to(images=False)
def run(self, info): def run(self, info):
self._fixup_chapters(info)
filename, metadata_filename = info['filepath'], None filename, metadata_filename = info['filepath'], None
files_to_delete, options = [], [] files_to_delete, options = [], []
if self._add_chapters and info.get('chapters'): if self._add_chapters and info.get('chapters'):
@ -1040,6 +1046,7 @@ def _ffmpeg_args_for_chapter(self, number, chapter, info):
@PostProcessor._restrict_to(images=False) @PostProcessor._restrict_to(images=False)
def run(self, info): def run(self, info):
self._fixup_chapters(info)
chapters = info.get('chapters') or [] chapters = info.get('chapters') or []
if not chapters: if not chapters:
self.to_screen('Chapter information is unavailable') self.to_screen('Chapter information is unavailable')

View File

@ -23,6 +23,7 @@ def __init__(self, downloader, remove_chapters_patterns=None, remove_sponsor_seg
@PostProcessor._restrict_to(images=False) @PostProcessor._restrict_to(images=False)
def run(self, info): def run(self, info):
self._fixup_chapters(info)
# Chapters must be preserved intact when downloading multiple formats of the same video. # Chapters must be preserved intact when downloading multiple formats of the same video.
chapters, sponsor_chapters = self._mark_chapters_to_remove( chapters, sponsor_chapters = self._mark_chapters_to_remove(
copy.deepcopy(info.get('chapters')) or [], copy.deepcopy(info.get('chapters')) or [],