diff options
Diffstat (limited to 'yt_dlp/postprocessor')
-rw-r--r-- | yt_dlp/postprocessor/__init__.py | 1 | ||||
-rw-r--r-- | yt_dlp/postprocessor/common.py | 3 | ||||
-rw-r--r-- | yt_dlp/postprocessor/ffmpeg.py | 25 |
3 files changed, 19 insertions, 10 deletions
diff --git a/yt_dlp/postprocessor/__init__.py b/yt_dlp/postprocessor/__init__.py index 4ae230d2f..7f8adb368 100644 --- a/yt_dlp/postprocessor/__init__.py +++ b/yt_dlp/postprocessor/__init__.py @@ -9,6 +9,7 @@ from .ffmpeg import ( FFmpegPostProcessor, FFmpegEmbedSubtitlePP, FFmpegExtractAudioPP, + FFmpegFixupDuplicateMoovPP, FFmpegFixupDurationPP, FFmpegFixupStretchedPP, FFmpegFixupTimestampPP, diff --git a/yt_dlp/postprocessor/common.py b/yt_dlp/postprocessor/common.py index ab9eb6acf..f2467c542 100644 --- a/yt_dlp/postprocessor/common.py +++ b/yt_dlp/postprocessor/common.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals -import copy import functools import os @@ -18,7 +17,7 @@ class PostProcessorMetaClass(type): def run_wrapper(func): @functools.wraps(func) def run(self, info, *args, **kwargs): - info_copy = copy.deepcopy(self._copy_infodict(info)) + info_copy = self._copy_infodict(info) self._hook_progress({'status': 'started'}, info_copy) ret = func(self, info, *args, **kwargs) if ret is not None: diff --git a/yt_dlp/postprocessor/ffmpeg.py b/yt_dlp/postprocessor/ffmpeg.py index 73bbf7fb0..594762974 100644 --- a/yt_dlp/postprocessor/ffmpeg.py +++ b/yt_dlp/postprocessor/ffmpeg.py @@ -294,7 +294,9 @@ class FFmpegPostProcessor(PostProcessor): def make_args(file, args, name, number): keys = ['_%s%d' % (name, number), '_%s' % name] - if name == 'o' and number == 1: + if name == 'o': + args += ['-movflags', '+faststart'] + elif number == 1: keys.append('') args += self._configuration_args(self.basename, keys) if name == 'i': @@ -368,7 +370,7 @@ class FFmpegPostProcessor(PostProcessor): out_flags = ['-c', 'copy'] if out_file.rpartition('.')[-1] in ('mp4', 'mov'): # For some reason, '-c copy' is not enough to copy subtitles - out_flags.extend(['-c:s', 'mov_text', '-movflags', '+faststart']) + out_flags.extend(['-c:s', 'mov_text']) try: self.real_run_ffmpeg( @@ -571,10 +573,7 @@ class FFmpegVideoRemuxerPP(FFmpegVideoConvertorPP): @staticmethod def _options(target_ext): - options = ['-c', 'copy', '-map', '0', '-dn'] - if target_ext in ['mp4', 'm4a', 'mov']: - options.extend(['-movflags', '+faststart']) - return options + return ['-c', 'copy', '-map', '0', '-dn'] class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): @@ -909,13 +908,23 @@ class FFmpegFixupTimestampPP(FFmpegFixupPostProcessor): return [], info -class FFmpegFixupDurationPP(FFmpegFixupPostProcessor): +class FFmpegCopyStreamPostProcessor(FFmpegFixupPostProcessor): + MESSAGE = 'Copying stream' + @PostProcessor._restrict_to(images=False) def run(self, info): - self._fixup('Fixing video duration', info['filepath'], ['-c', 'copy', '-map', '0', '-dn']) + self._fixup(self.MESSAGE, info['filepath'], ['-c', 'copy', '-map', '0', '-dn']) return [], info +class FFmpegFixupDurationPP(FFmpegCopyStreamPostProcessor): + MESSAGE = 'Fixing video duration' + + +class FFmpegFixupDuplicateMoovPP(FFmpegCopyStreamPostProcessor): + MESSAGE = 'Fixing duplicate MOOV atoms' + + class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): SUPPORTED_EXTS = ('srt', 'vtt', 'ass', 'lrc') |