[ModifyChapters] Do not mutate original chapters (#1322)

Closes #1295 
Authored by: nihil-admirari
This commit is contained in:
Nil Admirari 2021-10-19 08:51:05 +00:00 committed by GitHub
parent 1e520b5535
commit e619d8a752
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 4 deletions

View File

@ -31,8 +31,10 @@ class ModifyChaptersPP(FFmpegPostProcessor):
@PostProcessor._restrict_to(images=False) @PostProcessor._restrict_to(images=False)
def run(self, info): def run(self, info):
# 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(
info.get('chapters') or [], info.get('sponsorblock_chapters') or []) copy.deepcopy(info.get('chapters')) or [],
copy.deepcopy(info.get('sponsorblock_chapters')) or [])
if not chapters and not sponsor_chapters: if not chapters and not sponsor_chapters:
return [], info return [], info
@ -126,7 +128,7 @@ class ModifyChaptersPP(FFmpegPostProcessor):
cuts = [] cuts = []
def append_cut(c): def append_cut(c):
assert 'remove' in c assert 'remove' in c, 'Not a cut is appended to cuts'
last_to_cut = cuts[-1] if cuts else None last_to_cut = cuts[-1] if cuts else None
if last_to_cut and last_to_cut['end_time'] >= c['start_time']: if last_to_cut and last_to_cut['end_time'] >= c['start_time']:
last_to_cut['end_time'] = max(last_to_cut['end_time'], c['end_time']) last_to_cut['end_time'] = max(last_to_cut['end_time'], c['end_time'])
@ -154,7 +156,7 @@ class ModifyChaptersPP(FFmpegPostProcessor):
new_chapters = [] new_chapters = []
def append_chapter(c): def append_chapter(c):
assert 'remove' not in c assert 'remove' not in c, 'Cut is appended to chapters'
length = c['end_time'] - c['start_time'] - excess_duration(c) length = c['end_time'] - c['start_time'] - excess_duration(c)
# Chapter is completely covered by cuts or sponsors. # Chapter is completely covered by cuts or sponsors.
if length <= 0: if length <= 0:
@ -237,7 +239,7 @@ class ModifyChaptersPP(FFmpegPostProcessor):
heapq.heappush(chapters, (c['start_time'], i, c)) heapq.heappush(chapters, (c['start_time'], i, c))
# (normal, sponsor) and (sponsor, sponsor) # (normal, sponsor) and (sponsor, sponsor)
else: else:
assert '_categories' in c assert '_categories' in c, 'Normal chapters overlap'
cur_chapter['_was_cut'] = True cur_chapter['_was_cut'] = True
c['_was_cut'] = True c['_was_cut'] = True
# Push the part after the sponsor to PQ. # Push the part after the sponsor to PQ.