diff options
author | Sergey M․ <dstftw@gmail.com> | 2016-02-27 06:48:13 +0600 |
---|---|---|
committer | Sergey M․ <dstftw@gmail.com> | 2016-02-27 06:48:13 +0600 |
commit | fbb6edd298a34cf63a5fd0bd900ca2337038810c (patch) | |
tree | b6531f4a24692bc42fa3bd655ce51828f91efcc8 | |
parent | 5eb6bdced4765cdeb70411c6aa93ecb4163a9ffe (diff) |
[extractor/common] Properly extract audio only formats in master m3u8 playlists
-rw-r--r-- | youtube_dl/extractor/common.py | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 14f575635..51351fb57 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -1084,19 +1084,29 @@ class InfoExtractor(object): 'protocol': entry_protocol, 'preference': preference, } - codecs = last_info.get('CODECS') - if codecs: - # TODO: looks like video codec is not always necessarily goes first - va_codecs = codecs.split(',') - if va_codecs[0]: - f['vcodec'] = va_codecs[0] - if len(va_codecs) > 1 and va_codecs[1]: - f['acodec'] = va_codecs[1] resolution = last_info.get('RESOLUTION') if resolution: width_str, height_str = resolution.split('x') f['width'] = int(width_str) f['height'] = int(height_str) + codecs = last_info.get('CODECS') + if codecs: + vcodec, acodec = [None] * 2 + va_codecs = codecs.split(',') + if len(va_codecs) == 1: + # Audio only entries usually come with single codec and + # no resolution. For more robustness we also check it to + # be mp4 audio. + if not resolution and va_codecs[0].startswith('mp4a'): + vcodec, acodec = 'none', va_codecs[0] + else: + vcodec = va_codecs[0] + else: + vcodec, acodec = va_codecs[:2] + f.update({ + 'acodec': acodec, + 'vcodec': vcodec, + }) if last_media is not None: f['m3u8_media'] = last_media last_media = None |