Youtube-dl的详细使用方法

偏向技术
/ 0 评论 / 1,250 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年04月01日,已超过1388天没有更新,若内容或图片失效,请留言反馈。

Youtube-dl

命令行程序,用于从YouTube.com和其他视频网站下载视频,是目前最热门下载的工具之一,拥有多个选项,由社区多人维护。

它依赖Python2.6、2.7或3.2+版本,可在Unix、Windows、macOS机器上运行

安装

  • UNIX(Linux/macOS/...):

    shell
    sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
    sudo chmod a+rx /usr/local/bin/youtube-dl
    12

    如果没有curl可以使用wget替换

    shell
    sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
    sudo chmod a+rx /usr/local/bin/youtube-dl
    12
  • Windows

    • 下载exe文件,添加到环境变量PATH,除了%SYSTEMROOT%\System32位置
    • Pip:sudo -H pip install --upgrade youtube-dl
    • Scoop:scoop install youtube-dl
  • MacOS:

命令说明

shell
youtube-dl [OPTIONS] URL [URL...]
1
  • -h/--help:打印帮助信息和退出命令
  • --version:打印版本信息和退出命令
  • -U/--update:更新到最新版本,或许需要管理员权限
  • -i/--ignore-errors:忽略下载错误,跳过播放列表中不可用的
  • --abort-on-error:如果遇到错误,中止其他视频的下载
  • --dump-user-agent:显示当前浏览器的UA信息
  • --list-extractors:显示所有支持的网站
  • --extractor-descriptions:显示所有支持的网站的描述
  • --force-generic-extractor:强制使用命令提取数据
  • --default-search PREFIX:使用前缀表示不合格的URL,比如gvsearch2,使用google搜索关键词,从视频中,寻找两个YouTube上的视频,使用auto,让youtube-dl猜测,auto_warning在猜测时会发出警告,error,会引发错误,fixup_error则会修复URL错误
  • --ignore-config:不使用配置文件,如果提供了全局配置文件的话/etc/youtube-dl.conf,不使用用户配置文件,~/.config/youtube-dl/config (Windows上:%APPDATA%/youtube-dl/config.txt)
  • --config-location <PATH>:配置文件的位置,包含文件目录
  • --flat-playlist:不提取播放列表,仅列出来
  • --mark-watched:标记观看过(仅限YouTube)
  • --no-mark-watched:不标记观看过(仅限YouTube)
  • --no-color:输出时,不显示颜色
  • 网络选项
  • --proxy <URL>:使用指定的http/https/socks代理,socks需指定协议头,比如socks://127.0.0.1:1080,使用--proxy ""表示直连模式
  • --socket-timeout <SECONDS>:超时时间(秒)
  • --source-address <IP>:绑定的客户端IP地址
  • -4, --force-ipv4:通过IPv4建立所有连接
  • -6, --force-ipv6:通过IPv6建立所有连接
  • 地理限制
  • --geo-verification-proxy <URL>:使用此代理验证IP地址对于某些受地理位置限制的网站。--proxy指定的代理将用于实际下载。
  • --geo-bypass:通过绕过地理限制,伪造X-Forwarded-For HTTP标头
  • --no-geo-bypass:不绕过地理限制,通过伪造X-Forwarded-For HTTP标头
  • --geo-bypass-country <CODE>:强制绕过地理限制,明确提供两个字母的ISO 3166-2国家/地区代码
  • --geo-bypass-ip-block <IP_BLOCK>:强制绕过地理限制,带有明确提供的IP块 CIDR符合
  • 视频选项
  • --playlist-start <NUMBER>:播放列表视频的开始位置(默认为1)
  • --playlist-end <NUMBER>:播放列表视频的结尾位置(默认为最后一个)
  • --playlist-items <ITEM_SPEC>:指明要下载的播放列表视频项目,在播放列表中以逗号分隔,比如--playlist-items 1,2,5,8--playlist-items 1-3,5,10-13
  • --match-title <REGEX>:仅下载匹配标题的视频(正则表达式 或 不区分大小写的字符串)
  • --reject-title <REGEX>:跳过下载以找到匹配标题的视频 (正则表达式或不区分大小写的字符串)
  • --max-downloads <NUMBER>:最大下载文件数,超过后中止
  • --min-filesize <SIZE>:限制最小下载文件的大小,比如50k44.6m
  • --max-filesize <SIZE>:限制最大下载文件的大小,比如500k100m
  • --date <DATE>:仅下载在该日期上传的视频
  • --datebefore <DATE>:仅下载通过的视频或在该日期之前上传的视频(包括该日期)
  • --dateafter <DATE>:仅下载通过的视频或在该日期之后上传的视频(包括该日期)
  • --min-views <COUNT>:不下载少于<COUNT>次数观看的视频
  • --max-views <COUNT>:不下载超过<COUNT>次数观看的视频
  • --match-filter <FILTER>:筛选视频条件过滤器,指定任何键(可用键参考OUTPUT TEMPLATE)匹配到的值,!key判断key是否存在,如果key > number,比如comment_count > 12>=,<,<=,!=,=同样可以用来比较,如果key = 'LITERAL',比如uploader = 'Smith'!=也可以使用,&并且,?或。比如--match-filter "like_count > 100 & dislike_count <? 50 & description"
  • --no-playlist:如果URL是视频和播放列表,则仅下载视频。
  • --yes-playlist:如果URL是视频和播放列表,则下载播放列表
  • --age-limit <YEARS>:仅下载匹配给定<YEARS>的视频
  • --download-archive <FILE>:仅下载未列出的视频存档文件。记录所有的ID 下载了其中的视频。
  • --include-ads:下载时包括广告 (实验性)
  • 下载选项
  • -r RATE/--limit-rate RATE:最大下载速率/秒(以字节为单位),比如50K4.2M
  • -R RETRIES/--retries RETRIES:重连次数,默认10,或者不限infinite
  • --fragment-retries RETRIES:片段的重连次数,默认10,或者不限infinite,(DASH, hlsnative and ISM)
  • --skip-unavailable-fragments:跳过不可用的片段(DASH, hlsnative和ISM)
  • --abort-on-unavailable-fragment:当某些片段不可用时中止下载
  • --keep-fragments:下载完成后保留下载的片段,默认是不保留
  • --buffer-size SIZE:下载缓冲区的大小(例如102416K),默认值为1024
  • --no-resize-buffer:不要自动调整缓冲区大小。缓冲区默认会自动从初始调整大小SIZE的值。
  • --http-chunk-size SIZE:基于块的HTTP下载的块大小(例如10485760或10M) (默认为禁用)。可能有用,用于绕过带宽限制,由网络服务器强加(实验性)
  • --playlist-reverse:反向下载播放列表视频
  • --playlist-random:随机下载播放列表视频
  • --xattr-set-filesize:将文件xattribute ytdl.filesize设置为预期文件大小
  • --hls-prefer-native:改用本地HLS下载器替代ffmpeg
  • --hls-prefer-ffmpeg:使用ffmpeg代替本地HLS 下载器
  • --hls-use-mpegts:将mpegts容器用于HLS 视频,允许下载时播放视频(某些播放器不支持)
  • --external-downloader COMMAND:使用指定的外部下载器。 目前支持aria2c,avconv,axel,curl,ffmpeg,httpie,wget
  • --external-downloader-args ARGS:将这些参数提供给外部下载器
  • 文件系统选项
  • -a FILE/--batch-file FILE:包含要下载的URL地址文件(“-”:stdin),一行一个url,从#开始,;视为评论,]视为忽略
  • --id:在文件名中仅使用视频ID
  • -o, --output TEMPLATE:输出文件名模板,参考OUTPUT TEMPLATE
  • --output-na-placeholder PLACEHOLDER:输出文件名模板中不可用时的占位符,默认为NA
  • --autonumber-start NUMBER:指定的起始值%(autonumber)s(默认为1)
  • --restrict-filenames:将文件名限制为仅ASCII 字符,并避免在其中使用“&”和空格
  • -w, --no-overwrites:不覆盖文件
  • -c, --continue:强制恢复部分已经下载的文件,默认情况下,如果可能,youtube-dl会恢复下载
  • --no-continue:忽略部分已经下载的文件,重新开始下载
  • --no-part:不使用.part文件,直接写入输出文件
  • --no-mtime:不使用Last-modified头来设置文件修改时间
  • --write-description:将视频描述写入到.description文件
  • --write-info-json:将视频元数据写入到.info.json文件
  • --write-annotations:将视频注释写入到.annotations.xml文件
  • --load-info-json FILE:JSON文件包含视频信息(由--write-info-json选项创建)
  • --cookies FILE:读取cookies文件或从cookie jar引入
  • --cache-dir DIR:youtube-dl缓存一些已经下载的固定数据所在的文件目录,默认是$XDG_CACHE_HOME/youtube-dl or ~/.cache/youtube-dl,仅YouTube播放文件(带有混淆签名的视频)会被缓存
  • --no-cache-dir:禁用文件系统缓存
  • --rm-cache-dir:删除所有文件系统缓存文件
  • 缩略图
  • --write-thumbnail:将缩略图写入磁盘
  • --write-all-thumbnails:将所有格式的缩略图都写入磁盘
  • --list-thumbnails:模拟并列出所有可用的缩略图格式
  • 详细/模拟选项,获取信息
  • -q, --quiet:开启安静模式
  • --no-warnings:忽略警告
  • -s, --simulate:不下载视频,也不将任何内容写入磁盘
  • --skip-download:不下载该视频
  • -g, --get-url:模拟,安静但可打印URL
  • -e, --get-title:模拟,安静但打印标题
  • --get-id:模拟,安静但可打印ID
  • --get-thumbnail:模拟,安静但打印缩略图UR
  • --get-description:模拟,安静但可打印视频 描述
  • --get-duration:模拟,安静但可打印视频长度
  • --get-filename:模拟,安静但打印输出文档名称
  • --get-format:模拟,安静但打印输出格式
  • -j, --dump-json:模拟,安静但打印JSON 信息。参见“OUTPUT TEMPLATE”
  • -J, --dump-single-json:模拟,安静但打印JSON 每个命令行的信息 争论。如果url是一个播放列表,转储整个播放列表单行显示信息。
  • --print-json:保持安静并打印视频信息为JSON(视频仍为 正在下载)。
  • --newline:将进度条输出为新行
  • --no-progress:不打印进度条
  • --console-title:在控制台标题栏中显示进度
  • -v, --verbose:打印各种调试信息
  • --dump-pages:打印使用编码的下载页面 base64调试问题(非常详细)
  • --write-pages:将下载的中间页写到 当前目录中的文件进行调试 问题
  • --print-traffic:显示已发送和读取的HTTP流量
  • -C, --call-home:调试时访问youtube-dl服务器
  • --no-call-home:调试时不访问youtube-dl服务器
  • 解决方案
  • --encoding ENCODING:强制指定编码
  • --no-check-certificate:禁止HTTPS证书验证
  • --prefer-insecure:使用未加密的连接来检索有关视频的信息。(仅支持YouTube)
  • --user-agent UA:自定义UA
  • --referer URL:如果视频访问受限,可自定义referer头
  • --add-header FIELD:VALUE:自定义HTTP请求头,以冒号;分隔,可以多次使用此选项
  • --bidi-workaround:解决缺少的终端 双向文本支持。需要 bidiv或fribidi可执行文件在PATH中
  • --sleep-interval SECONDS:每次下载间隔的时间,如果提供了--max-sleep-interval值,则SECONDS`为最小间隔
  • --max-sleep-interval SECONDS:每次下载最大间隔时间,只能与最小间隔一起使用
  • 视频格式
  • -f, --format FORMAT:视频格式代码,参考FORMAT SELECTION
  • --all-formats:下载所有可用的视频格式
  • --prefer-free-formats:首选免费视频格式,除非指定一个
  • -F, --list-formats:列出视频的所有可用格式
  • --youtube-skip-dash-manifest:不要下载DASH清单和 YouTube视频上的相关数据
  • --merge-output-format FORMAT:如果需要合并,输出一个允许的格式,在mkv、mp4、ogg、webm、flv,如果不需要合并,则忽略
  • 字幕选项
  • --write-sub:写字幕文件
  • --write-auto-sub:编写自动生成的字幕文件(仅YouTube)
  • --all-subs:下载该视频所有可用的字幕
  • --list-subs:列出该视频所有可用的字幕
  • --sub-format FORMAT:字幕格式,接受多种格式,比如,srtass/srt/best
  • --sub-lang LANGS:字幕语言下载,用逗号分隔,使用 --list-subs列出可用的语言tags
  • 身份验证选项
  • -u, --username USERNAME:使用该帐户ID登录
  • -p, --password PASSWORD:账户密码。如果这个选项没有,youtube-dl会询问。
  • -2, --twofactor TWOFACTOR:两步验证验证码
  • -n, --netrc:使用.netrc身份验证数据
  • --video-password PASSWORD:视频密码(vimeo,优酷)
  • Adobe Pass选项
  • --ap-mso MSO:Adobe Pass多系统运营商(电视 提供程序)标识符,使用--ap-list-mso 有关可用的MSO的列表
  • --ap-username USERNAME:多系统操作员帐户登录
  • --ap-password PASSWORD:多系统操作员帐户 密码。如果忽略此选项, youtube-dl将进行互动询问。
  • --ap-list-mso:列出所有支持的多系统运营人员
  • 下载后选项
  • -x, --extract-audio:将视频转换为仅音频文件(需要ffmpeg/avconvffprobe/avprobe
  • --audio-format FORMAT:指定音频格式,"best", "aac", "flac", "mp3", "m4a", "opus", "vorbis", 或 "wav",默认是"best",如果没有-x,则没有效果
  • --audio-quality QUALITY:指定ffmpeg/avconv音频质量,介于0(更好)和9(更差)之间的值,用于VBR或特定比特率,比如128K(默认5
  • --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:在音频中嵌入缩略图作为封面 艺术
  • --add-metadata:将元数据写入视频文件
  • --metadata-from-title FORMAT:解析其他元数据,比如歌曲、视频中的标题,格式与--output相似,具名的正则表达式捕获组也可以使用,解析的参数将替换现有的值,比如,--metadata-from-title "%(artist)s - %(title)s",匹配了标题 "Coldplay - Paradise",再比如使用正则,--metadata-from-title "(?P<artist>.+?) - (?P<title>.+)"
  • --xattrs:将元数据写入视频文件的 xattrs,使用dublin核心和xdg 标准
  • --fixup POLICY:自动更正已知的故障文件,never:什么也不做;warn:只发出警告;detect_or_warn :默认值,如果可以,则修复文件,否则发出警告。
  • --prefer-avconv:在ffmpeg上优先使用avconv来运行 后处理器
  • --prefer-ffmpeg:优先使用ffmpeg而不是avconv来运行 后处理器(默认值)
  • --ffmpeg-location PATH:ffmpeg/avconv二进制文件的位置,二进制文件的路径包含目录。
  • --exec CMD:在文件下载和后处理后执行命令,类似find-exec语法,比如--exec 'adb push {} /sdcard/Music/ && rm {}'
  • --convert-subs FORMAT:将字幕转换为其他格式,当前支持srt|ass|vtt|lrc

OUTPUT TEMPLATE

-o选项允许用户指示输出文件名的模板

  • id (string): 视频ID
  • title (string): 视频标题
  • url (string): 视频URL
  • ext(string): 视频文件后缀
  • alt_title(string): 视频的辅助标题
  • display_id (string): 视频的备用标识符
  • uploader (string): 视频上传者的全名
  • license (string): 视频的许可协议名称
  • creator (string):视频的创建者
  • release_date (string):视频发布的日期 (YYYYMMDD)
  • timestamp (numeric): 视频可用时的UNIX时间戳
  • upload_date (string): 视频上传日期(YYYYMMDD)
  • uploader_id (string): 视频上传者的昵称或ID
  • channel (string): 上传视频的频道的全名
  • channel_id (string): 频道ID
  • location (string): 录制视频的实际位置
  • duration (numeric): 视频长度(以秒为单位)
  • view_count (numeric): 用户观看的次数
  • like_count (numeric): 用户点赞的次数
  • dislike_count (numeric): 用户踩的次数
  • repost_count (numeric): 视频分享的次数
  • average_rating (numeric): 用户给出的平均评分,所使用的比例取决于网页
  • comment_count (numeric): 视频评论数
  • age_limit (numeric): 视频的年龄限制(年)
  • is_live (boolean): 该视频是实时流还是固定长度的视频
  • start_time (numeric): 复制开始的时间(以秒为单位),如URL中所指定
  • end_time (numeric): 复制应结束的时间(以秒为单位),如URL中所指定
  • format (string): 格式的易于理解的描述
  • format_id (string): --format指定的格式
  • format_note (string): 有关格式的其他信息
  • width (numeric): 视频宽度
  • height (numeric): 视频高度
  • resolution (string): 宽度和高度的文字描述
  • tbr (numeric): 音频和视频的平均比特率,单位为KBit/s
  • abr (numeric): 音频平均比特率,单位为KBit/s
  • acodec (string): 使用中的音频编解码器的名称
  • asr (numeric): 音频采样率,以HZ为单位
  • vbr (numeric): 视频平均比特率,单位为KBit/s
  • fps (numeric): 帧数
  • vcodec (string): 视频编解码器的名称
  • container (string): 容器格式的名称
  • filesize (numeric): 文件大小字节数(如果事先知道)
  • filesize_approx (numeric): 预估文件大小字节数
  • protocol (string): 用于实际下载的协议
  • extractor (string): 提取器的名称
  • extractor_key (string): 提取器的密钥名称
  • epoch (numeric): 创建文件时的Unix epoch
  • autonumber (numeric): 每次下载都会增加的编号,从--autonumber-start开始
  • playlist (string): 包含视频的播放列表的名称或ID
  • playlist_index (numeric): 播放列表中视频的索引,根据播放列表的总长度用前导零填充
  • playlist_id (string): 播放列表标识符
  • playlist_title (string): 播放列表标题
  • playlist_uploader (string): 播放列表上传者的全名
  • playlist_uploader_id (string): 播放列表上传者的昵称或ID
  • 适用于属于某些逻辑章节的视频
  • chapter (string): 视频所属章节的名称或标题
  • chapter_number (numeric): 视频所属章节的编号
  • chapter_id (string): 视频所属章节的ID
  • 可用于某些系列或节目的短片的视频
  • series (string): 视频片段所属的系列或节目的标题
  • season (string): 影片集所属季节的标题
  • season_number (numeric): 该视频集所属的季节数
  • season_id (string): 该视频集所属的季节ID
  • episode (string): 视频剧集的标题
  • episode_number (numeric): 一个季节中的视频片段数
  • episode_id (string): 视频剧集的ID
  • 可用于作为曲目或音乐专辑一部分的媒体
  • track (string): 曲目标题
  • track_number (numeric): 专辑或光盘中的曲目编号
  • track_id (string): 曲目编号
  • artist (string): 曲目艺术家
  • genre (string): 曲目类型
  • album (string): 曲目所属专辑的标题
  • album_type (string): 相册类型
  • album_artist (string): 所有出现在专辑中艺术家的名单
  • disc_number (numeric): 轨道所属的光盘或其他物理介质的编号
  • release_year (numeric): 发行专辑的年份(YYYY)

当提供的模板,不存在值时,将采用--output-na-placeholde提供的值进行替换,该值默认为NA

比如有一个titleyoutube-dl test videoidBaW_jenozxkL的mp4视频,提供了如下参数,-o %(title)s-%(id)s.%(ext)s,结果将会在当前目录新建一个文件名为youtube-dl test video-BaW_jenozKcj.mp4`的视频

比如数字格式的模板,可以使用数字相关的格式,比如%(view_count)05d,将会生成一个用0填充的5位数,例如00024

输出模板还可以包含多级结构/,比如-o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s',这将导致将每个视频下载到与此路径模板相对应的目录中,如果不存在目录,将会自动创建

如果需要在模板中使用百分比,请使用%%,如果要标准输出,请使用-o -

当前模板的默认值是,%(title)s-%(id)s.%(ext)s

一些情况下,你不想在下载之后保留特殊的字符,比如"中"、空格或者"&",可以通过--restrict-filenames来获取较短的标题

如果在WIndows批处理文件中使用输出模板,必须使用%来转义模板,比如,-o "%(title)s-%(id)s.%(ext)s" 将变成-o "%%(title)s-%%(id)s.%%(ext)s",但是不应该在其他位置使用,比如环境变量,-o "C:\%HOMEPATH%\Desktop\%%(title)s.%%(ext)s"

需要注意的是,在Windows上,可能需要使用双引号而不是单引号

0

评论 (0)

取消