Compare commits

...

3 Commits

Author SHA1 Message Date
sergeidanilov
fc46f24dc5 fix pull request lint comments
cleaned up implementation and comments
2023-10-25 23:18:49 -07:00
danilovsergei
c29caf1739
Merge branch 'yt-dlp:master' into split-chapters-metadata-m4a-fix 2023-10-25 23:04:21 -07:00
bashonly
a40e0b37df
[core] Only ensure playlist thumbnail dir if writing thumbs (#8373)
Bugfix for 2acd1d555e

Closes #8372
Authored by: bashonly
2023-10-22 23:05:22 +00:00
2 changed files with 14 additions and 11 deletions

View File

@ -4242,7 +4242,7 @@ class YoutubeDL:
self.write_debug(f'Skipping writing {label} thumbnail')
return ret
if not self._ensure_dir_exists(filename):
if thumbnails and not self._ensure_dir_exists(filename):
return None
for idx, t in list(enumerate(thumbnails))[::-1]:

View File

@ -1046,20 +1046,23 @@ class FFmpegSplitChaptersPP(FFmpegPostProcessor):
destination,
['-ss', str(chapter['start_time']),
'-t', str(chapter['end_time'] - chapter['start_time'])])
# FFmpeg adds metadata about all chapters from parent file to all split m4a files.
# This is incorrect since there must be only single chapter in each file after split.
# Such behavior confuses players who think multiple chapters present
def _set_out_opts(self, ext, chapter_title):
out_opts = [*self.stream_copy_opts()]
out_opts.extend(['-map_metadata', '0'])
# exclude chapters metadata but keep everything else
out_opts.extend(['-map_chapters', '-1'])
if not chapter_title:
return out_opts
# replace global title with chapter specific title in split files
if ext == 'm4a':
return [
*self.stream_copy_opts(),
# For m4a ffmpeg copies all available parent track chapters to split tracks metadata
# And such behavior confuses players
# Wipe parent track metadata from split tracks and fill out only title
'-metadata', 'title={}'.format(chapter_title),
'-map_metadata','-1']
else:
return self.stream_copy_opts()
out_opts.extend(['-metadata', 'title={}'.format(chapter_title)])
if ext == 'opus':
out_opts.extend(['-metadata:s', 'title={}'.format(chapter_title)])
return out_opts
@PostProcessor._restrict_to(images=False)
def run(self, info):
@ -1075,7 +1078,7 @@ class FFmpegSplitChaptersPP(FFmpegPostProcessor):
self.to_screen('Splitting video by chapters; %d chapters found' % len(chapters))
for idx, chapter in enumerate(chapters):
destination, opts = self._ffmpeg_args_for_chapter(idx + 1, chapter, info)
out_file_opts = self._set_out_opts(info['ext'], chapter['title'])
out_file_opts = self._set_out_opts(info['ext'], chapter.get('title', ''))
self.real_run_ffmpeg([(in_file, opts)], [(destination, out_file_opts)])
if in_file != info['filepath']:
self._delete_downloaded_files(in_file, msg=None)