diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index bfa9c82f6c..3936772513 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -29,6 +29,7 @@ age_restricted, bug_reports_message, clean_html, + codec2ext, compiled_regex_type, determine_ext, error_to_compat_str, @@ -1471,6 +1472,7 @@ def extract_multisegment_info(element, ms_parent_info): f = { 'format_id': '%s-%s' % (mpd_id, representation_id) if mpd_id else representation_id, 'url': base_url, + 'ext': codec2ext(representation_attrib.get('codecs')), 'width': int_or_none(representation_attrib.get('width')), 'height': int_or_none(representation_attrib.get('height')), 'tbr': int_or_none(representation_attrib.get('bandwidth'), 1000), diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 22a39a0ab7..0e04e91a42 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -1893,6 +1893,22 @@ def mimetype2ext(mt): }.get(res, res) +def codec2ext(codec): + codec_type = codec.split('.')[0] + + # Leave the return value None for unknown values as codec_type + # is not a good fallback for file extensions + return { + 'avc1': 'mp4', + 'avc2': 'mp4', + 'avc3': 'mp4', + 'avc4': 'mp4', + 'mp4a': 'm4a', + 'vorbis': 'webm', + 'vp9': 'webm', + }.get(codec_type) + + def urlhandle_detect_ext(url_handle): try: url_handle.headers