使用Youtube-dl下载视频

简介

youtube-dl是一款命令行下载工具,可以用来下载视频网站的视频.(Github链接)
支持列表包括: BiliBili, Youtube, 爱奇艺等

youtube-dl项目由Ricardo Garcia创建于2008年。源代码由Python编写,托管在GitHub上。最初仅支持YouTube,但随着项目的发展,开始支持其他视频网站。2011年Ricardo Garcia不再维护此项目,由phihag接手,后转移给dstftw.

准备工作

安装python3pip

下载地址: https://www.python.org/downloads/

安装教程: https://zhuanlan.zhihu.com/p/344887837

安装时, 记得勾选pip

安装youtube-dl

参考网站 https://github.com/ytdl-org/youtube-dl

命令安装:

1
pip install --upgrade youtube-dl

或者下载exe文件

官方原话:

Windows users can download an .exe file and place it in any location on their PATH except for %SYSTEMROOT%\System32 (e.g. do not put in C:\Windows\System32).

安装ffmpeg(选择安装)

主要用来转换mp4格式

下载地址: https://github.com/BtbN/FFmpeg-Builds/releases

image-20210627185448896

解压缩安装包, 然后把ffmpeg解压缩目录\bin添加到环境变量

image-20210627185651420

image-20210627185738563

image-20210627185817039

如图所示, 添加环境变量ffmpeg解压缩目录\bin

image-20210627185841049

安装aria2(选择安装)

如果不需要多线程下载话,可以不用安装.

aira2是一个可以多线程下载的命令行下载工具,可以用于提高下载速度.youtube-dl默认是单线程下载.

下载完成后,安装目录添加到环境变量即可(参考ffmpeg安装过程即可)

image-20210630102346258

官网: https://aria2.github.io/

使用说明 https://zhuanlan.zhihu.com/p/30666881

使用说明

1. 下载单个视频

1
2
3
4
youtube-dl \
-o "E:\保存位置\%(title)s-%(upload_date)s.%(ext)s" \
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' \
https://www.youtube.com/watch?v=H00fMgUMmlY
  • -o "E:\保存位置\%(title)s-%(upload_date)s.%(ext)s" 视频输出路径和视频文件名称
  • -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4'设置下载视频格式为mp4
    如果不支持下载mp4格式, 把这个参数改为-f best可以下载其他格式
  • https://www.youtube.com/watch?v=H00fMgUMmlY 视频地址

2. 下载频道里面的多个视频

1
2
3
4
5
youtube-dl \
--playlist-reverse \
-o "E:\保存位置\%(playlist_index)s-%(title)s-%(upload_date)s.%(ext)s" \
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' \
https://www.youtube.com/@ArduinoBar/videos
  • -o "E:\保存位置\%(playlist_index)s-%(title)s-%(upload_date)s.%(ext)s" 视频输出路径和视频文件名称
  • -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4'设置下载视频格式为mp4
    如果不支持下载mp4格式, 把这个参数改为-f best可以下载其他格式
  • --playlist-reverse反转下载列表, 因为默认是按最新时间为开头排序,所以要加这个参数
  • https://www.youtube.com/@ArduinoBar/videos 频道地址

3.下载播放列表(专辑列表)

1
2
3
4
5
youtube-dl \
--yes-playlist \
-o 'E:\保存位置\%(playlist_index)s-%(title)s-%(upload_date)s.%(ext)s' \
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' \
https://www.youtube.com/playlist?list=PLQRnyhbmYAa_gibMxk780O9hyTDgUTMH6

--yes-playlist 下载播放列表, 专门用来下载视频专辑的参数

-o "E:\保存位置\%(playlist_index)s-%(title)s-%(upload_date)s.%(ext)s" 视频输出路径和视频文件名称

-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4'设置下载视频格式为mp4
如果不支持下载mp4格式, 把这个参数改为-f best可以下载其他格式

4.按地址文件下载多个视频

youtube-dl -a url.txt也可以将要下载视频的URL全部放在文本文件中,并将其作为参数传递给youtube-dl。此命令将下载url.txt文件中所有URL指向的视频。文件中使用#号作为注释.

5.下载字幕

  • youtube-dl --write-sub [url]这样会下载一个vtt格式的英文字幕和mkv格式的1080p视频下来

  • youtube-dl --write-sub --skip-download [url]下载单独的vtt字幕文件,而不会下载视频

  • youtube-dl --write-sub --all-subs [url]下载所有语言的字幕(如果有的话)

  • youtube-dl --write-auto-sub [url]下载自动生成的字幕(YouTube only)

  • youtube-dl --embed-subs [url] :把字幕合并到视频中,只支持 mp4、mkv 和 webm 格式的视频

6.按日期下载视频列表

youtube-dl 允许我们按照上传日期来筛选和下载视频或播放列表,例如:

  • 要下载 2019 年 8 月 1 日上传的视频,可以使用:youtube-dl --date 20190801 [URL]

  • 下载在特定日期或之前上传的视频:youtube-dl --datebefore 20190801 [URL]

  • 下载在特定日期或之后上传的视频:youtube-dl --dateafter 20190101 [URL]

  • 仅下载过去 6 个月内上传的视频:youtube-dl --dateafter now-6months [URL]

  • 下载特定时间段内(例如 2018 年 1 月 1 日至 2019 年 1 月 1 日)上传的视频:youtube-dl --dateafter 20180101 --datebefore 20190101 [URL]

7. 按序号下载视频列表

要从播放列表下载第 10 个文件,可使用:youtube-dl --playlist-items 10 [playlist_url]
要下载多个指定的文件,用逗号分隔:youtube-dl --playlist-items 2,3,7,10 [playlist_url]

也可以按序号来指定下载范围,例如:

  • 从第 10 个开始,直接下载完整个列表:youtube-dl --playlist-start 10 [playlist_url]

  • 在播放列表中仅下载从第 2 到第 5 的文件:youtube-dl --playlist-start 2 --playlist-end 5 [playlist_url]

8. 查看视频的所有类型,只看不下载

命令:youtube-dl -F [url]或者youtube-dl --list-formats [url]
这是一个列清单参数,执行后并不会下载视频,但能知道这个目标视频都有哪些格式存在,以便有选择的下载。

img

如上图所示,Youtube-dl 列出了给定视频的所有可用格式,从左到右分别为:format code(视频格式代码)、extension(扩展名)、resolution(分辨率)和 note(注释)。当您想要以特定质量或格式下载视频时,先查看一下有哪些可用,会非常便利。

9. 下载视频列表文件名称, 输出到txt文件

1
2
3
4
5
6
7
youtube-dl \
--playlist-reverse \
--write-description \
--get-filename \
-o '%(playlist_index)s-%(title)s-%(upload_date)s.mp4' \
https://www.youtube.com/playlist?list=PLQRnyhbmYAa_gibMxk780O9hyTDgUTMH6" \
> video_names.txt
  • --get-filename 获取视频名称

9.1. 获取视频播放列表的视频地址, 输出到txt文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

# 输出文件
file="out.txt"

# 播放列表地址
playlist_url="https://www.youtube.com/playlist?list=PLQRnyhbmYAa_gibMxk780O9hyTDgUTMH6"

# 获取视频id, 写入文件
youtube-dl \
--playlist-reverse \
--get-id \
"$playlist_url" \
> "$file"

# 添加视频地址前缀
sed -i 's|^|https://www.youtube.com/watch?v=|g' "$file"
  • --get-id 获取视频id

10. 更多使用方法

https://zhuanlan.zhihu.com/p/105141332
https://github.com/ytdl-org/youtube-dl

进阶使用

搭配aria2进行多线程下载

1
2
3
4
5
6
7
youtube-dl \
--playlist-reverse \
-o 'E:\保存位置\%(playlist_index)s-%(title)s-%(upload_date)s.%(ext)s' \
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' \
--external-downloader aria2c \
--external-downloader-args '-x 16 -k 1M' \
https://www.youtube.com/playlist?list=PLQRnyhbmYAa_gibMxk780O9hyTDgUTMH6

上面命令可以加入--playlist-end 5测试下载5个视频

参数说明

--external-downloader aria2c //调用外部下载工具

--external-downloader-args //外部下载工具指定参数

-x 16 //启用aria2 16个线程,最多就支持16线程

-K 1M //指定块的大小

其他问题

1. xx.sh文件如何使用?


使用Youtube-dl下载视频
https://blog.9001001.xyz/posts/eef75563744d/
作者
夏日雪糕
发布于
2021年6月29日
许可协议