Skip to content

Commit 81cd954

Browse files
dstftwjaimeMF
authored andcommitted
[YoutubeDL] Merge incompatible formats into mkv (#5456)
1 parent feccf29 commit 81cd954

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

youtube_dl/YoutubeDL.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1373,12 +1373,34 @@ def dl(name, info):
13731373
' The formats won\'t be merged')
13741374
else:
13751375
postprocessors = [merger]
1376+
1377+
def compatible_formats(formats):
1378+
video, audio = formats
1379+
# Check extension
1380+
video_ext, audio_ext = audio.get('ext'), video.get('ext')
1381+
if video_ext and audio_ext:
1382+
COMPATIBLE_EXTS = (
1383+
('mp4', 'm4a', 'm4p', 'm4b', 'm4r', 'm4v'),
1384+
('webm')
1385+
)
1386+
for exts in COMPATIBLE_EXTS:
1387+
if video_ext in exts and audio_ext in exts:
1388+
return True
1389+
# TODO: Check acodec/vcodec
1390+
return False
1391+
1392+
requested_formats = info_dict['requested_formats']
1393+
# Merge incompatible formats into mkv
1394+
if not compatible_formats(requested_formats):
1395+
filename = os.path.splitext(filename)[0] + '.mkv'
1396+
self.report_warning('You have requested formats uncompatible for merge. '
1397+
'The formats will be merged into mkv')
13761398
if os.path.exists(encodeFilename(filename)):
13771399
self.to_screen(
13781400
'[download] %s has already been downloaded and '
13791401
'merged' % filename)
13801402
else:
1381-
for f in info_dict['requested_formats']:
1403+
for f in requested_formats:
13821404
new_info = dict(info_dict)
13831405
new_info.update(f)
13841406
fname = self.prepare_filename(new_info)

0 commit comments

Comments
 (0)