From d03cfdce1bce28284fa0f168d5d278caacd2fa0b Mon Sep 17 00:00:00 2001 From: felix Date: Tue, 4 Aug 2015 09:07:44 +0200 Subject: Support arbitrary stream merges With this change, the merge operator may join any number of media streams, video or audio. The streams are downloaded in the order specified. Also, fix the metadata post-processor so that it doesn't leave out any streams. --- youtube_dlc/postprocessor/ffmpeg.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'youtube_dlc/postprocessor/ffmpeg.py') diff --git a/youtube_dlc/postprocessor/ffmpeg.py b/youtube_dlc/postprocessor/ffmpeg.py index dbc736c50..5d66a69a6 100644 --- a/youtube_dlc/postprocessor/ffmpeg.py +++ b/youtube_dlc/postprocessor/ffmpeg.py @@ -476,7 +476,7 @@ class FFmpegMetadataPP(FFmpegPostProcessor): filename = info['filepath'] temp_filename = prepend_extension(filename, 'temp') in_filenames = [filename] - options = [] + options = ['-map', '0'] if info['ext'] == 'm4a': options.extend(['-vn', '-acodec', 'copy']) @@ -518,7 +518,12 @@ class FFmpegMergerPP(FFmpegPostProcessor): def run(self, info): filename = info['filepath'] temp_filename = prepend_extension(filename, 'temp') - args = ['-c', 'copy', '-map', '0:v:0', '-map', '1:a:0'] + args = ['-c', 'copy'] + for (i, fmt) in enumerate(info['requested_formats']): + if fmt.get('acodec') != 'none': + args.extend(['-map', '%u:a:0' % (i)]) + if fmt.get('vcodec') != 'none': + args.extend(['-map', '%u:v:0' % (i)]) self._downloader.to_screen('[ffmpeg] Merging formats into "%s"' % filename) self.run_ffmpeg_multiple_files(info['__files_to_merge'], temp_filename, args) os.rename(encodeFilename(temp_filename), encodeFilename(filename)) -- cgit v1.2.3