[YoutubeDL] Merge incompatible formats into mkv (#5456)

This commit is contained in:
Sergey M․ 2015-04-18 03:00:35 +06:00 committed by Jaime Marquínez Ferrándiz
parent feccf29c87
commit 81cd954a51

View File

@ -1373,12 +1373,34 @@ class YoutubeDL(object):
' The formats won\'t be merged') ' The formats won\'t be merged')
else: else:
postprocessors = [merger] postprocessors = [merger]
def compatible_formats(formats):
video, audio = formats
# Check extension
video_ext, audio_ext = audio.get('ext'), video.get('ext')
if video_ext and audio_ext:
COMPATIBLE_EXTS = (
('mp4', 'm4a', 'm4p', 'm4b', 'm4r', 'm4v'),
('webm')
)
for exts in COMPATIBLE_EXTS:
if video_ext in exts and audio_ext in exts:
return True
# TODO: Check acodec/vcodec
return False
requested_formats = info_dict['requested_formats']
# Merge incompatible formats into mkv
if not compatible_formats(requested_formats):
filename = os.path.splitext(filename)[0] + '.mkv'
self.report_warning('You have requested formats uncompatible for merge. '
'The formats will be merged into mkv')
if os.path.exists(encodeFilename(filename)): if os.path.exists(encodeFilename(filename)):
self.to_screen( self.to_screen(
'[download] %s has already been downloaded and ' '[download] %s has already been downloaded and '
'merged' % filename) 'merged' % filename)
else: else:
for f in info_dict['requested_formats']: for f in requested_formats:
new_info = dict(info_dict) new_info = dict(info_dict)
new_info.update(f) new_info.update(f)
fname = self.prepare_filename(new_info) fname = self.prepare_filename(new_info)