Browse Source

[youtube] Add support for automatically translated subtitles (fixes #4555)

They have a manually uploaded subtitles track and YouTube can transtale it.
totalwebcasting
Jaime Marquínez Ferrándiz 10 years ago
parent
commit
7d900ef1bf
2 changed files with 11 additions and 2 deletions
  1. +8
    -0
      test/test_subtitles.py
  2. +3
    -2
      youtube_dl/extractor/youtube.py

+ 8
- 0
test/test_subtitles.py View File

@ -88,6 +88,14 @@ class TestYoutubeSubtitles(BaseTestSubtitles):
subtitles = self.getSubtitles() subtitles = self.getSubtitles()
self.assertTrue(subtitles['it'] is not None) self.assertTrue(subtitles['it'] is not None)
def test_youtube_translated_subtitles(self):
# This video has a subtitles track, which can be translated
self.url = 'Ky9eprVWzlI'
self.DL.params['writeautomaticsub'] = True
self.DL.params['subtitleslangs'] = ['it']
subtitles = self.getSubtitles()
self.assertTrue(subtitles['it'] is not None)
def test_youtube_nosubtitles(self): def test_youtube_nosubtitles(self):
self.DL.expect_warning('video doesn\'t have subtitles') self.DL.expect_warning('video doesn\'t have subtitles')
self.url = 'n5BB19UTcdA' self.url = 'n5BB19UTcdA'


+ 3
- 2
youtube_dl/extractor/youtube.py View File

@ -662,10 +662,11 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
list_url = caption_url + '&' + list_params list_url = caption_url + '&' + list_params
caption_list = self._download_xml(list_url, video_id) caption_list = self._download_xml(list_url, video_id)
original_lang_node = caption_list.find('track') original_lang_node = caption_list.find('track')
if original_lang_node is None or original_lang_node.attrib.get('kind') != 'asr':
if original_lang_node is None:
self._downloader.report_warning('Video doesn\'t have automatic captions') self._downloader.report_warning('Video doesn\'t have automatic captions')
return {} return {}
original_lang = original_lang_node.attrib['lang_code'] original_lang = original_lang_node.attrib['lang_code']
caption_kind = original_lang_node.attrib.get('kind', '')
sub_lang_list = {} sub_lang_list = {}
for lang_node in caption_list.findall('target'): for lang_node in caption_list.findall('target'):
@ -675,7 +676,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
'tlang': sub_lang, 'tlang': sub_lang,
'fmt': sub_format, 'fmt': sub_format,
'ts': timestamp, 'ts': timestamp,
'kind': 'asr',
'kind': caption_kind,
}) })
sub_lang_list[sub_lang] = caption_url + '&' + params sub_lang_list[sub_lang] = caption_url + '&' + params
return sub_lang_list return sub_lang_list


Loading…
Cancel
Save