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.
This commit is contained in:
parent
de7c27cd25
commit
d03cfdce1b
2 changed files with 76 additions and 53 deletions
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue