diff options
| -rw-r--r-- | test/test_YoutubeDL.py | 11 | ||||
| -rwxr-xr-x | youtube_dl/YoutubeDL.py | 31 | 
2 files changed, 34 insertions, 8 deletions
| diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index e0decb81c..4af14f9db 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -449,6 +449,17 @@ class TestFormatSelection(unittest.TestCase):              pass          self.assertEqual(ydl.downloaded_info_dicts, []) +    def test_default_format_spec(self): +        ydl = YDL({'simulate': True}) +        self.assertEqual(ydl._default_format_spec({}), 'bestvideo+bestaudio/best') + +        ydl = YDL({'outtmpl': '-'}) +        self.assertEqual(ydl._default_format_spec({}), 'best') + +        ydl = YDL({}) +        self.assertEqual(ydl._default_format_spec({}, download=False), 'bestvideo+bestaudio/best') +        self.assertEqual(ydl._default_format_spec({'is_live': True}), 'best') +  class TestYoutubeDL(unittest.TestCase):      def test_subtitles(self): diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index f94836d06..367ae3533 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -1064,6 +1064,25 @@ class YoutubeDL(object):              return op(actual_value, comparison_value)          return _filter +    def _default_format_spec(self, info_dict, download=True): +        req_format_list = [] + +        def can_have_partial_formats(): +            if self.params.get('simulate', False): +                return True +            if not download: +                return True +            if self.params.get('outtmpl', DEFAULT_OUTTMPL) == '-': +                return False +            if info_dict.get('is_live'): +                return False +            merger = FFmpegMergerPP(self) +            return merger.available and merger.can_merge() +        if can_have_partial_formats(): +            req_format_list.append('bestvideo+bestaudio') +        req_format_list.append('best') +        return '/'.join(req_format_list) +      def build_format_selector(self, format_spec):          def syntax_error(note, start):              message = ( @@ -1534,14 +1553,10 @@ class YoutubeDL(object):          req_format = self.params.get('format')          if req_format is None: -            req_format_list = [] -            if (self.params.get('outtmpl', DEFAULT_OUTTMPL) != '-' and -                    not info_dict.get('is_live')): -                merger = FFmpegMergerPP(self) -                if merger.available and merger.can_merge(): -                    req_format_list.append('bestvideo+bestaudio') -            req_format_list.append('best') -            req_format = '/'.join(req_format_list) +            req_format = self._default_format_spec(info_dict, download=download) +            if self.params.get('verbose'): +                self.to_stdout('[debug] Default format spec: %s' % req_format) +          format_selector = self.build_format_selector(req_format)          # While in format selection we may need to have an access to the original | 
