menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

youtube-dl使用指南

作者:Chancel Yang, 创建:2019-07-25, 字数:3385, 已阅:732, 最后更新:2024-03-10

关注一些Youtube的频道,想定时保存这些视频,网上查找了一下下载方案,找到了不少Windows的客户端,但基本都收费,最后使用了youtube-dl,简单配置下就可以批量下载频道视频,Nice!

1. 介绍

youtube-dl支持的抓取视频的网站多达上千个,包括爱奇艺/Bilibili/Youku等国内主流视频网站,可以通过命令行查询,简单罗列一下支持的列表

Bash
$ youtube-dl --list-extractors
1tv
1up.com
6play
...(这里省略上千行)
YouJizz
youku
youku:show
YouNowChannel
ZDFChannel
zingmp3
Zype

因为youtube-dl是一个命令行工具,没有UI界面,如果你要考虑有UI界面的,可以参考这个使用Python构建的Youtube-GUI项目MrS0m30n3/youtube-dl-gui

我这里仅使用CLI来定时同步下载部分频道的优质视频,所以不需要使用界面

以下操作基于Ubuntu2204 LTS,其他发行版大同小异

2. 安装使用

2.1. 安装

官网安装指南:https://ytdl-org.github.io/youtube-dl/download.html

安装方式大致如下三种

Bash
# pip安装
pip install --upgrade youtube_dl

# curl安装
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

# wget安装
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

后两者的安装方式是一样的,只是下载工具不同而已

另外,如要下载youtube上1080P以上资源时,因1080P以上的视频采用了音视频分流设计,需安装ffmpeg将音视频压制在一起

Bash
sudo apt install -y ffmpeg

2.2. 下载视频

youtube-dl下载非常简单,如下

Bash
youtube-dl 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'

以下是常见的使用方法,包括使用网络代理、指定下载文件路径、自动命名等

Bash
# 网络代理
youtube-dl --proxy socks5://192.168.10.1:1080 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'

# 指定路径
youtube-dl 'https://www.youtube.com/watch?v=CxyVYiM6FQQ' -o '/tmp/example.mp4'

# 自动命名
youtube-dl 'https://www.youtube.com/watch?v=CxyVYiM6FQQ' -o '%(title)s.%(ext)s'

2.3. 字幕、格式选择

一个视频通常有多个格式跟多种字幕,首先查看所有字幕与格式

Bash
# 查看视频所有格式(不触发下载)
youtube-dl --list-formats 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'
# 下载所有格式
youtube-dl --all-formats 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'
# 下载指定格式(数字来自第一条指令查询)
youtube-dl -f 137 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'
# 下载最高清的版本
youtube-dl -f bestvideo+bestaudio 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'

字幕选择

Bash
# 列出所有可用字幕
youtube-dl --list-subs 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'
# 写入字幕
youtube-dl --write-sub 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'
# 写入youtube自动生成的字幕
youtube-dl --write-auto-sub 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'
# 下载所有字幕文件
youtube-dl --all-subs 'https://www.youtube.com/watch?v=CxyVYiM6FQQ'

3. 自动同步频道视频

我们可以写一个定时脚本下载频道内所有视频,但问题是如何去重?重复下载消耗流量也更容易被禁用IP

youtube-dl本身已经解决这个问题了,解决方案如下

Bash
# 记录已下载的视频ID文件
touch youtube-dl-archive.cfg

# 需要跟踪的频道连接(完整的https链接,一行代表一个频道)
touch youtube-dl-channels.cfg

编辑配置文件youtube-dl.conf,内容如下

TEXT
-i
-o "%(uploader)s (%(uploader_id)s)/%(upload_date)s - %(title)s - (%(duration)ss) [%(resolution)s] [%(id)s].%(ext)s"
# 设置代理
--proxy 192.168.11.11:3128
# 记录已下载文件以及需要下载的频道
--download-archive youtube-dl-archive.cfg
-a youtube-dl-channels.cfg
# 设置每个任务间隔30秒(过快的下载会导致被youtube封禁IP)
--sleep-interval 30
# 统一输出格式
--prefer-ffmpeg
--merge-output-format mkv
# 下载字幕
--write-sub
--all-subs
--convert-subs srt
# 下载元数据和配图
--add-metadata
--write-description
--write-thumbnail
# Debug
-v

试运行

Bash
youtube-dl --config-location youtube-dl.conf

如没有报错提示,可以多次运行,看看是否会重复下载视频

最后,我们添加这个任务到crontab作为定时任务即可

结束语

参考资料


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]