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 /youtube_dl | |
parent | feccf29c876869f44a9c983977371073b9801a51 (diff) |
[YoutubeDL] Merge incompatible formats into mkv (#5456)
Diffstat (limited to 'youtube_dl')
-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) |