yt-dlp: 使用Docker下载并合并YouTube音视频
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-dlp
为yt
。
5. 补充
第一次使用有些繁琐,要构建镜像,随后使用就方便了,直接上述第4步的使用即可。
当然如果使用发生错误,大概率需要重新进行第2步的步骤,重新构建镜像以更新yt-dlp。
相关文章:删除 Docker 镜像中为 none 的镜像
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。