[YoutubeDL] Merge incompatible formats into mkv (#5456)
This commit is contained in:
parent
feccf29c87
commit
81cd954a51
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue