使用 Youtube-dl 下载 Youtube 1080P+ 视频

youtube-crowd-uproar-protest.jpg

鉴于 Youtube 将 1080P+ 画质的内容的音视频进行了分离。
之前的不少 Youtube 下载工具下载 1080P+ 画质都有一定程度的缺陷,现在 Youtube-dl 可以完美解决这个问题。

What is it?

来一段官网的介绍:

youtube-dl is a command-line program to download videos from YouTube.com and a few more sites. It requires the Python interpreter, version 2.6, 2.7, or 3.2+, and it is not platform specific. It should work in your Unix box, in Windows or in Mac OS X. It is released to the public domain, which means you can modify it, redistribute it or use it however you like. The project is currently being developed at GitHub.

翻译下来大概的意思:

Youtube-dl 是一个命令行程序,用于从 YouTube.com 和其他视频网站下载视频。其运行需要Python解释器,要求版本 2.6, 2.7 或 3.2+,并且它是全平台兼容的软件。
它可以在您的 Unix,Windows 或 Mac OS X 机器中运行。该项目已开源,这意味着您可以对其进行修改,重新分发或随意使用它。该项目目前正在 GitHub 上开发。

该工具支持断点续传,下载某个视频中途关闭后,下次下载同一个视频,进度会恢复。
文件下载位置保存在命令行的当前目录,要想切换保存位置,请使用 cd 命令切换到其他目录。
如果您电脑上已经安装了 Ffmpeg,youtube-dl 还会自动合并音视频。

安装

参考 https://www.runoob.com/python/python-install.html 安装 Python 3(Windows 系统记得勾选 Add Python 3.x to Path 以及安装 pip 选项)

python_install_help_1.png

python_install_help_2.png

前往 http://ffmpeg.org/download.html 下载安装 FFmpeg ,并将解压后的 bin 目录设置为环境变量。

使用 pip 安装 youtube-dl

pip install youtube-dl

使用

设置代理

鉴于国内的万里长城问题,这个要拿来作为第一位开讲了。
可以直接设置本次命令行的代理:

Windows: set https_proxy=http://127.0.0.1:1080
Linux or Mac: export https_proxy=http://127.0.0.1:1080

** 如不想使用全局代理,可以在每次需要代理的时候,
在每次 youtube-dl 命令后附上 --proxy "https://127.0.0.1:1080"
如: youtube-dl -F [url] --proxy "https://127.0.0.1:1080"

列举视频所有格式

youtube-dl -F [url]

或者

youtube-dl --list-formats [url]

这是一个列清单参数,执行后并不会下载视频,但能知道这个目标视频都有哪些格式存在,下一步进行下载的格式选择。

举例:输入 youtube-dl -F https://www.youtube.com/watch?v=UyJ8Qbh_LH0
将出现以下回应

[youtube] UyJ8Qbh_LH0: Downloading webpage
[youtube] UyJ8Qbh_LH0: Downloading video info webpage
[youtube] UyJ8Qbh_LH0: Downloading js player vfl-mZlA8
[info] Available formats for UyJ8Qbh_LH0:
format code extension resolution note
249 webm audio only DASH audio 55k , opus @ 50k, 1.64MiB
250 webm audio only DASH audio 70k , opus @ 70k, 2.10MiB
171 webm audio only DASH audio 115k , vorbis@128k, 3.88MiB
140 m4a audio only DASH audio 128k , m4a_dash container, mp4a.40.2@128k, 4.47MiB
251 webm audio only DASH audio 131k , opus @160k, 3.96MiB
278 webm 256x144 144p 96k , webm container, vp9, 30fps, video only, 3.28MiB
160 mp4 256x144 144p 110k , avc1.4d400c, 30fps, video only, 3.12MiB
242 webm 426x240 240p 224k , vp9, 30fps, video only, 7.39MiB
133 mp4 426x240 240p 318k , avc1.4d4015, 30fps, video only, 7.36MiB
243 webm 640x360 360p 413k , vp9, 30fps, video only, 14.03MiB
134 mp4 640x360 360p 712k , avc1.4d401e, 30fps, video only, 15.74MiB
244 webm 854x480 480p 759k , vp9, 30fps, video only, 25.41MiB
135 mp4 854x480 480p 1075k , avc1.4d401f, 30fps, video only, 24.75MiB
136 mp4 1280x720 720p 1477k , avc1.4d401f, 30fps, video only, 35.71MiB
247 webm 1280x720 720p 1513k , vp9, 30fps, video only, 45.11MiB
17 3gp 176x144 small , mp4v.20.3, mp4a.40.2@ 24k, 2.68MiB
36 3gp 320x180 small , mp4v.20.3, mp4a.40.2, 7.84MiB
18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k, 23.76MiB (best)

选取格式下载

可以选择单视频,单音频,也可以选择视频 + 音频 合并。
下载指定质量的视频和音频并自动合并:
youtube-dl -f [format code] [url] (请注意该 f 为小写)
通过上一步获取到了所有视频格式的清单,最左边一列就是编号对应着不同的格式.
由于 YouTube 的 1080p 及以上的分辨率都是音视频分离的,所以我们需要分别下载视频和音频,可以使用 247+251 (或 bestvideo+bestaudio)这样的组合.
如果系统中安装了 FFmpeg 的话, youtube-dl 会自动合并下下好的视频和音频, 然后自动删除单独的音视频文件。

举例:
输入 youtube-dl -f 247+251 https://www.youtube.com/watch?v=UyJ8Qbh_LH0
或输入 youtube-dl -f bestvideo+bestaudio https://www.youtube.com/watch?v=UyJ8Qbh_LH0

将出现以下回应

[youtube] UyJ8Qbh_LH0: Downloading webpage
[youtube] UyJ8Qbh_LH0: Downloading video info webpage
[youtube] UyJ8Qbh_LH0: Downloading js player vfls4aurX
[download] Destination: 小さな恋のうた/mongol800(Cover)-UyJ8Qbh_LH0.f247.webm
[download] 1.7% of 45.11MiB at 171.76KiB/s ETA 04:24

其他命令

下载字幕

youtubd-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)

更多命令参见项目 github 首页: https://github.com/rg3/youtube-dl

命令集合

只是简单下载视频的话,一直输入命令未免太过繁琐。附上可以免输入的批处理脚本和 shell 脚本。
(注:下载位置,代理等请自行核对修改)

windows 机器复制下方批处理脚本,以文本方式保存,修改后缀为 .bat 保存。

@echo off
:start
::设置下载位置
set dir=C:
pushd %dir%
if /i not %dir%==%cd% goto :start
echo 油管下载器,有代理。当前保存路径:%cd%
echo 设置代理 http_proxy=http://127.0.0.1:1080
set http_proxy=http://127.0.0.1:1080
:download
set /p input=请输入视频链接:
set input=%input:&=^^^&%
youtube-dl -F %input%
if errorlevel 1 goto :download
set /p code=请输入视频格式编号:
youtube-dl -f %code% %input%
::--external-downloader aria2c --external-downloader-args "-x 8 -k 1M"
goto :download

Linux or Mac 复制下方 shell 脚本,以文本方式保存,修改后缀为 .sh 保存。

#!/bin/bash
#设置下载路径
export dir=~
start() {
if [[ $(cd $dir;pwd) != $dir ]]
then
echo 不能设置下载目录为$dir
fi
}
echo 油管下载器,有代理。当前保存路径:$dir
start
echo 设置代理 http_proxy=http://127.0.0.1:1080
export http_proxy=http://127.0.0.1:1080
download(){
echo 请输入视频格式编号:
read code
youtube-dl -f $code $input
}
while [[ true ]]; do
echo 请输入视频链接:
read input
youtube-dl -F $input
if [[ $? -eq 0 ]]
then
download
fi
done
文章作者: chengww
文章链接: https://chengww.com/archives/youtube_download.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 chengww's blog