开源地址

yt-dlp

开始配置

  1. 在Github下载编译好的FFmpeg,并配置好环境变量
  2. 下载yt-dlp的Windows版本的releases,并放在FFmpeg的同级目录下。(通常是bin
  3. 安装Chrome扩展程序Get-cookies.txt-LOCALLY,选择性导出你所要下载视频的网站cookies,以供yt-dlp下载高清视频

基础使用

查找指定url的所有视频/音频源

1
yt-dlp --cookies cookies/file/path -F url	

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\Users\Administrator>yt-dlp --cookies www.nicovideo.jp_cookies.txt -F https://www.nicovideo.jp/watch/sm44335943
[niconico] Extracting URL: https://www.nicovideo.jp/watch/sm44335943
[niconico] sm44335943: Downloading webpage
[niconico] sm44335943: Downloading JSON metadata
[niconico] sm44335943: Downloading m3u8 information
[info] Available formats for sm44335943:
ID EXT RESOLUTION FPSFILESIZE TBR PROTOVCODEC VBR ACODEC ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
audio-aac-64kbps mp4 audio only │ ~ 48.65MiB 69k m3u8audio only aac 69k 48k Main Audio
audio-aac-192kbps mp4 audio only │ ~137.33MiB 194k m3u8audio only aac 194k 48k Main Audio
video-143 mp4 256x144 30 │ ~101.55MiB 143k m3u8avc1.4d401e 143k video only
video-566 mp4 640x360 30 │ ~400.72MiB 566k m3u8avc1.4d401e 566k video only
video-1516 mp4 854x480 30 │ ~ 1.05GiB 1516k m3u8avc1.4d4020 1516k video only
video-1784 mp4 1280x720 30 │ ~ 1.23GiB 1784k m3u8avc1.4d4020 1784k video only

下载指定视频+音频

1
2
yt-dlp --cookies cookies/file/path url -f videoID+audioID
yt-dlp --cookies www.nicovideo.jp_cookies.txt https://www.nicovideo.jp/watch/sm44335943 -f audio-aac-192kbps+video-1784

不查找,直接下载最高品质视频+音频

1
2
yt-dlp --cookies cookies/file/path url -f bestvideo+bestaudio
yt-dlp --cookies www.nicovideo.jp_cookies.txt https://www.nicovideo.jp/watch/sm44335943 -f bestvideo+bestaudio

其他

下载最高品质报错

那就先查找,看返回就知道啥情况了

1
2
3
4
5
ID EXT RESOLUTION │ PROTO │ VCODEC  ACODEC
───────────────────────────────────────────
0 mp4 unknown │ https │ unknown unknown
1 mp4 unknown │ https │ unknown unknown
2 mp4 unknown │ https │ unknown unknown

这种就要手动指定序号下载,一般最下面的就是最高品质的。

报错文件路径不合法

一般情况下,yt-dlp会帮你自动把禁止出现在Windows文件名中的非法半角字符转换为全角字符,并不会出现文件名不合法的情况。经验证,此类报错大部分情况为文件名长度超出Windows允许长度导致的。对于此类情况,手动指定较短文件名即可。

被人机验证卡了

加参数--extractor-args "generic:impersonate"

提高重试次数

1
-R, --retries RETRIES 

使用conf文件简化命令输入

yt-dlp同级目录下新建yt-dlp.conf,存入cookiespaths等参数。

1
2
--cookies cookies/file/path
--paths "path/to/save"

调用外部下载器

1
--external-downloader aria2c

一种进阶下载法

问题提出

对于一些小众且不规范的网站,使用yt-dlp批量下载视频的时候会出现很多奇奇怪怪的问题,我以tokyomotion这个网站为例进行一个批量下载的示例。

首先说这个网站存在的问题

  1. 不识别视频列表,想要下载某个搜索结果或某个用户主页的所有视频时,直接输url完全找不到对应视频列表。
  2. 无法使用bestvideo+bestaudio,并且使用-F发现视频下载用的-f的ID不统一。例如下面的2种情况,有的视频有HDSD两种,有的只有SD,而且详细信息都是unknownbestvideo+bestaudio根本没法用。
    1
    2
    3
    4
    ID EXT RESOLUTION │ PROTO │ VCODEC  ACODEC
    ───────────────────────────────────────────
    SD mp4 unknown │ https │ unknown unknown
    HD mp4 unknown │ https │ unknown unknown
    1
    2
    3
    ID EXT RESOLUTION │ PROTO │ VCODEC  ACODEC
    ───────────────────────────────────────────
    SD mp4 unknown │ https │ unknown unknown
  3. 视频名重复,yt-dlp识别的视频ID也重复,无论是用--download-archive downloaded.txt还是-o "%(title)s [%(webpage_url_basename)s].%(ext)s"又或是-o "%(title)s [%(id)s].%(ext)s"都会因误识别非重复视频导致部分视频下载丢失。下面是一个示例。
    1
    https://www.tokyomotion.net/video/5070506/uise
    yt-dlp默认识别的视频ID是最后面的uise,对于这个网站,这个ID和视频名重复,真正的ID应该是前面的5070506,这就导致yt-dlp提供的ID识别视频方法全部失效。

解决方案

  1. 首先手动或者使用脚本提取你要下载的视频连接出来,保存至一个url.txt,内容类似于
    1
    2
    3
    4
    5
    6
    https://www.tokyomotion.net/video/4967756/uise
    https://www.tokyomotion.net/video/4967737/uise
    https://www.tokyomotion.net/video/4877359/uise
    https://www.tokyomotion.net/video/4766461/uise
    ...
    ...
  2. 使用脚本手动提取视频ID。脚本内容可根据自己实际情况修改
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import re

    # 输入文件(每行一个原始链接)
    input_file = "url.txt"

    # 输出文件(格式:video_id URL)
    output_file = "url_modified.txt"

    with open(input_file, "r", encoding="utf-8") as infile, \
    open(output_file, "w", encoding="utf-8") as outfile:

    for line in infile:
    line = line.strip()
    if not line:
    continue

    # 提取 URL 中的数字 ID
    match = re.search(r"/video/(\d+)/", line)
    if match:
    video_id = match.group(1)
    outfile.write(f"{video_id} {line}\n")
    else:
    print(f"跳过无法识别的行: {line}")

  3. bat批处理,并且允许选择视频画质。
    1
    2
    3
    4
    5
    6
    7
    @echo off
    for /f "tokens=1,2" %%A in (url_modified.txt) do (
    yt-dlp --cookies "www.tokyomotion.net_cookies.txt" ^
    --output "%%A - %%(title)s.mp4" ^
    -f "HD/SD" ^
    %%B
    )
    对于视频画质,如果遇到类似于下面的,
    1
    2
    3
    4
    5
    6
    ID  EXT RESOLUTION   │ PROTO │ VCODEC  ACODEC  NOTE
    ──────────────────────────────────────────────────────────
    18 mp4 640x360 │ https │ unknown unknown medium
    22 mp4 1280x720 │ https │ unknown unknown hd720
    137 mp4 1920x1080 │ https │ unknown unknown video only
    140 m4a audio only │ https │ unknown unknown
    可以用-f "140+137/22/18"这样的参数来表示优先级顺序,即使遇到音视频分离类型的视频也没问题。

同类工具推荐

YoutubeDownloader