使用 youtube-dl 下载 YouTube 视频中的所有内容

使用 youtube-dl 下载 YouTube 视频中的所有内容

我想从 YouTube 视频中下载所有内容(字幕、卡片、标签、注释、缩略图等(当然还有带音频的视频))(例如,这个)。

我正在使用youtube-dl,由于要使用的开关数量太多,我似乎找不到任何能满足我需求的东西。我还想以尽可能高的质量下载视频/音频,而不会造成任何质量损失。虽然不是 YouTube,但我也想下载我购买的一些 udemy 课程,这样我就可以在长途旅行时观看它们。

我已经ffmpeg安装了,而且我听说需要这个才能从 YouTube 进行无损下载,但我不确定如何将它与 链接起来youtube-dl

这是我第一次使用youtube-dl,因此任何帮助都将不胜感激。

答案1

您需要的相关选项:

# Filesystem
--write-annotations
--write-description
--write-info-json

# Thumbnail images
--write-all-thumbnails

# Video format
--format bestvideo+bestaudio/best
--merge-output-format mkv

# Subtitle
--all-subs
--write-auto-sub
--write-sub

# Post-processing
--add-metadata
--embed-subs

将其复制到您的配置文件(/etc/youtube-dl.conf~/.config/youtube-dl/config)。

使用该配置,我下载了这个视频youtube-dl写入以下文件:

$ ls
The Problem with Time & Timezones - Computerphile.annotations.xml
The Problem with Time & Timezones - Computerphile.description
The Problem with Time & Timezones - Computerphile.info.json
The Problem with Time & Timezones - Computerphile.jpg
The Problem with Time & Timezones - Computerphile.mkv

我无法mediainfo在此处发布输出,因为它超出了字符限制,但你可以看到它在 github


我还想以尽可能高的质量下载视频/音频,并且不造成质量损失。

youtube-dl默认情况下以最高质量下载视频,但您可以使用强制此行为--format bestvideo+bestaudio/best


虽然它不是 YouTube,但我确实也想下载一些我购买的 udemy 课程,以便在长途旅行时观看它们。

请阅读文章我可以将课程下载到我的电脑吗?

默认情况下,完整的课程不能从电脑上下载。我们这样做是出于对盗版的担忧。

请注意,您始终可以在Udemy 移动应用程序。有关如何下载视频讲座至您的 iOS 移动设备,请点击这里。有关如何下载视频以供在 Android 设备上离线观看的步骤,请单击这里


我已经ffmpeg安装了,而且我听说需要这个才能从 YouTube 进行无损下载,但我不确定如何将它与 链接起来youtube-dl

youtube-dl默认情况下使用avconv,但--prefer-ffmpeg允许您使用ffmpeg。无论如何,此选项对于“无损下载“。在我提供的例子中,youtube-dl仅用于ffmpeg将所有下载的格式合并为一个mkv文件。

答案2

要简单地下载视频,你可以使用以下命令:

youtube-dl --all-subs "https://www.youtube.com/watch?v=KYBok-XGsKM"

要选择视频质量,您应该首先使用 -F 选项列出可用的格式。

youtube-dl -F "https://www.youtube.com/watch?v=KYBok-XGsKM"

这是你的视频的输出:

[youtube] KYBok-XGsKM: Downloading webpage
[youtube] KYBok-XGsKM: Downloading video info webpage
[youtube] KYBok-XGsKM: Extracting video information
WARNING: unable to extract uploader nickname
[info] Available formats for KYBok-XGsKM:
format code  extension  resolution note
249          webm       audio only DASH audio   52k , opus @ 50k,  4.19MiB
250          webm       audio only DASH audio   75k , opus @ 70k, 5.42MiB
140          m4a        audio only DASH audio  129k , m4a_dash container, mp4a.40.2@128k, 10.59MiB
171          webm       audio only DASH audio  131k , vorbis@128k, 7.66MiB
251          webm       audio only DASH audio  135k , opus @160k, 9.58MiB
278          webm       256x144    144p   98k , webm container, vp9, 30fps, video only, 6.59MiB
160          mp4        256x144    144p  114k , avc1.4d400c, 15fps, video only, 9.04MiB
242          webm       426x240    240p  205k , vp9, 30fps, video only, 11.47MiB
133          mp4        426x240    240p  265k , avc1.4d4015, 30fps, video only, 20.11MiB
243          webm       640x360    360p  362k , vp9, 30fps, video only, 21.93MiB
134          mp4        640x360    360p  602k , avc1.4d401e, 30fps, video only, 20.42MiB
244          webm       854x480    480p  662k , vp9, 30fps, video only, 37.82MiB
135          mp4        854x480    480p 1020k , avc1.4d401f, 30fps, video only, 42.62MiB
247          webm       1280x720   720p 1353k , vp9, 30fps, video only, 81.53MiB
136          mp4        1280x720   720p 2013k , avc1.4d401f, 30fps, video only, 84.69MiB
137          mp4        1920x1080  1080p 2438k , avc1.640028, 30fps, video only, 157.71MiB
248          webm       1920x1080  1080p 2593k , vp9, 30fps, video only, 162.48MiB
264          mp4        2560x1440  1440p 6973k , avc1.640032, 30fps, video only, 459.58MiB
271          webm       2560x1440  1440p 7523k , vp9, 30fps, video only, 485.66MiB
313          webm       3840x2160  2160p 19991k , vp9, 30fps, video only, 1.34GiB
36           3gp        320x?      small , mp4v.20.3,  mp4a.40.2
17           3gp        176x144    small , mp4v.20.3,  mp4a.40.2@ 24k
43           webm       640x360    medium , vp8.0,  vorbis@128k
18           mp4        640x360    medium , avc1.42001E,  mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F,  mp4a.40.2@192k (best)

以下是一些有用的字幕选项:

   --write-sub
          Write subtitle file

   --write-auto-sub
          Write automatically generated subtitle file (YouTube only)

   --all-subs
          Download all the available subtitles of the video

   --list-subs
          List all available subtitles for the video

缩略图如下:

   --write-thumbnail
          Write thumbnail image to disk

   --write-all-thumbnails
          Write all thumbnail image formats to disk

   --list-thumbnails
          Simulate and list all available thumbnail formats

您还可以找到有关视频质量的更多信息这里

答案3

@leetbacoon 请参阅最底部的评论回复。(声誉低下,仍抱歉)

笔记:我将使用较长的开关名称以避免混淆。许多使用的开关都有较短的版本。请参阅文档:选项

笔记: - 为了视觉方便,\用于单独显示开关;全部\可以省略;如果使用,\请确保 后面没有空格字符\


概要: ytdl 命令用于下载具有最高可用视频和音频质量的单个视频文件。将视频保存到其自己的目录中(由您指定)。下载所有可用的元数据,将每个元数据写入相应的文件格式并保存在同一目录中。将视频元数据添加到视频输出文件。

用你自己的替换:

  • 用您选择的目录路径替换/archive/videos/TED_Archive/开关--download-archive和。--output
  • 示例存储路径 /archive/videos
  • 示例视频链接:https://www.youtube.com/watch?v=0bFs6ZiynSU
  • 示例频道目录 /TED_Archive

====

youtube-dl \
--limit-rate '0.25M' \
--retries '3' \
--no-overwrites \
--call-home \
--write-info-json \
--write-description \
--write-thumbnail \
--all-subs \
--convert-subs 'srt' \
--write-annotations \
--add-metadata \
--embed-subs \
--download-archive '/archive/videos/TED_Archive/TED_Archive.ytdlarchive' \
--format 'bestvideo+bestaudio/best' \
--merge-output-format 'mkv' \
--output '/archive/videos/TED_Archive/%(upload_date)s_%(id)s/TED_Archive_%(upload_date)s_%(id)s_%(title)s.%(ext)s' \
'https://www.youtube.com/watch?v=0bFs6ZiynSU' ;

笔记:' '为了保证解析安全, 用 括起来所有参数。

解释推荐的开关:

  • --limit-rate '0.25M'用于限制每个 youtube-dl 实例可用的最大下载速度,单位为 B/s(每秒字节数)。
    参数:任何带有大写单位后缀的正整数。
    单位后缀:K 代表千字节;M 代表兆字节;不清楚是否支持千兆字节。
    添加:
    1. 避免互联网连接堵塞。2
    . 有助于管理多个并发 ytdl 实例的下载速度。
    省略:
    1. 堵塞互联网;无法浏览,YouTube 视频播放滞后。2
    . 将尽快下载视频。
    笔记:您可以同时运行多个 youtube-dl 实例。

  • --retries '5'用于在视频下载失败时自动重试。在下载播放列表或整个频道(在 Youtube 术语中,也是(该特定频道的)播放列表)时很有用。
    值:选择任意正整数。默认值为10。最大值为infinite(以文字字符串形式输入)。

  • --continue
    参数:没有任何
    添加:
    1. 将强制恢复部分文件的下载
    笔记:ytdl 分块下载视频;如果 ytdl 在下载过程中意外终止,则会保留分块。
    省略:
    1. 默认情况下,ytdl 将恢复下载(如果可能)。

  • --no-overwrites
    参数:没有任何
    添加:将要不是用相同的名称覆盖现有的元数据文件。
    省略:将覆盖具有相同名称的现有元数据文件,但不会覆盖视频文件。

    • --call-home用于联系ytdl服务器进行调试。

      “如果您的服务器有多个 IP 或您怀疑存在审查,添加 --call-home 可能是获得更多诊断信息的好主意。” – 文档:错误,检索日期 20180408,

  • --write-info-json
    参数:没有任何
    输出格式:json;
    信息内容:观看次数、喜欢、上传日期、视频和音频质量信息等(但不包括视频文字描述(上传者发布在视频下方(2018 youtube 布局)))
    添加:将视频元数据写入单独的.info.json文件。保存在与视频文件相同的文件夹中。
    省略:不会影响--add-metadata仍会将视频元数据写入视频输出文件。

  • --write-description
    参数:没有任何
    输出格式:纯文本;
    添加:将视频上传者在视频描述部分(视频下方(2018 youtube 布局))发布的文本写入单独的Write .description文件中。保存在与视频文件相同的文件夹中。

  • --write-thumbnail将最高分辨率的可用缩略图(maxresdefault.jpg由 YouTube 调用)写入.jpg文件。根据指定的模板重命名--output。保存在与视频文件相同的目录中。
    参数:没有任何
    输出格式:仅 JPEG;
    笔记:用于youtube-dl --list-thumbnails '<video_url>'调查特定视频的可用缩略图(不适用于播放列表链接);例如:youtube-dl --list-thumbnails 'https://www.youtube.com/watch?v=odwfHu6MDuU'

  • --write-annotations将视频注释写入.annotations.xml文件。根据 指定的模板重命名--output。保存在与视频文件相同的目录中。
    参数:没有任何
    输出格式:.xml;

  • --all-subs将 视频中所有自定义创建的可用字幕写入各自的文件(例如:subtitles.en.vtt、、subtitles.fr.vttsubtitles.es.vtt
    参数:没有任何
    输出格式:默认.vtt;可以使用--sub-format
    错误消息: 如果没有可用的字幕,则会将警告消息打印到标准输出 - 格式:WARNING: video doesn't have subtitles

有用的命令:

笔记:用于youtube-dl --list-subs '<video_url>'调查特定视频的可用缩略图(不适用于播放列表链接);
例如:youtube-dl --list-subs 'https://www.youtube.com/watch?v=odwfHu6MDuU'

  • --convert-subs 'srt'
    参数:字符串:格式扩展名 ass、srt 或 best
    输出格式:默认.vtt;或根据规范
    添加:将字幕写入指定文件格式(例如.srt:)。保存在与视频文件相同的文件夹中。
    省略:字幕将写为.vtt
    错误消息:如果没有可用的字幕,则会将 INFO 消息打印到标准输出 - 格式:[ffmpeg] There aren't any subtitles to convert
    笔记:转换将在文件下载后作为后处理步骤执行.vtt。如果 ytdl 执行意外终止,某些字幕文件可能无法转换(在这种情况下再次执行命令)。

  • --add-metadata
    参数:没有任何
    行为:将元数据写入视频输出文件。
    笔记:不需要.info.json由生成--write-info-json

  • --embed-subs
    参数:没有任何
    行为:
    1. 将字幕写入视频输出文件;
    2. 仅适用于 mp4、webm 和 mkv 视频
    错误消息: 如果没有可用的字幕,则会将 INFO 消息打印到标准输出 - 格式:[ffmpeg] There aren't any subtitles to embed
    笔记:不需要.vtt由生成--write-sub--write-auto-sub--all-sub

  • --download-archive '<archive_path>/<channel_name>/<channel_name>.ytdlarchive'
    行为:用于创建包含之前下载的视频链接的文本文件。下载整个频道时可跳过这些视频。仅下载单个视频时无需此操作。
    参数:字符串:视频存档路径的组合,以频道命名的目录。文件名由频道名称和.ytdlarchive文件扩展名组成。(也可以是 .txt;但独特的格式可以轻松区分)
    输出格式:纯文本;每行一个 videoID
    添加:
    1. ytdl 读取此文件,忽略并跳过其中列出的所有带有 videoID 的视频,即使尚未下载。2
    . 自动将最后下载的视频的 videoID 添加到此文件
    省略:如果视频文件和元数据文件存在,ytdl 将再次下载它们。

  • --format ''
    参数:推荐字符串:bestvideo+bestaudio/best确保最高的视频和音频质量组合。
    添加:完全控制视频质量和音频质量及其组合以及回退质量
    省略:默认youtube-dl will guess it for you by default-文档
    笔记:文档:格式选择示例

  • --merge-output-format '<video_format>'
    参数:视频文件格式。(例如:mp4、mkv、3gp 等)
    添加:可以指定视频文件格式
    省略:默认youtube-dl will guess it for you by default-文档
    笔记:文档:格式选择

有用的命令:

笔记:用于youtube-dl --list-formats '<video_url>'调查特定视频的可用视频和音频质量和格式(不适用于播放列表链接);
例如:youtube-dl --list-formats 'https://www.youtube.com/watch?v=odwfHu6MDuU'

  • --output '<template>'
    参数:
    1. 视频文件格式。(例如:mp4、mkv、3gp 等);
    2. 推荐:%(upload_date)s_%(id)s_%(title)s.%(ext)s
    添加:影响视频文件和所有元数据文件的文件命名约定
    省略:默认情况下,视频标题将是文件名。默认模板:%(id)s.%(ext)s将输出例如:testvideo.mkv
    笔记:不要忘记%前缀和s后缀(其他后缀也存在);_模板元素之间的只是一个分隔符,可以是任何其他字符。例如:%(upload_date)s-%(id)s
    笔记:文档:输出模板

  • '<video_url>'
    参数:字符串:特定视频的 URL
    错误信息:
    1. 如果没有提交视频网址,ytdl 将不会执行并显示帮助。2
    . 如果提交的视频网址无效,则错误消息将打印到 stdout - 格式:ERROR: u'' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:" ) to search YouTube


存储建议:

  1. 在您的视频档案中创建一个misc目录并将所有单个视频存储在其中。

  2. 当您从某个频道下载一个或多个视频时,请为该频道创建一个专用目录。在这种情况下,频道名称为TED Archive,目录名称为TED_Archive(我预先将所有空格字符替换为下划线,以便在使用 bash(或 python)脚本时更轻松地进行目录导航和文件 I/O 操作)。


回复你的评论@leetbacoon

我只是想知道,既然有 1440p 可用,为什么 1080p 的副本被认为是最好的?为什么显示的是 2160p?我这边没有显示该选项(上限为 1440p)– leetbacoon

来自文档
You can also use a file extension (currently 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm are supported) to download the best quality format of a particular file extension served as a single file

best: Select the best quality format represented by a single file with video and audio.

bestvideo: Select the best quality video-only format

我认为当你选择best并指定输出格式时,youtube 会发送它认为最好的视频+音频格式连击针对该格式。这可能受制于 YouTube 的一些内部平衡决策(推测)。


根据我的使用经验,我必须特别指定bestvideo+bestaudio分别获取视频和音频的最高质量,然后将它们组合在 .mkv 容器中。


我使用它/best作为后备论点只是为了确保万无一失。


相关内容