如何使用 youtube-dl 仅下载视频的字幕

fiv*_*ech 161 youtube-dl

如何使用 youtube-dl 下载视频列表的字幕?我需要一个选项。但是我找不到只下载字幕的选项

小智 209

有一个选项,在文档中明确提到

字幕选项:

--write-sub                      Write subtitle file
--write-auto-sub                 Write automatic subtitle file (YouTube only)
--all-subs                       Download all the available subtitles of the video
--list-subs                      List all available subtitles for the video
--sub-format FORMAT              Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"
--sub-lang LANGS                 Languages of the subtitles to download (optional) separated by commas, use IETF language tags like 'en,pt'
Run Code Online (Sandbox Code Playgroud)

例如,要列出视频的所有字幕:

youtube-dl --list-subs https://www.youtube.com/watch?v=Ye8mB6VsUHw
Run Code Online (Sandbox Code Playgroud)

要下载所有字幕,但不下载视频:

youtube-dl --all-subs --skip-download https://www.youtube.com/watch?v=Ye8mB6VsUHw
Run Code Online (Sandbox Code Playgroud)

  • 我给了文档一个公平的外观,并没有找到隐藏在***详细/模拟选项***下的`--skip-download`选项。很高兴@fivetech 问了这个问题,否则我可能仍然被卡住了。 (52认同)
  • @brauliobo `--write-auto-sub` 来自 [文档](https://github.com/rg3/youtube-dl/#subtitle-options),`youtube-dl --sub-lang LANG --write-自动订阅 --skip-download URI`。 (12认同)
  • 如何下载自动生成的字幕? (9认同)
  • `youtube-dl --sub-lang en --write-auto-sub --sub-format srt --skip-download v0uYZ4rTOrk` 1. 获取 ENG 字幕 2. 获取自动生成的字幕 3. 获取 srt 格式的字幕 4 . 不要下载电影 (4认同)
  • 在上面的答案中应该明确的是,如果隐藏式字幕是自动生成的,则它们不会由“--all-subs”下载。您必须使用“--write-auto-sub”代替。我认为这是 youtube-dl 方面的一个编程/实现错误,但它是一个非常棒的工具,我认为我们很难用它来对抗他们。 (4认同)
  • 清楚地“在文档中提到”和“在这个答案中明确提到”:“--write-auto-sub 编写自动字幕文件(仅限 YouTube)” (3认同)
  • 这不是“文档中明确提到的”。write-sub、write-auto-sub 和 all-sub 之间有什么区别? (3认同)

m3a*_*smi 38

或者你只能下载一个字幕

youtube-dl --write-sub --sub-lang en --skip-download URL 

  • 或者`--write-auto-sub` 用于下载自动生成的字幕! (17认同)

Her*_*tez 9

只需运行以下命令

youtube-dl --write-auto-sub --convert-subs=srt --skip-download URL 
Run Code Online (Sandbox Code Playgroud)

例如,您正在下载 https://www.youtube.com/watch?v=example。标题为“example” --convert=srt的文件将输出到一个名为example.en.srtwhereen代表英语es、西班牙语等的文件中。

该文件将具有以下内容:

00:00:04.259 --> 00:00:05.259
>> I’m Elon Musk.

00:00:05.259 --> 00:00:06.669
>> What is your claim to fame?

00:00:06.669 --> 00:00:07.669
>> I’m the founder of

00:00:07.669 --> 00:00:08.669
Tesla.com.
Run Code Online (Sandbox Code Playgroud)

可选 - 如果您需要清理文本,可以使用 python 稍微清理一下:

import re
bad_words = ['-->','</c>'] 


with open('example.en.vtt') as oldfile, open('newfile.txt', 'w') as newfile:
    for line in oldfile:
        if not any(bad_word in line for bad_word in bad_words):
            newfile.write(line)


with open('newfile.txt') as result:
    uniqlines = set(result.readlines())
    with open('sub_out.txt', 'w') as rmdup:
        mylst = map(lambda each: each.strip("&gt;&gt;"), uniqlines)
        print(mylst)
        rmdup.writelines(set(mylst))
Run Code Online (Sandbox Code Playgroud)

输出新文件.txt:

I’m Elon Musk.
What is your claim to fame?
I’m the founder of
Tesla.com.
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用 --skip-download 选项,convert subs 似乎不起作用,它只是以 vtt 格式提供 (5认同)
  • 就我而言,我仍然需要运行 `ffmpeg -i foo.vtt foo.srt` 来手动转换标题。 (2认同)
  • 经过一些测试,我可以说 1) `--convert-subs` 开关不能与 `--skip-download` 开关一起使用; 2)无论如何`youtube-dl`使用`ffmpeg`(或来自[dead](/sf/answers/663442951/) Libav项目的`avconv`)来进行字幕转换,所以`ffmpeg -i foo.vtt foo.srt` 生成相同的 srt 文件; 3) `--convert-subs=srt` 和 `--convert-subs srt` 选项都有效。 (2认同)

小智 6

从 YouTube 下载字幕的另一种简单方法是下载Google2SRT。Google2SRT 是适用于 Windows、Mac 和 Linux 的免费开源程序,能够从 YouTube 视频下载、保存和转换多个字幕。

用法

单击链接以查看步骤 1 和 2 的屏幕截图。

  1. 将 URL 粘贴到Google 字幕文本框中,然后点击阅读

  2. 通过选择提供的相应复选框来选择语言,然后按Go

  3. 查看在SRT 字幕文本框中输入的目标文件夹以定位 SRT 文件。

  • 问题在于它只适用于 YouTube;youtube-dl 支持数百个其他网站。 (9认同)
  • 问题是关于 youtube-dl。 (8认同)
  • @miles-wolbe 如果您能提及 youtube-dl 失败的 YouTube 视频,我将不胜感激。 (2认同)
  • @PhaniRithvij 不,`# youtube-dl --write-auto-sub --skip-download https://www.youtube.com/watch?v=nv99gj1xxWw` 在 `2021.04.17` 上工作正常 (2认同)