diff options
| author | Sergey M․ <dstftw@gmail.com> | 2015-04-18 03:00:35 +0600 | 
|---|---|---|
| committer | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2015-04-19 17:55:42 +0200 | 
| commit | 81cd954a512e48fb5cccc3159cd0581088bff0b3 (patch) | |
| tree | 71d58f2a485ab9f6afa1e1571a6f30494292ea04 | |
| parent | feccf29c876869f44a9c983977371073b9801a51 (diff) | |
[YoutubeDL] Merge incompatible formats into mkv (#5456)
| -rwxr-xr-x | youtube_dl/YoutubeDL.py | 24 | 
1 files changed, 23 insertions, 1 deletions
| diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index e5d497b3f..5dd9d2430 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -1373,12 +1373,34 @@ class YoutubeDL(object):                                              ' The formats won\'t be merged')                      else:                          postprocessors = [merger] + +                    def compatible_formats(formats): +                        video, audio = formats +                        # Check extension +                        video_ext, audio_ext = audio.get('ext'), video.get('ext') +                        if video_ext and audio_ext: +                            COMPATIBLE_EXTS = ( +                                ('mp4', 'm4a', 'm4p', 'm4b', 'm4r', 'm4v'), +                                ('webm') +                            ) +                            for exts in COMPATIBLE_EXTS: +                                if video_ext in exts and audio_ext in exts: +                                    return True +                        # TODO: Check acodec/vcodec +                        return False + +                    requested_formats = info_dict['requested_formats'] +                    # Merge incompatible formats into mkv +                    if not compatible_formats(requested_formats): +                        filename = os.path.splitext(filename)[0] + '.mkv' +                        self.report_warning('You have requested formats uncompatible for merge. ' +                                            'The formats will be merged into mkv')                      if os.path.exists(encodeFilename(filename)):                          self.to_screen(                              '[download] %s has already been downloaded and '                              'merged' % filename)                      else: -                        for f in info_dict['requested_formats']: +                        for f in requested_formats:                              new_info = dict(info_dict)                              new_info.update(f)                              fname = self.prepare_filename(new_info) | 
