End

youtube-dl 下载视频

本文地址


目录

youtube-dl

Command-line program to download videos from YouTube.com and other video sites

youtube-dl is a command-line program to download videos from YouTube.com and a few more sites. It requires the Python interpreter, and it is not platform specific. It should work on your Unix box, on Windows or on macOS. It is released to the public domain, which means you can modify it, redistribute it or use it however you like.

环境配置

下载 youtube-dl.exe 并将其路径加到 PATH

python --version      # 软件是基于 Python 编写的软件,必须具备 Python 环境
ffmpeg -version       # 【非必须】用来合并视频分段,以及对视频重新编码/封装
youtube-dl --version  # 需要将 youtube-dl.exe 路径加到 PATH 中
where youtube-dl      # 命令所在位置

快速使用

youtube-dl -h                # 【--help】打印帮助文档
youtube-dl -h |grep -A 2 xxx # 过滤包含 xxx 的帮助文档
youtube-dl --version         # 打印版本信息

youtube-dl [url]             # 下载视频或视频列表,会自动选择清晰度最高的视频下载
youtube-dl -F [url]          # 输出所有可下载的资源清单,然后就可以根据 format code 下载指定的资源
youtube-dl -f [code] [url]   # 下载指定视频或视频列表,例如下载较低清晰度的视频、仅下载音频
youtube-dl -F https://www.youtube.com/watch?v=C1ASW_PQazo

format code  extension  resolution note
249          webm       audio only tiny   52k , webm_dash container, opus @ 52k (48000Hz), 1.27MiB
18           mp4        640x360    360p  580k , avc1.42001E, 29fps, mp4a.40.2 (44100Hz), 14.08MiB (best)

下载 YouTube 视频

由于 YouTube 的 1080p 及以上的分辨率都是 音视频分离 的,所以我们需要分别下载视频和音频,下载时可以使用 313+251 这样的组合。

如果电脑中安装并正确配置了 ffmpeg,youtube-dl 会自动合并下好的视频和音频,然后自动删除单独的音视频文件。

youtube-dl -f 313+251 https://youtu.be/UAqmF1o-Qyo

下载字幕

youtube-dl --write-sub [url]      # 下载视频,同时下载 vtt 字幕(如果有的话)
youtube-dl --write-auto-sub [url] # 下载视频,同时下载自动生成的字幕文件(YouTube only)
youtube-dl --list-subs [url]      # 列出所有可用的字幕文件
youtube-dl --sub-lang LANGS       # 要下载的字幕的语言,用逗号分隔,请使用【--list-subs】列出的可用语言标签

常用命令选项 Options

通用选项 General

-U                        # 【--update】更新到最新版---命令无效
-i                        # 【--ignore-errors】遇到错误时继续下载,例如忽略 playlist 中不可用的视频
--abort-on-error          # 遇到错误时终止下载后面的视频
--list-extractors         # 【--extractor-descriptions】列出所有支持的提取器(extractors),即支持的网站
--ignore-config           # 不读取用户配置文件【%APPDATA%/youtube-dl/config.txt】
--config-location PATH    # 使用指定路径下的配置文件
--flat-playlist           # 列出 playlist 中的视频,如果不是 playlist 而是视频的话会忽略此选项


--dump-user-agent         # 显示当前使用的 browser identification
--force-generic-extractor # 强制使用通用提取器下载
--default-search PREFIX   # 使用此前缀补充 URLs
--mark-watched            # 标记看过此视频(YouTube only)
--no-mark-watched         # 取消标记看过此视频(YouTube only)
--no-color                # 打印到屏幕上的代码不带色

--ignore-config
Do not read configuration files.
When given in the global configuration file /etc/youtube-dl.conf: Do not read the user configuration in %APPDATA%/youtube-dl/config.txt

视频选择 Video Selection

--playlist-start NUMBER # 从列表中的哪个视频开始下载(默认为1)
--playlist-end NUMBER   # 到列表中的哪个视频结束下载(默认为last)
--playlist-items ITEMS  # 要下载列表中哪些视频,如【1,2,5,8】或【1-3,7,10-13】
--match-title REGEX     # 仅下载匹配标题的视频(正则表达式,或区分大小写的字符串)
--reject-title REGEX    # 跳过下载匹配标题的视频
--max-downloads NUMBER  # 下载多少个视频后停止
--min-filesize SIZE     # 不下载小于指定大小的视频,如【50k】【44.6m】
--max-filesize SIZE     # 不下载大于指定大小的视频
--match-filter FILTER   # 通用视频过滤器,详细查看 OUTPUT TEMPLATE
--download-archive FILE # 仅下载 archive 文件中未列出的视频,记录所有已下载视频的 ID


--date DATE             # 仅下载上传日期在指定日期的视频
--datebefore DATE       # 仅下载上传日期在指定日期或之前的视频
--dateafter DATE        # 仅下载上传日期在指定日期或之后的视频
--min-views COUNT       # 不下载观影数小于指定值的视频
--max-views COUNT       # 不下载观影数大于指定值的视频
--no-playlist           # 当链接到一个视频和一个播放列表时,仅下载视频
--yes-playlist          # 当链接到一个视频和一个播放列表时,下载视频和播放列表
--age-limit YEARS       # 下载适合(suitable)指定年龄的视频
--include-ads           # 同时下载广告

--match-filter FILTER
Generic video filter. Specify any key (see the "OUTPUT TEMPLATE" for a list of available keys) to match if the key is present, !key to check if the key is not present, key > NUMBER (like "comment_count > 12", also works with >=, <, <=, !=, =) to compare against a number, key = 'LITERAL' (like "uploader = 'Mike Smith'", also works with !=) to match against a string literal and & to require multiple matches. Values which are not known are excluded unless you put a question mark (?) after the operator. For example, to only match videos that have been liked more than 100 times and disliked less than 50 times (or the dislike functionality is not available at the given service), but who also have a description, use --match-filter "like_count > 100 & dislike_count <? 50 & description" .

下载选项 Download

-r RATE                         # 【--limit-rate】最大比特率(bytes per second),例如【50K】或【4.2M】
-R RETRIES                      # 【--retries】重试次数,默认10,infinite 代表无限次
--fragment-retries RETRIES      # 一个分段的最大重试次数,默认10
--skip-unavailable-fragments    # 跳过不可用分段
--abort-on-unavailable-fragment # 当某些片段不可用时,中止下载
--http-chunk-size SIZE          # 基于块的 HTTP 下载的块大小,例如【10485760】或【10M】,默认禁用
--playlist-reverse              # 以相反的顺序下载播放列表视频
--playlist-random               # 以随机的顺序下载播放列表视频


--keep-fragments                # 下载完成后,将下载的片段保存在磁盘上,而不是默认被删除
--buffer-size SIZE              # 设置缓冲区大小 buffer,例如【1024】或【16K】
--no-resize-buffer              # 不自动调整缓冲区大小,默认情况下自动调整
--xattr-set-filesize            # 将文件的 ytdl.filesize 属性设置为预期的文件大小
--hls-prefer-native             # 使用本机 HLS 下载器,而不是 ffmpeg
--hls-prefer-ffmpeg             # 使用 ffmpeg,而不是本机 HLS 下载器
--hls-use-mpegts                # 使用 mpegts 容器来存放 HLS 视频,可以支持边下边播
--external-downloader COMMAND   # 使用指定的下载工具,当前支持 curl ffmpeg wget aria2c avconv axel httpie
--external-downloader-args ARGS # 给第三方下载工具指定参数

--http-chunk-size SIZE
Size of a chunk for chunk-based HTTP downloading (e.g. 10485760 or 10M) (default is disabled). May be useful for bypassing bandwidth throttling imposed by a webserver (experimental)

文件系统选项 Filesystem

-a FILE                    # 【--batch-file】下载文件中包含的 URL,每个 URL 一行,【#】【;】开头的行当做注释
--id                       # 仅使用视频 ID 作为文件名中
-o TEMPLATE                # 【--output】output filename template,详细查看 OUTPUT TEMPLATE
--output-na-placeholder PH # 输出 TEMPLATE 中不可用的元字段(meta fields)的占位符值,默认【NA】
--autonumber-start NUMBER  # 指定 %(autonumber)s 的起始值,默认为 1
--restrict-filenames       # 限制文件名为 ASCII 字符,并避免文件名中的 & 和空格
-w                         # 【--no-overwrites】不覆盖文件
-c                         # 【--continue】强制恢复部分下载的文件,默认仅在可能时恢复下载
--no-continue              # 不要恢复部分下载的文件,即从头开始下载
--no-part                  # 不使用 .part 文件,直接写入到输出文件
--no-mtime                 # 不使用 Last-modified header 来设置文件最后修改时间

--write-description        # 将视频描述写入到一个 .description 文件中
--write-info-json          # 将视频的 metadata 写入到一个 .info.json 文件中
--load-info-json FILE      # 加载包含视频信息的 JSON 文件,文件通过 --write-info-json 选项创建
--write-annotations        # 将视频注释写入到一个 .annotations.xml 文件中
--cookies FILE             # 使用文件中的 Cookie
--cache-dir DIR            # 文件缓存存储位置,默认为【.cache/youtube-dl】
--no-cache-dir             # 不用缓存
--rm-cache-dir             # 删除所有缓存文件

-a
File containing URLs to download ('-' for stdin), one URL per line. Lines starting with '#', ';' or ']' are considered as comments and ignored.

--cache-dir DIR
Location in the filesystem where youtube-dl can store some downloaded information permanently. By default $XDG_CACHE_HOME/youtube-dl or ~/.cache/youtube-dl . At the moment, only YouTube player files (for videos with obfuscated signatures 混淆签名) are cached, but that may change.

详细信息 Verbosity

-q                  # 【--quiet】开启安静模式
-v                  # 【--verbose】打印各种调试信息
--no-warnings       # 忽略警告
--print-json        # 下载的同时打印视频信息的 JSON
--newline           # 在新行打印进度条
--no-progress       # 不打印进度条
--console-title     # 在控制台标题栏显示进度


--dump-pages        # 使用 base64 编码,打印下载下来的页面,以用来调试问题(非常冗长)
--write-pages       # 将下载的中间页,写入当前目录下的文件中,以用来调试问题
--print-traffic     # 显示发送的和读取的 HTTP 流量
-C                  # 【--call-home】联系 youtube-dl 服务器进行调试
--no-call-home      # 不联系 youtube-dl 服务器进行调试

获取视频信息 Simulation

-g                  # 【--get-url】获取视频 url
-e                  # 【--get-title】获取标题,可能需要加【--encoding UTF-8】,下同
-j                  # 【--dump-json】获取 JSON 信息,详细查看 OUTPUT TEMPLATE
-J                  # 【--dump-single-json】获取 JSON 信息,或整个播放列表的 JSON 信息
-s                  # 【--simulate】不下载、不存储任何文件到硬盘

--get-id            # 获取视频 id
--get-thumbnail     # 获取缩略图 URL
--get-description   # 获取视频描述
--get-duration      # 获取视频时长
--get-filename      # 获取输出视频文件名
--get-format        # 获取输出视频格式
--skip-download     # 不下载视频

后处理选项 Post-processing

-x                           # 【--extract-audio】将视频转换为音频,需要 ffmpeg/avconv 和 ffprobe/avprobe
--audio-format FORMAT        # 指定音频格式,例如 best|aac|flac|mp3|m4a|opus|vorbis|wav|best(默认)
--audio-quality QUALITY      # 指定音频质量
--recode-video FORMAT        # 必要时将视频转码为其他格式,例如 mp4|flv|ogg|webm|mkv|avi

--postprocessor-args ARGS    # 给后处理器提供的参数
-k                           # 【--keep-video】在后处理后保存视频文件在磁盘上,默认会被删除
--no-post-overwrites         # 不要覆盖后处理文件,默认会被覆盖
--embed-subs                 # 在视频中嵌入字幕,仅适用于 mp4、webm、mkv 视频
--embed-thumbnail            # 将缩略图嵌入音频作为封面艺术(cover art)
--add-metadata               # 将元数据写入视频文件

--metadata-from-title FORMAT # 从视频标题中解析附加元数据(歌曲标题/艺术家),例如【%(artist)s - %(title)s】
--xattrs                     # 将元数据写入视频文件的 xattrs,使用 dublin core and xdg standards
--fixup POLICY               # 自动修复文件,never、warn、detect_or_warn(默认,修复文件,否则警告)
--prefer-avconv              # 后处理时优先使用 avconv
--prefer-ffmpeg              # 后处理优先使用 ffmpeg,默认
--ffmpeg-location PATH       # 指定 ffmpeg/avconv 程序的位置
--exec CMD                   # 在下载及后处理完成后,对文件执行命令,类似于 find 的 -exec 语法
--convert-subs FORMAT        # 转换字幕格式,当前支持 srt|ass|vtt

--audio-quality QUALITY
Specify ffmpeg/avconv audio quality, insert a value between 0 (better) and 9 (worse) for VBR or a specific bitrate like 128K (default 5)

--metadata-from-title FORMAT
Parse additional metadata like song_title/artist from the video title.
The format syntax is the same as --output.
Regular expression with named capture groups may also be used.
The parsed parameters replace existing values.
Example: 【%(artist)s - %(title)s】 matches a title like "Coldplay - Paradise".

不常用命令选项

网络选项 Network

--proxy URL               # 使用 HTTP/HTTPS/SOCKS 代理,如【socks5://127.0.0.1:1080/】
--socket-timeout SECONDS  # 连接超时时间,单位是秒
--source-address IP       # 绑定的客户端 IP 地址
-4                        # 【--force-ipv4】所有连接通过 IPv4
-6                        # 【--force-ipv6】所有连接通过 IPv6

地理限制 Geo Restriction

--geo-verification-proxy URL     # 代理哪些网站
--geo-bypass                     # 通过伪造 X-Forwarded-For HTTP header 绕过地理限制
--no-geo-bypass                  # 不通过伪造...绕过地理限制
--geo-bypass-country CODE        # 强制通过明确提供,两个字母的 ISO 3166-2 国家代码,绕过地理限制
--geo-bypass-ip-block IP_BLOCK   # 强制通过明确提供,IP block in CIDR notation,绕过地理限制

缩略图 Thumbnail

--write-thumbnail       # 把缩略图写入硬盘
--write-all-thumbnails  # 将所有缩略图写入磁盘
--list-thumbnails       # 列出所有可用的缩略图

解决方法 Workarounds

--encoding ENCODING          # 强制指定文件编码,否则中文可能会乱码
--no-check-certificate       # 禁止 HTTPS 证书验证
--prefer-insecure            # 使用未加密的连接,来检索(retrieve)有关视频的信息
--user-agent UA              # 使用的指定 user agent
--referer URL                # 指定自定义的 referer,用于网站限制视频仅来源于某一域名时(例如简书、CSDN)
--add-header FIELD:VALUE     # 指定一个自定义值的 HTTP header,使用分号分割,可以多次使用此选项
--bidi-workaround            # 解决缺乏双向(bidirectional)文本支持的终端,需要PATH中有bidiv或fribidi的路径
--sleep-interval SECONDS     # 每次下载前,随机睡眠范围的下限
--max-sleep-interval SECONDS # 每次下载前,随机睡眠范围的上限

视频格式 Video Format

-f FORMAT                    # 【--format】指定视频格式代码,详细查看 FORMAT SELECTION
--all-formats                # 下载所有可用的视频格式
--prefer-free-formats        # 优先下载开源(free)的视频格式,除非有特定的请求
-F                           # 【--list-formats】列出视频所有可用的格式
--youtube-skip-dash-manifest # 不要下载关于 YouTube 视频的 DASH 清单和相关数据
--merge-output-format FORMAT # 需要合并时的容器格式,例如 mkv,mp4,ogg,webm,flv,不需要合并会时忽略

字幕选项 Subtitle

--write-sub          # 下载字幕文件
--write-auto-sub     # 下载自动生成的字幕文件(YouTube only)
--all-subs           # 下载视频所有可用的字幕文件
--list-subs          # 列出所有可用的字幕文件
--sub-format FORMAT  # 字幕格式,如【srt】【ass/srt/best】
--sub-lang LANGS     # 要下载的字幕的语言,用逗号分隔,请使用【--list-subs】列出的可用语言标签

登录、验证 Authentication

-u USERNAME                # 【--username】使用指定的账户登录
-p PASSWORD                # 【--password】账户密码,未使用时将交互式地询问密码
-2 TWOFACTOR               # 【--twofactor】双因素(Two-factor)认证码
-n                         # 【--netrc】使用 .netrc 认证数据
--video-password PASSWORD  # 视频密码,vimeo、youku 等网站可能需要

Adobe Pass 选项

--ap-list-mso              # 列出所有支持的 Multiple-system operator
--ap-mso MSO               # 使用哪个 Multiple-system operator 标识符
--ap-username USERNAME     # Multiple-system operator 账号
--ap-password PASSWORD     # 账户密码,未使用时将交互式地询问密码

2020-07-02

posted @ 2020-07-02 19:04  白乾涛  阅读(1417)  评论(0编辑  收藏  举报