[YoutubeDL] Make sure all formats have unique format_id
authorSergey M․ <dstftw@gmail.com>
Sat, 30 May 2015 10:04:44 +0000 (16:04 +0600)
committerSergey M․ <dstftw@gmail.com>
Sat, 30 May 2015 10:04:44 +0000 (16:04 +0600)
youtube_dl/YoutubeDL.py

index d1953c18f39b438740aec88a1aadf4d529a8e0b4..21d247f234cf7d8ed6a73bdc8132e4271d8a907a 100755 (executable)
@@ -1047,6 +1047,8 @@ class YoutubeDL(object):
         if not formats:
             raise ExtractorError('No video formats found!')
 
+        formats_dict = {}
+
         # We check that all the formats have the format and format_id fields
         for i, format in enumerate(formats):
             if 'url' not in format:
@@ -1054,6 +1056,18 @@ class YoutubeDL(object):
 
             if format.get('format_id') is None:
                 format['format_id'] = compat_str(i)
+            format_id = format['format_id']
+            if format_id not in formats_dict:
+                formats_dict[format_id] = []
+            formats_dict[format_id].append(format)
+
+        # Make sure all formats have unique format_id
+        for format_id, ambiguous_formats in formats_dict.items():
+            if len(ambiguous_formats) > 1:
+                for i, format in enumerate(ambiguous_formats):
+                    format['format_id'] = '%s-%d' % (format_id, i)
+
+        for i, format in enumerate(formats):
             if format.get('format') is None:
                 format['format'] = '{id} - {res}{note}'.format(
                     id=format['format_id'],