diff options
| -rw-r--r-- | test/test_youtube_subtitles.py | 7 | ||||
| -rw-r--r-- | youtube_dl/FileDownloader.py | 5 | ||||
| -rwxr-xr-x | youtube_dl/InfoExtractors.py | 7 | ||||
| -rw-r--r-- | youtube_dl/__init__.py | 4 | 
4 files changed, 22 insertions, 1 deletions
| diff --git a/test/test_youtube_subtitles.py b/test/test_youtube_subtitles.py index ff09ea459..77c275b75 100644 --- a/test/test_youtube_subtitles.py +++ b/test/test_youtube_subtitles.py @@ -53,5 +53,12 @@ class TestYoutubeSubtitles(unittest.TestCase):          info_dict = IE.extract('QRS8MkLhQmM')          self.assertEqual(md5(info_dict[0]['subtitles']), '164a51f16f260476a05b50fe4c2f161d') +    def test_youtube_onlysubtitles(self): +        DL = FakeDownloader() +        DL.params['onlysubtitles'] = True +        IE = YoutubeIE(DL) +        info_dict = IE.extract('QRS8MkLhQmM') +        self.assertEqual(md5(info_dict[0]['subtitles']), '4cd9278a35ba2305f47354ee13472260') +  if __name__ == '__main__':      unittest.main() diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py index 53c2d1dce..487c9dadb 100644 --- a/youtube_dl/FileDownloader.py +++ b/youtube_dl/FileDownloader.py @@ -79,6 +79,7 @@ class FileDownloader(object):      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 .srt file +    onlysubtitles:     Downloads only the subtitles of the video      subtitleslang:     Language of the subtitles to download      test:              Download only first bytes to test the downloader.      keepvideo:         Keep the video file after post-processing @@ -443,9 +444,13 @@ class FileDownloader(object):              # that way it will silently go on when used with unsupporting IE              try:                  srtfn = filename.rsplit('.', 1)[0] + u'.srt' +                if self.params.get('subtitleslang', False): +                    srtfn = filename.rsplit('.', 1)[0] + u'.' + self.params['subtitleslang'] + u'.srt'                  self.report_writesubtitles(srtfn)                  with io.open(encodeFilename(srtfn), 'w', encoding='utf-8') as srtfile:                      srtfile.write(info_dict['subtitles']) +                if self.params.get('onlysubtitles', False): +                    return               except (OSError, IOError):                  self.trouble(u'ERROR: Cannot write subtitles file ' + descfn)                  return diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index e3998fbe8..51b263383 100755 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -228,6 +228,7 @@ class YoutubeIE(InfoExtractor):          """Indicate the download will use the RTMP protocol."""          self._downloader.to_screen(u'[youtube] RTMP download detected') +      def _extract_subtitles(self, video_id):          self.report_video_subtitles_download(video_id)          request = compat_urllib_request.Request('http://video.google.com/timedtext?hl=en&type=list&v=%s' % video_id) @@ -246,7 +247,7 @@ class YoutubeIE(InfoExtractor):          else:              srt_lang = list(srt_lang_list.keys())[0]          if not srt_lang in srt_lang_list: -            return (u'WARNING: no closed captions found in the specified language', None) +            return (u'WARNING: no closed captions found in the specified language "%s"' % srt_lang, None)          params = compat_urllib_parse.urlencode({              'lang': srt_lang,              'name': srt_lang_list[srt_lang].encode('utf-8'), @@ -483,6 +484,10 @@ class YoutubeIE(InfoExtractor):          # closed captions          video_subtitles = None +        if self._downloader.params.get('subtitleslang', False): +            self._downloader.params['writesubtitles'] = True +        if self._downloader.params.get('onlysubtitles', False): +            self._downloader.params['writesubtitles'] = True          if self._downloader.params.get('writesubtitles', False):              (srt_error, video_subtitles) = self._extract_subtitles(video_id)              if srt_error: diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 23e3c2ac2..ababeac87 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -176,6 +176,9 @@ def parseOpts():      video_format.add_option('--write-srt',              action='store_true', dest='writesubtitles',              help='write video closed captions to a .srt file (currently youtube only)', default=False) +    video_format.add_option('--only-srt', +            action='store_true', dest='onlysubtitles', +            help='downloads only the subtitles of the video (currently youtube only)', default=False)      video_format.add_option('--srt-lang',              action='store', dest='subtitleslang', metavar='LANG',              help='language of the closed captions to download (optional) use IETF language tags like \'en\'') @@ -450,6 +453,7 @@ def _real_main():          'writedescription': opts.writedescription,          'writeinfojson': opts.writeinfojson,          'writesubtitles': opts.writesubtitles, +        'onlysubtitles': opts.onlysubtitles,          'subtitleslang': opts.subtitleslang,          'matchtitle': decodeOption(opts.matchtitle),          'rejecttitle': decodeOption(opts.rejecttitle), | 
