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 | 
