diff options
| author | Ismael Mejia <iemejia@gmail.com> | 2013-02-22 03:53:54 +0100 | 
|---|---|---|
| committer | Filippo Valsorda <filippo.valsorda@gmail.com> | 2013-03-20 08:41:54 +0100 | 
| commit | 9e62bc443996c1950de0841997c76d110cb77c6e (patch) | |
| tree | 22ec9c71c62b4c60b8b98eac4a26735a97e7727d | |
| parent | 553d097442ad5ee62d227de2e2703a2377dcf40f (diff) | |
Added new option '--sub-format' to choose the format of the subtitles to downloade (defaut=srt)
| -rw-r--r-- | test/parameters.json | 1 | ||||
| -rw-r--r-- | test/test_youtube_subtitles.py | 10 | ||||
| -rw-r--r-- | youtube_dl/FileDownloader.py | 9 | ||||
| -rwxr-xr-x | youtube_dl/InfoExtractors.py | 11 | ||||
| -rw-r--r-- | youtube_dl/__init__.py | 4 | 
5 files changed, 26 insertions, 9 deletions
| diff --git a/test/parameters.json b/test/parameters.json index 0d4bd644c..750b1c96e 100644 --- a/test/parameters.json +++ b/test/parameters.json @@ -29,6 +29,7 @@      "simulate": false,       "skip_download": false,       "subtitleslang": null,  +    "subtitlesformat": "srt",      "test": true,       "updatetime": true,       "usenetrc": false,  diff --git a/test/test_youtube_subtitles.py b/test/test_youtube_subtitles.py index 3b5a53fca..94adc4555 100644 --- a/test/test_youtube_subtitles.py +++ b/test/test_youtube_subtitles.py @@ -42,7 +42,7 @@ class TestYoutubeSubtitles(unittest.TestCase):          DL = FakeDownloader()          DL.params['allsubtitles'] = False          DL.params['writesubtitles'] = False -         +        DL.params['subtitlesformat'] = 'srt'      def test_youtube_no_subtitles(self):          DL = FakeDownloader()          DL.params['writesubtitles'] = False @@ -80,6 +80,14 @@ class TestYoutubeSubtitles(unittest.TestCase):          info_dict = IE.extract('QRS8MkLhQmM')          subtitles = info_dict[0]['subtitles']          self.assertEqual(len(subtitles), 12) +    def test_youtube_subtitles_format(self): +        DL = FakeDownloader() +        DL.params['writesubtitles'] = True +        DL.params['subtitlesformat'] = 'sbv' +        IE = YoutubeIE(DL) +        info_dict = IE.extract('QRS8MkLhQmM') +        sub = info_dict[0]['subtitles'][0] +        self.assertEqual(md5(sub[2]), '13aeaa0c245a8bed9a451cb643e3ad8b')  if __name__ == '__main__':      unittest.main() diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py index 4549dd464..a041e1219 100644 --- a/youtube_dl/FileDownloader.py +++ b/youtube_dl/FileDownloader.py @@ -78,9 +78,10 @@ class FileDownloader(object):      updatetime:        Use the Last-modified header to set output file timestamps.      writedescription:  Write the video description to a .description file      writeinfojson:     Write the video description to a .info.json file -    writesubtitles:    Write the video subtitles to a file (default=srt) +    writesubtitles:    Write the video subtitles to a file      onlysubtitles:     Downloads only the subtitles of the video      allsubtitles:      Downloads all the subtitles of the video +    subtitlesformat:   Subtitle format [sbv/srt] (default=srt)      subtitleslang:     Language of the subtitles to download      test:              Download only first bytes to test the downloader.      keepvideo:         Keep the video file after post-processing @@ -445,8 +446,9 @@ class FileDownloader(object):              # that way it will silently go on when used with unsupporting IE              subtitle = info_dict['subtitles'][0]              (sub_error, sub_lang, sub) = subtitle +            sub_format = self.params.get('subtitlesformat')              try: -                sub_filename = filename.rsplit('.', 1)[0] + u'.' + sub_lang + u'.srt' +                sub_filename = filename.rsplit('.', 1)[0] + u'.' + sub_lang + u'.' + sub_format                  self.report_writesubtitles(sub_filename)                  with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8') as subfile:                      subfile.write(sub) @@ -458,10 +460,11 @@ class FileDownloader(object):          if self.params.get('allsubtitles', False) and 'subtitles' in info_dict and info_dict['subtitles']:              subtitles = info_dict['subtitles'] +            sub_format = self.params.get('subtitlesformat')              for subtitle in subtitles:                  (sub_error, sub_lang, sub) = subtitle                  try: -                    sub_filename = filename.rsplit('.', 1)[0] + u'.' + sub_lang + u'.srt' +                    sub_filename = filename.rsplit('.', 1)[0] + u'.' + sub_lang + u'.' + sub_format                      self.report_writesubtitles(sub_filename)                      with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8') as subfile:                              subfile.write(sub) diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index e078bb083..62522bb6c 100755 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -244,7 +244,7 @@ class YoutubeIE(InfoExtractor):              return (u'WARNING: video has no closed captions', None)          return sub_lang_list -    def _request_subtitle(self, sub_lang, sub_name, video_id, format = 'srt'): +    def _request_subtitle(self, sub_lang, sub_name, video_id, format):          self.report_video_subtitles_request(video_id, sub_lang)          params = compat_urllib_parse.urlencode({              'lang': sub_lang, @@ -264,7 +264,7 @@ class YoutubeIE(InfoExtractor):      def _extract_subtitle(self, video_id):          self.report_video_subtitles_download(video_id)          sub_lang_list = self._get_available_subtitles(video_id) - +        sub_format = self._downloader.params.get('subtitlesformat')          if self._downloader.params.get('subtitleslang', False):              sub_lang = self._downloader.params.get('subtitleslang')          elif 'en' in sub_lang_list: @@ -274,15 +274,16 @@ class YoutubeIE(InfoExtractor):          if not sub_lang in sub_lang_list:              return (u'WARNING: no closed captions found in the specified language "%s"' % sub_lang, None) -        subtitle = self._request_subtitle(sub_lang, sub_lang_list[sub_lang].encode('utf-8'), video_id) +        subtitle = self._request_subtitle(sub_lang, sub_lang_list[sub_lang].encode('utf-8'), video_id, sub_format)          return [subtitle]      def _extract_all_subtitles(self, video_id):          self.report_video_subtitles_download(video_id)          sub_lang_list = self._get_available_subtitles(video_id) +        sub_format = self._downloader.params.get('subtitlesformat')          subtitles = []          for sub_lang in sub_lang_list: -            subtitle = self._request_subtitle(sub_lang, sub_lang_list[sub_lang].encode('utf-8'), video_id) +            subtitle = self._request_subtitle(sub_lang, sub_lang_list[sub_lang].encode('utf-8'), video_id, sub_format)              subtitles.append(subtitle)          return subtitles @@ -505,7 +506,7 @@ class YoutubeIE(InfoExtractor):          else:              video_description = '' -        # closed captions +        # subtitles          video_subtitles = None          if self._downloader.params.get('writesubtitles', False): diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 495b5ac41..914d030a3 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -182,6 +182,9 @@ def parseOpts():      video_format.add_option('--all-subs',              action='store_true', dest='allsubtitles',              help='downloads all the available subtitles of the video (currently youtube only)', default=False) +    video_format.add_option('--sub-format', +            action='store', dest='subtitlesformat', metavar='LANG', +            help='subtitle format [srt/sbv] (default=srt) (currently youtube only)', default='srt')      video_format.add_option('--sub-lang',              action='store', dest='subtitleslang', metavar='LANG',              help='language of the subtitles to download (optional) use IETF language tags like \'en\'') @@ -458,6 +461,7 @@ def _real_main():          'writesubtitles': opts.writesubtitles,          'onlysubtitles': opts.onlysubtitles,          'allsubtitles': opts.allsubtitles, +        'subtitlesformat': opts.subtitlesformat,          'subtitleslang': opts.subtitleslang,          'matchtitle': decodeOption(opts.matchtitle),          'rejecttitle': decodeOption(opts.rejecttitle), | 
