youtube-dl,该项目因不可抗原因停止更新,之前的方法失效;
替代品yt-dlp,项目地址:https://github.com/yt-dlp/yt-dlp
因Docker Hub免费会员现如今不能自动构建来自GitHub的代码源,所以在本地构建Docker镜像,从而使用。

1. 安装 Docker

Docker一键安装命令(不适用于OpenVZ架构的VPS):

curl -sSL https://get.docker.com/ | sh

# CentOS下还需要以下命令启动和随机启动:
# 启动 Docker
systemctl start docker.service
# 设置开机自启动
systemctl enable docker.service

2. 通过Dockerfile构建镜像

用文本编辑器创建Dockerfile,文件内容:

FROM python:3-alpine
MAINTAINER https://onebox.site

RUN set -xe \
    && apk add --no-cache ca-certificates \
                          ffmpeg \
                          openssl \
                          aria2 \
    && pip3 install --no-cache-dir yt-dlp \
    && yt-dlp --version

WORKDIR /data

ENTRYPOINT ["yt-dlp"]
CMD ["--help"]

随后构建名为yt-dlp的镜像:

docker build -t yt-dlp .

3. 设置 alias 指令别名

alias yt='docker run --rm -u $(id -u):$(id -g) -v $PWD:/data yt-dlp'

如需alias指令别名常驻系统,需编辑~/.bashrc

4. 使用 yt-dlp 镜像

# 列出所有格式
yt -F nVjsGKrE6E8
# 下载视频
yt nVjsGKrE6E8
yt -S "ext" nVjsGKrE6E8

# 示例:
root@debian:~# yt -S "ext" nVjsGKrE6E8
[youtube] Extracting URL: nVjsGKrE6E8
[youtube] nVjsGKrE6E8: Downloading webpage
[youtube] nVjsGKrE6E8: Downloading ios player API JSON
[youtube] nVjsGKrE6E8: Downloading android player API JSON
[youtube] nVjsGKrE6E8: Downloading player 99faf012
[youtube] nVjsGKrE6E8: Downloading m3u8 information
[info] nVjsGKrE6E8: Downloading 1 format(s): 617+140
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 53
[download] Destination: Lana Del Rey - Summertime Sadness [nVjsGKrE6E8].f617.mp4
[download] 100% of   41.38MiB in 00:00:04 at 9.96MiB/s                   
[download] Destination: Lana Del Rey - Summertime Sadness [nVjsGKrE6E8].f140.m4a
[download] 100% of    4.10MiB in 00:00:00 at 98.44MiB/s    
[Merger] Merging formats into "Lana Del Rey - Summertime Sadness [nVjsGKrE6E8].mp4"
Deleting original file Lana Del Rey - Summertime Sadness [nVjsGKrE6E8].f140.m4a (pass -k to keep)
Deleting original file Lana Del Rey - Summertime Sadness [nVjsGKrE6E8].f617.mp4 (pass -k to keep)

更多使用方法参阅yt-dlp官方文档:https://github.com/yt-dlp/yt-dlp#readme,只需替换yt-dlpyt

5. 补充

第一次使用有些繁琐,要构建镜像,随后使用就方便了,直接上述第4步的使用即可。
当然如果使用发生错误,大概率需要重新进行第2步的步骤,重新构建镜像以更新yt-dlp。
相关文章:删除 Docker 镜像中为 none 的镜像