aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2021-07-08 21:41:08 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2021-07-08 22:33:33 +0530
commit60bdb7bd9e7aa614c55084fdd86b0ef2ad9ca9fa (patch)
tree8c8100d8a9ab3024a6572a7e3995e2ac73e3c8c8
parent4bb6b02f93e633dbba7bb722c167bf3b725cd7ce (diff)
downloadhypervideo-pre-60bdb7bd9e7aa614c55084fdd86b0ef2ad9ca9fa.tar.lz
hypervideo-pre-60bdb7bd9e7aa614c55084fdd86b0ef2ad9ca9fa.tar.xz
hypervideo-pre-60bdb7bd9e7aa614c55084fdd86b0ef2ad9ca9fa.zip
[youtube] Fix sorting of 3gp format
-rw-r--r--yt_dlp/extractor/youtube.py18
1 files changed, 11 insertions, 7 deletions
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py
index de70fcdd3..16cb53add 100644
--- a/yt_dlp/extractor/youtube.py
+++ b/yt_dlp/extractor/youtube.py
@@ -2404,6 +2404,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
formats, itags, stream_ids = [], [], []
itag_qualities = {}
q = qualities([
+ # "tiny" is the smallest video-only format. But some audio-only formats
+ # was also labeled "tiny". It is not clear if such formats still exist
'tiny', 'audio_quality_low', 'audio_quality_medium', 'audio_quality_high', # Audio only formats
'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres'
])
@@ -2467,13 +2469,15 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
'width': fmt.get('width'),
'language': audio_track.get('id', '').split('.')[0],
}
- mimetype = fmt.get('mimeType')
- if mimetype:
- mobj = re.match(
- r'((?:[^/]+)/(?:[^;]+))(?:;\s*codecs="([^"]+)")?', mimetype)
- if mobj:
- dct['ext'] = mimetype2ext(mobj.group(1))
- dct.update(parse_codecs(mobj.group(2)))
+ mime_mobj = re.match(
+ r'((?:[^/]+)/(?:[^;]+))(?:;\s*codecs="([^"]+)")?', fmt.get('mimeType') or '')
+ if mime_mobj:
+ dct['ext'] = mimetype2ext(mime_mobj.group(1))
+ dct.update(parse_codecs(mime_mobj.group(2)))
+ # The 3gp format in android client has a quality of "small",
+ # but is actually worse than all other formats
+ if dct['ext'] == '3gp':
+ dct['quality'] = q('tiny')
no_audio = dct.get('acodec') == 'none'
no_video = dct.get('vcodec') == 'none'
if no_audio: