mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 07:17:07 -05:00 
			
		
		
		
	Add the option "--write-auto-sub" to download automatic subtitles from Youtube
Now automatic subtitles are only downloaded if the option is given. (closes #903)
This commit is contained in:
		@@ -100,7 +100,7 @@ class TestYoutubeSubtitles(unittest.TestCase):
 | 
			
		||||
        self.assertEqual(info_dict, None)
 | 
			
		||||
    def test_youtube_automatic_captions(self):
 | 
			
		||||
        DL = FakeYDL()
 | 
			
		||||
        DL.params['writesubtitles'] = True
 | 
			
		||||
        DL.params['writeautomaticsub'] = True
 | 
			
		||||
        DL.params['subtitleslang'] = 'it'
 | 
			
		||||
        IE = YoutubeIE(DL)
 | 
			
		||||
        info_dict = IE.extract('8YoUxe5ncPo')
 | 
			
		||||
 
 | 
			
		||||
@@ -72,6 +72,7 @@ class YoutubeDL(object):
 | 
			
		||||
    writeinfojson:     Write the video description to a .info.json file
 | 
			
		||||
    writethumbnail:    Write the thumbnail image to a file
 | 
			
		||||
    writesubtitles:    Write the video subtitles to a file
 | 
			
		||||
    writeautomaticsub: Write the automatic subtitles to a file
 | 
			
		||||
    allsubtitles:      Downloads all the subtitles of the video
 | 
			
		||||
    listsubtitles:     Lists all available subtitles for the video
 | 
			
		||||
    subtitlesformat:   Subtitle format [sbv/srt] (default=srt)
 | 
			
		||||
@@ -474,7 +475,7 @@ class YoutubeDL(object):
 | 
			
		||||
                self.report_error(u'Cannot write description file ' + descfn)
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
        if self.params.get('writesubtitles', False) and 'subtitles' in info_dict and info_dict['subtitles']:
 | 
			
		||||
        if (self.params.get('writesubtitles', False) or self.params.get('writeautomaticsub')) and 'subtitles' in info_dict and info_dict['subtitles']:
 | 
			
		||||
            # subtitles download errors are already managed as troubles in relevant IE
 | 
			
		||||
            # that way it will silently go on when used with unsupporting IE
 | 
			
		||||
            subtitle = info_dict['subtitles'][0]
 | 
			
		||||
 
 | 
			
		||||
@@ -191,6 +191,9 @@ def parseOpts(overrideArguments=None):
 | 
			
		||||
    video_format.add_option('--write-sub', '--write-srt',
 | 
			
		||||
            action='store_true', dest='writesubtitles',
 | 
			
		||||
            help='write subtitle file (currently youtube only)', default=False)
 | 
			
		||||
    video_format.add_option('--write-auto-sub', '--write-automatic-sub',
 | 
			
		||||
            action='store_true', dest='writeautomaticsub',
 | 
			
		||||
            help='write automatic subtitle file (currently youtube only)', default=False)
 | 
			
		||||
    video_format.add_option('--only-sub',
 | 
			
		||||
            action='store_true', dest='skip_download',
 | 
			
		||||
            help='[deprecated] alias of --skip-download', default=False)
 | 
			
		||||
@@ -537,6 +540,7 @@ def _real_main(argv=None):
 | 
			
		||||
        'writeinfojson': opts.writeinfojson,
 | 
			
		||||
        'writethumbnail': opts.writethumbnail,
 | 
			
		||||
        'writesubtitles': opts.writesubtitles,
 | 
			
		||||
        'writeautomaticsub': opts.writeautomaticsub,
 | 
			
		||||
        'allsubtitles': opts.allsubtitles,
 | 
			
		||||
        'listsubtitles': opts.listsubtitles,
 | 
			
		||||
        'subtitlesformat': opts.subtitlesformat,
 | 
			
		||||
 
 | 
			
		||||
@@ -454,13 +454,12 @@ class YoutubeIE(InfoExtractor):
 | 
			
		||||
            if video_subtitles:
 | 
			
		||||
                (sub_error, sub_lang, sub) = video_subtitles[0]
 | 
			
		||||
                if sub_error:
 | 
			
		||||
                    # We try with the automatic captions
 | 
			
		||||
                    self._downloader.report_warning(sub_error)
 | 
			
		||||
        
 | 
			
		||||
        if self._downloader.params.get('writeautomaticsub', False):
 | 
			
		||||
            video_subtitles = self._request_automatic_caption(video_id, video_webpage)
 | 
			
		||||
                    (sub_error_auto, sub_lang, sub) = video_subtitles[0]
 | 
			
		||||
                    if sub is not None:
 | 
			
		||||
                        pass
 | 
			
		||||
                    else:
 | 
			
		||||
                        # We report the original error
 | 
			
		||||
            (sub_error, sub_lang, sub) = video_subtitles[0]
 | 
			
		||||
            if sub_error:
 | 
			
		||||
                self._downloader.report_warning(sub_error)
 | 
			
		||||
 | 
			
		||||
        if self._downloader.params.get('allsubtitles', False):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user