aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/postprocessor
diff options
context:
space:
mode:
Diffstat (limited to 'yt_dlp/postprocessor')
-rw-r--r--yt_dlp/postprocessor/__init__.py1
-rw-r--r--yt_dlp/postprocessor/common.py3
-rw-r--r--yt_dlp/postprocessor/ffmpeg.py25
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')