如何从youtube-dl中选择视频质量?

我已经在我的14.04系统中安装了youtube-dl。
我可以通过以下命令下载视频,
$ youtube-dl [youtube-link]

但是我想知道如何选择YouTube视频的可用像素质量(例如1080p、720p、480p等)。在软件描述中,他们说这是可能的(如下图所示),但是具体怎么做呢?

ss


3上述描述已过时。根据“man”页面的说明:“youtube-dl现在默认下载YouTube报告的最高可用质量,这可能是1080p或720p。” - Jos
3请注意,YouTube已经采用某种保护措施,防止下载工具下载(甚至查看)1080p版本,但您仍然可以下载所有其他分辨率,包括720p。 - thomasrutter
2我知道我有点晚来参加这个派对,但这是我的经验:https://askubuntu.com/a/1097056/327339。请使用"-f best"选项。 - Gabriel Staples
10个回答

要下载视频,你需要在命令后面输入URL,就像这样:
youtube-dl 'http://www.youtube.com/watch?v=P9pzm5b6FFY'

选择视频质量,首先使用-F选项列出可用的格式,这是一个示例:

youtube-dl -F 'http://www.youtube.com/watch?v=P9pzm5b6FFY'

这是输出结果:
[youtube] Setting language
[youtube] P9pzm5b6FFY: Downloading webpage
[youtube] P9pzm5b6FFY: Downloading video info webpage
[youtube] P9pzm5b6FFY: Extracting video information
[info] Available formats for P9pzm5b6FFY:
format code extension resolution  note 
140         m4a       audio only  DASH audio , audio@128k (worst)
160         mp4       144p        DASH video , video only
133         mp4       240p        DASH video , video only
134         mp4       360p        DASH video , video only
135         mp4       480p        DASH video , video only
136         mp4       720p        DASH video , video only
17          3gp       176x144     
36          3gp       320x240     
5           flv       400x240     
43          webm      640x360     
18          mp4       640x360     
22          mp4       1280x720    (best)

最好的质量是22,所以使用-f 22而不是-F来下载1280x720分辨率的MP4视频,就像这样:
youtube-dl -f 22 'http://www.youtube.com/watch?v=P9pzm5b6FFY'

或者,您可以选择使用以下标志自动下载可用的最佳音频和视频轨道作为单个文件:
youtube-dl -f best 'http://www.youtube.com/watch?v=P9pzm5b6FFY'

如果在混流过程中遇到任何错误或者视频质量选择方面的问题,您可以使用以下命令之一:
youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4 'http://www.youtube.com/watch?v=P9pzm5b6FFY'

Gabriel Staples指出这里,下面的命令通常会选择实际的最佳单个文件视频质量分辨率而不是视频质量比特率:
youtube-dl -f best 'http://www.youtube.com/watch?v=P9pzm5b6FFY'

这些命令将确保您以最高质量下载视频的mp4格式和音频的m4a格式,并将它们合并为一个单独的mp4文件(在我的情况下使用ffmpeg)。如果没有安装ffmpegavconvyoutube-dl应该回退到默认的单个文件-f best option选项,而不是默认选项。

点击此处获取更详细的信息和一些不同的示例。

此外,点击查看Gabriel Staples提供的相关答案。


来源:www.webupd8.org/2014/02/video-downloader-youtube-dl-gets.html 来源:github.com/rg3/youtube-dl

9请确保不要选择“DASH”。那将无法播放! - xyz
@prakharsingh95,DASH音频只能通过gnac或类似软件转换为标准的wave或mp3格式。 - mchid
3我是指“DASH 视频”。我尝试下载的是“4K”,但全部都是以“DASH”格式保存的(“DASH”可以让 YouTube 保留带宽)。它与原来差别很大,大部分无法播放。 - xyz
1@prakharsingh95 如果有需要的话,你可以尝试使用VLC来查看mp4文件,因为VLC允许你将视频与独立的音频文件同步。不过我还没有尝试过这个方法。你试过将DASH下载的mp4文件转换成avi格式吗?我觉得它们很相似。 - mchid
2是的,Dash当然可以播放,但你需要使用类似avconv的工具将流复用。这对于4K来说速度太慢了。 - xyz
选项'-f bestaudio+bestvideo'在youtube-dl的2012.02.27版本中无法使用,它会抛出"ERROR: requested format not available"的错误。 - AjayKumarBasuthkar
1@AjayKumarBasuthkar 哇,那是一个古老的youtube-dl版本。我很惊讶它居然还能工作!通常我建议使用Ubuntu软件仓库中的软件,但对于youtube-dl来说,拥有最新和最新版本几乎是必不可少的。(见下一条评论) - mchid
@AjayKumarBasuthkar 你有两个选择。最新版本可以通过github(https://github.com/rg3/youtube-dl)获取,也可以通过Python的官方Python pip仓库获取。第一种选择。你可以从github下载youtube-dl的zip包。请参考这里的说明:https://github.com/rg3/youtube-dl。 - mchid
1@AjayKumarBasuthkar 为了在将来更新已下载或克隆的版本,只需运行youtube-dl -U 第二个选项 您可以通过运行以下命令使用pip安装youtube-dl:sudo apt-get install python-pip 然后运行:sudo pip install youtube-dl 此外,在将来,您只需运行以下命令即可更新pip版本:sudo pip install --upgrade youtube-dl - mchid
@AjayKumarBasuthkar 实际上,这里有一个第三个选择,请看下面的步骤。首先运行:sudo wget https://yt-dl.org/downloads/2016.01.23/youtube-dl -O /usr/local/bin/youtube-dl 然后运行:sudo chmod a+rx /usr/local/bin/youtube-dl 更多信息请参考这里:http://rg3.github.io/youtube-dl/download.html 要更新此版本,请再次运行以下命令:sudo youtube-dl -U - mchid
还有一个很好的方法,可以添加参数 --restrict-filenames 来确保下载一些包含特殊字符如“,”、“&”等的视频时能够成功下载。 - Aleksey Kontsevich
@mchid如果名称已经包含双引号,双引号将无法正常工作-YouTube上有许多视频存在这样的问题。我检查了一下,只有--restrict-filenames可以帮助下载这些视频而不会出现问题。 - Aleksey Kontsevich
这个答案应该是正确的,但是……它并不是。bestvideo+bestaudio似乎只选择了那些仅有视频仅有音频选项中最好的视频和音频,然后将它们合并在一起。然而,在我观看的视频中,最高质量是一个单独的合并文件。bestvideo+bestaudio选项没有选择这个最佳质量的720p文件,因为它只寻找分开的视频和音频文件。解决方案呢?让它获取包含视频和音频的最佳单个文件,使用这个命令:youtube-dl -f best https://youtu.be/FWGC9SqA3J0 - Gabriel Staples
我决定将这个作为答案:https://askubuntu.com/a/1097056/327339。 - Gabriel Staples
@AlekseyKontsevich 我错了。双引号会在特殊字符(例如问号)上出现问题。为了避免这个问题,在终端中,你可以使用单引号**'像这样'**。这不仅是youtube-dl的问题,而是bash的问题,所以通常最好使用单引号而不是双引号。然而,如果问题是文件名而不是URL,那么是的,你可能需要使用--restrict-filenames,或者在终端中调用下载的文件名时使用单引号。 - mchid
@mchid,不,-f bestvideo+bestaudio似乎是默认设置,因为youtube-dl https://youtu.be/FWGC9SqA3J0youtube-dl -f bestvideo+bestaudio https://youtu.be/FWGC9SqA3J0给出了相同的结果,并且文档(youtube-dl -h)确实指定了--audio-format best作为默认音频格式,所以可以推断它默认也会获取最佳的无音频视频流,这样会产生比使用youtube-dl -f best https://youtu.be/FWGC9SqA3J0更低质量的结果。请注意我的版本(youtube-dl --version)是"2018.11.23"。 - Gabriel Staples
@GabrielStaples 你是正确的,默认设置是bestvideo+bestaudio。我认为视频质量的问题是因为视频格式被认为是"最佳",基于比特率而不是高度。其他人已经提出了关于这个问题的错误报告,我认为这些错误报告已经关闭了。我猜"最佳"是主观的。然而,我确实认为很多人会同意你的说法,并且认为1080p更好。 - mchid
如何下载最佳质量但不超过1280x720? - mrgloom
@mrgloom 请参考以下答案:https://askubuntu.com/a/866432/167115 答案中提供了 -f 选项,而不是整个命令,因此对于这个特定的示例来说,完整的命令应为:youtube-dl -f 'bestvideo[height<=720]+bestaudio/best[height<=720]' 'http://www.youtube.com/watch?v=P9pzm5b6FFY' - mchid
@mrgloom 另外,你可以使用以下命令:youtube-dl -f 'best[height<=720]' 'http://www.youtube.com/watch?v=P9pzm5b6FFY' - mchid
1默认情况下,如果已安装ffmpeg,youtube-dl将选择最佳的视频和音频流,并将它们混合在一起。 - qwr
@qwr 是的,我相信默认行为已经改变了几次。无论如何,需要注意的是,由于某种原因,实际上最好的格式并不总是被下载或标记为“最佳”。此外,有时候最佳格式是一个单独的文件,而不是两个文件的混合。使用上述各种方法之一应该能确保在默认方式无法提供时下载到最佳格式。 - mchid

你可以使用youtube-dl下载1080p的视频,但是需要做一些额外的工作。通常情况下,即使你在youtube.com上能看到1080p的选项,它只会下载720p的视频。
运行命令-F可以查看可用的格式:
youtube-dl -F https://www.youtube.com/watch\?v\=-pxRXP3w-sQ

171         webm      audio only  DASH audio  115k , audio@128k (44100Hz), 2.59MiB (worst)
140         m4a       audio only  DASH audio  129k , audio@128k (44100Hz), 3.02MiB
141         m4a       audio only  DASH audio  255k , audio@256k (44100Hz), 5.99MiB
160         mp4       256x144     DASH video  111k , 12fps, video only, 2.56MiB
247         webm      1280x720    DASH video 1807k , 1fps, video only, 23.48MiB
136         mp4       1280x720    DASH video 2236k , 24fps, video only, 27.73MiB
248         webm      1920x1080   DASH video 3993k , 1fps, video only, 42.04MiB
137         mp4       1920x1080   DASH video 4141k , 24fps, video only, 60.28MiB
43          webm      640x360
18          mp4       640x360
22          mp4       1280x720    (best)

请注意,youtube-dl将最后一个选项1280x720标记为“最佳”质量,并且默认情况下将下载该选项,但以137开头的行实际上是更高质量的1920x1080。YouTube已将标有DASH的行分离为视频和音频流,因此我们还需要选择最高质量的音频,本例中以141开头的行为最佳选择。然后我们再次运行youtube-dl,这次指定音频和视频。
youtube-dl -f 137+141 https://www.youtube.com/watch\?v\=-pxRXP3w-sQ

它将下载1080p视频并自动与最高质量的音频合并。它还应该自动删除单独下载的部分。这种方法需要一些额外的工作,但可以获得最佳结果。

32非常感谢,我不知道137+141。 - whitesiroi
3你的例子和其他人提供了音频的简单选择 - 也就是说,要选择高质量的音频,选择比特率值最高的那个。然而,最近我发现自己面临着一个选择,要在DASH音频,opus @160k或者DASH音频126k,audio@128k(44100Hz),1.79MiB或者DASH音频127k,m4a_dash容器,aac @128k(44100Hz),1.94MiB之间做出选择。我必须做出选择,但对于质量或兼容性感到不确定。 - user643722
2youtube-dl最好的地方就是它是跨平台的。这个解决方案不仅适用于Linux,还适用于Mac和Windows。谢谢! - Antony
9现在这是默认设置,但前提是你已经安装了avconv(libav)或ffmpeg来进行文件转换。对于Windows系统,你需要在%APPDATA%\youtube-dl\config.txt中设置--ffmpeg-location为avconv/ffmpeg所安装的目录。如果你使用的是低端系统,你可能还想在那里加上-f bestvideo[fps<=30]+bestaudio,以避免60fps的视频。 - GreenReaper
警告:您已请求多个格式但未安装ffmpeg或avconv。这些格式将无法合并。 - ACV
@ACV 需要ffmpeg或avconv来进行youtube-dl的后处理。我建议使用ffmpeg。 - applemonkey496

要选择特定的分辨率,您可以指定大小和音频质量,以便它们自动选择 - 所以对于480p:
-f 'bestvideo[height<=480]+bestaudio/best[height<=480]'

使用bestvideo[height<=720]+bestaudio/best[height<=720]来获取720p等最佳视频和音频。这可以添加到配置文件中的~/.config/youtube-dl/config(甚至是/etc/youtube-dl.conf),以避免下载过大的文件。
mkdir ~/.config/youtube-dl
echo "-f 'bestvideo[height<=720]+bestaudio/best[height<=720]'" >> ~/.config/youtube-dl/config

如果你想在特定的youtube-dl运行中禁用配置文件,可以使用--ignore-config

请注意,很多时候它需要下载单独的视频和音频流并将它们合并。

更多示例请参见youtube-dl的文档


2我遇到了一个问题,同一视频的不同片段在相同分辨率下有不同的格式代码(例如,第1个视频使用hls-1476,第2个视频使用hls-1665,两者都是540p),所以我不能只使用“-f hls-1476”或“-f hls-1665”,否则会出现“ERROR: requested format not available”的错误。您提供的命令示例帮助我成功获取了想要的结果。 - ThatOneDude
3+1 对于 ~/.config/youtube-dl/config - Marinos An

除了在此提到的选项之外,根据您的方便性,以下是一些下载最佳质量视频的其他选择:

下载可用的最佳mp4格式或如果没有mp4格式,则下载其他最佳格式

$ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'

下载最佳可用格式,但不要超过480p的质量。
$ youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]'

下载最佳视频格式,但不超过50 MB

$ youtube-dl -f 'best[filesize<50M]'

通过HTTP/HTTPS协议直接链接下载最佳格式的文件。
$ youtube-dl -f '(bestvideo+bestaudio/best)[protocol^=http]'

参考资料:
直接来自youtube-dl的github页面。

1如何组合 ext=mp4 && height<=480 && filesize<50M - mrgloom
我使用这个youtube-dl命令:-f 'best[ext=mp4]+best[height<=480]+best[filesize<100M]' https://www.youtube.com/watch?v=oInZYvMAjyw - ejabu
看起来 youtube-dl -f 'bestvideo[height<=1080]+bestaudio[ext=m4a]' 就足够获取YouTube上限制在1080p的最佳mp4文件了。一开始不需要 bestvideo[ext=mp4],结束时也不需要 /best[ext=mp4]/best - baptx

更新:使用{{link1:yt-dlp}}代替{{link2:youtube-dl}}!它是youtube-dl的一个分支,维护得更好,功能也更强大!在这里可以了解更多关于yt-dlp的信息
首先,确保您已安装了最新版本的youtube-dl。
如何安装最新版本的youtube-dl
请参阅:
  1. https://github.com/ytdl-org/youtube-dl/#installation
  2. https://github.com/ytdl-org/youtube-dl/#how-do-i-update-youtube-dl

运行以下命令:

# On Linux Ubuntu:

# 1. Check your current version
youtube-dl --version

# 2.Uninstall your current version, if necessary
sudo apt remove -y youtube-dl

# 3. Now, install the latest version
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

# 4. Check your current version to ensure it updated
youtube-dl --version

如何获得最佳视频质量。

这个回答,拥有最多的投票数,应该能够提供最佳视频质量,但是......并不总是这样。 bestvideo+bestaudio 似乎只选择那些仅为视频音频的选项中的最佳视频和最佳音频,然后将它们合并在一起。请注意,这似乎也与 youtube-dl 的默认行为相同。然而,在我观看的视频中,最佳质量是一个已经以合并的形式存在的单个文件,其中包含了视频和音频。 bestvideo+bestaudio 选项没有选择这个最佳的 720p 文件,因为它只寻找分离的视频和音频文件。详见下文。

解决方案?使用以下命令获取包含视频和音频的最佳单个文件

youtube-dl -f best 'https://youtu.be/FWGC9SqA3J0'

简而言之:为了获得最佳质量,您可能需要使用“-f best”选项,而不是“-f bestvideo+bestaudio”选项!请尝试两种方式以查看结果。这可能因视频而异。
总体上,“youtube-dl”的各种示例的快速参考
我需要一个快速查找常用命令的地方。以下是一些示例:
# View the help menu (then press `/` to do a regular expression search`)
youtube-dl --help | less

# List all available format you can download for this video with 
# `-F` or `--list-formats`
youtube-dl -F 'https://www.youtube.com/watch?v=-FzqOdRpCGw'
youtube-dl --list-formats 'https://www.youtube.com/watch?v=-FzqOdRpCGw'

# Download the best **single file** containing both audio and video already 
# merged into one file
youtube-dl -f best \
    'https://www.youtube.com/watch?v=-FzqOdRpCGw'

# Download the best **stand-alone video file** and the best **stand-alone audio
# file** and then **combine** them into one file
youtube-dl -f 'bestvideo+bestaudio' \
    'https://www.youtube.com/watch?v=-FzqOdRpCGw'

# Use `-o` or `--output` to specify the name of the output file. 
# - See the "OUTPUT TEMPLATE" section here for all of the metadata tags you can 
#   use to auto-generate parts of the filename: 
#   https://github.com/ytdl-org/youtube-dl/#output-template
youtube-dl -f 'bestvideo+bestaudio' \
    'https://www.youtube.com/watch?v=-FzqOdRpCGw' --merge-output-format mkv \
    -o 'best_merged.mkv'

# [includes auto-generated subtitles]
# `time` the whole download, saving **YouTube's autogenerated subtitles** into
# the video too, AND choosing a custom name for the output file, with the
# extension specified using the meta-data template format `$(ext)s`. See link
# below for more metadata format examples.
time youtube-dl -f best --write-auto-sub \
    'https://www.youtube.com/watch?v=2WoDQBhJCVQ' -o 'greatest_shot.%(ext)s'

参见:
  1. https://github.com/ytdl-org/youtube-dl/#output-template
  2. 有关文件名的更多元数据格式示例:https://github.com/ytdl-org/youtube-dl/#output-template-examples
  3. Super User: 如何使用youtube-dl仅下载视频字幕

证明在某些情况下,-f best-f bestvideo+bestaudio更好:

(注意:下面所有电路原理图图像实际上是来自这个与电气工程相关的视频教程的截图Video One- Getting started with LTspice)。

enter image description here

更具体地说,请参见下面运行结果。
youtube-dl -F 'https://youtu.be/FWGC9SqA3J0'

为了查看可供下载的视频格式,请执行以下操作:

gabriel ~ $ youtube-dl -F https://youtu.be/FWGC9SqA3J0
[youtube] FWGC9SqA3J0: Downloading webpage
[youtube] FWGC9SqA3J0: Downloading video info webpage
[youtube] FWGC9SqA3J0: Downloading MPD manifest
[youtube] FWGC9SqA3J0: Downloading MPD manifest
[info] Available formats for FWGC9SqA3J0:
format code  extension  resolution note
139          m4a        audio only DASH audio   50k , m4a_dash container, mp4a.40.5@ 48k (22050Hz), 2.30MiB
249          webm       audio only DASH audio   51k , opus @ 50k, 2.34MiB
250          webm       audio only DASH audio   62k , opus @ 70k, 2.85MiB
171          webm       audio only DASH audio  103k , vorbis@128k, 4.68MiB
251          webm       audio only DASH audio  109k , opus @160k, 5.10MiB
140          m4a        audio only DASH audio  130k , m4a_dash container, mp4a.40.2@128k (44100Hz), 6.13MiB
160          mp4        256x138    DASH video  108k , mp4_dash container, avc1.4d400b, 24fps, video only
134          mp4        640x348    DASH video  142k , mp4_dash container, avc1.4d401e, 24fps, video only, 3.42MiB
133          mp4        426x232    DASH video  242k , mp4_dash container, avc1.4d400c, 24fps, video only
136          mp4        1280x694   DASH video  473k , mp4_dash container, avc1.4d401f, 24fps, video only, 8.01MiB
135          mp4        854x464    DASH video 1155k , mp4_dash container, avc1.4d4014, 24fps, video only
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k, 1.63MiB
36           3gp        320x174    small , mp4v.20.3, mp4a.40.2, 2.98MiB
43           webm       640x360    medium , vp8.0, vorbis@128k, 7.44MiB
18           mp4        640x348    medium , avc1.42001E, mp4a.40.2@ 96k, 8.54MiB
22           mp4        1280x694   hd720 , avc1.64001F, mp4a.40.2@192k (best) 

请注意,第22行的最右边写着“(最好)”。这是唯一一个提供高清720p质量的选项,也是我在YouTube网页浏览器上观看这个视频时能得到的最佳画质。它最清晰,定义最好。当我使用顶部答案推荐的任意一条命令时:
youtube-dl -f 'bestvideo+bestaudio' 'https://youtu.be/FWGC9SqA3J0'

或者:

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4 'https://youtu.be/FWGC9SqA3J0'

我最终得到的视频既质量较低/分辨率较低,而且文件大小更大。我不完全理解,但“-f best”选项确实是唯一能给我最佳分辨率的选项。
以下是我观看的教程视频中显示电路图的一些截图。请注意,后者的质量更高,更易读(点击每个图像并比较放大视图中的小字体):
1. 在这里接受使用“较低质量”的“-f bestvideo+bestaudio”选项作为正确答案(或者只使用默认选项:“youtube-dl 'https://youtu.be/FWGC9SqA3J0'”)。
  • 在这里输入图像描述
  • 注意顶部图标的模糊程度,以及打开窗口和其中微小文字的阅读困难!
  • 这比我直接在浏览器中观看YouTube时的质量要明显差
  • 出于某种原因,这个选项还占用更多内存:视频大小为18.0 MB,并且我的系统下载和重新组合(音频+视频)所花费的时间比下面的-f best选项长,后者只需进行一次下载且无需重新组合,因为它已经是一个文件。
  1. 使用我推荐的更高质量-f best选项:
  • 在这里输入图像描述
  • 注意顶部的小图标和窗口中的小字体更清晰了!
  • 这与我在YouTube浏览器中以最高分辨率观看时获得的分辨率完全相同。
  • 由于某种原因,此选项还占用更少的内存:视频大小为14.8 MB。

额外阅读:

  1. 有关详细信息,请参阅man youtube-dl
  2. 我的答案在这里:如何更新youtube-dl?。这也解决了以下问题:

    警告:无法下载视频信息网页:HTTP错误410:已消失


5奇怪的是,我看到有1920x1080的选项,但1280x720(hd720)的选项仍然显示为“最佳”。 - nmz787
2你的所有截图都显示了一些电子设备。 - localhost
@localhost,没错。它们都是我在帖子中的所有代码片段中所见到的视频URL:https://youtu.be/FWGC9SqA3J0 的截图。 - Gabriel Staples
@GabrielStaples 啊,是的,那很有道理。对不起,我搞错了。 - localhost
左边最大的数字与屏幕上可用格式的像素数量不对应,这难道不奇怪吗? - bomben
1对于大多数高清视频来说,最佳选择仍然是使用顶级答案,因为单独选择“最好”的话往往会倾向于格式代码22(即使有1080p+可用),或者决定将mp4视频(通常不是最高分辨率)与opus音频合并在一个mkv容器中,这样做可能会导致问题。 - Wlerin
是的,似乎没有一个完美的答案。我认为你必须尝试两个答案(主要的和我的),有时手动比较哪个更好。我并不完全理解它,只是知道在某些情况下,特别是在我提供的这个答案中,"-f best"选项明显比"-f bestvideo+bestaudio"选项更好,并且差异很大:第一个选项有清晰可读的文字,让我能够跟随视频教程,而第二个选项则没有:它太模糊了。 - Gabriel Staples
@Wlerin 至少音频部分是因为opus是YouTube提供的最高质量音频。 - localhost

一个bash包装脚本,提示用户选择格式,其中包括所有可用的版本,包括仅音频和仅视频。
接受绝对的YouTube链接和视频ID。
#!/ usr/bin/env bash
# Download youtube video with desired quality

# youtube-dl accepts both fully qualified URLs and video id's such as AQcQgfvfF1M

url="$*"

echo "Fetching available formats for $url..."
youtube-dl -F "$url"
read -p "Please enter the desired format id: " FORMAT

## download the video
youtube-dl -f $FORMAT -g "$url"

## stream the video with mpv (no local file created)
# mpv --cache=1024 $(youtube-dl -f $FORMAT -g "$url")

示例输出

    yt.sh https://m.youtube.com/watch?v=Dax_tnZRExc
    [youtube] Dax_tnZRExc: Downloading webpage
    [youtube] Dax_tnZRExc: Downloading video info webpage
    [youtube] Dax_tnZRExc: Extracting video information
    [youtube] Dax_tnZRExc: Downloading MPD manifest
    [info] Available formats for Dax_tnZRExc:
    format code  extension  resolution note
    139          m4a        audio only DASH audio   49k , m4a_dash container, mp4a.40.5@ 48k (22050Hz), 308.75KiB
    249          webm       audio only DASH audio   50k , opus @ 50k, 271.91KiB
    250          webm       audio only DASH audio   70k , opus @ 70k, 366.63KiB
    171          webm       audio only DASH audio  118k , vorbis@128k, 652.50KiB
    140          m4a        audio only DASH audio  127k , m4a_dash container, mp4a.40.2@128k (44100Hz), 820.00KiB
    251          webm       audio only DASH audio  130k , opus @160k, 705.84KiB
    160          mp4        256x144    DASH video  109k , avc1.4d400c, 13fps, video only, 703.64KiB
    278          webm       256x144    144p  111k , webm container, vp9, 25fps, video only, 439.72KiB
    242          webm       426x240    240p  243k , vp9, 25fps, video only, 623.95KiB
    133          mp4        426x240    DASH video  252k , avc1.4d4015, 25fps, video only, 1.54MiB
    134          mp4        640x360    DASH video  388k , avc1.4d401e, 25fps, video only, 1.24MiB
    243          webm       640x360    360p  458k , vp9, 25fps, video only, 1.19MiB
    135          mp4        854x480    DASH video  761k , avc1.4d401e, 25fps, video only, 2.40MiB
    244          webm       854x480    480p  893k , vp9, 25fps, video only, 2.00MiB
    136          mp4        1280x720   DASH video 1382k , avc1.4d401f, 25fps, video only, 4.56MiB
    247          webm       1280x720   720p 1754k , vp9, 25fps, video only, 3.94MiB
    137          mp4        1920x1080  DASH video 2350k , avc1.640028, 25fps, video only, 8.48MiB
    248          webm       1920x1080  1080p 2792k , vp9, 25fps, video only, 8.09MiB
    17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k
    36           3gp        320x180    small , mp4v.20.3, mp4a.40.2
    43           webm       640x360    medium , vp8.0, vorbis@128k
    18           mp4        640x360    medium , avc1.42001E, mp4a.40.2@ 96k
    22           mp4        1280x720   hd720 , avc1.64001F, mp4a.40.2@192k (best)
    Please enter the desired format #

这是一个非常好的脚本,它可以与Twitch一起使用! - Ivan

这里是对于那些对youtube-dl不熟悉的人的流/格式解释。
一些视频网站,比如YouTube,不仅提供不同分辨率的视频下载,还有在youtube-dl中称为格式的选项,可以分别下载视频和音频。以YouTube为例,它只会分别提供最高质量的视频和音频。下面是使用-F标志显示所有可用格式的示例输出:
$ youtube-dl -F https://youtube.com/watch?v=iYWzMvlj2RQ
[youtube] iYWzMvlj2RQ: Downloading webpage
[youtube] iYWzMvlj2RQ: Downloading embed webpage
[youtube] iYWzMvlj2RQ: Refetching age-gated info webpage
[info] Available formats for iYWzMvlj2RQ:
format code  extension  resolution note
249          webm       audio only tiny   50k , opus @ 50k (48000Hz), 238.14KiB
250          webm       audio only tiny   59k , opus @ 70k (48000Hz), 284.22KiB
251          webm       audio only tiny  118k , opus @160k (48000Hz), 553.74KiB
140          m4a        audio only tiny  157k , m4a_dash container, mp4a.40.2@128k (44100Hz), 628.52KiB
394          mp4        192x144    144p   51k , av01.0.00M.08, 30fps, video only, 241.57KiB
278          webm       192x144    144p   72k , webm container, vp9, 30fps, video only, 309.32KiB
395          mp4        320x240    240p   97k , av01.0.00M.08, 30fps, video only, 283.55KiB
160          mp4        192x144    144p  111k , avc1.4d400c, 15fps, video only, 524.55KiB
242          webm       320x240    240p  135k , vp9, 30fps, video only, 328.15KiB
396          mp4        480x360    360p  184k , av01.0.01M.08, 30fps, video only, 472.21KiB
243          webm       480x360    360p  221k , vp9, 30fps, video only, 560.40KiB
134          mp4        480x360    360p  240k , avc1.4d401e, 30fps, video only, 826.64KiB
133          mp4        320x240    240p  247k , avc1.4d400d, 30fps, video only, 1.16MiB
397          mp4        640x480    480p  302k , av01.0.04M.08, 30fps, video only, 801.75KiB
244          webm       640x480    480p  338k , vp9, 30fps, video only, 912.64KiB
135          mp4        640x480    480p  517k , avc1.4d401e, 30fps, video only, 1.71MiB
398          mp4        960x720    720p  541k , av01.0.05M.08, 30fps, video only, 1.48MiB
247          webm       960x720    720p  604k , vp9, 30fps, video only, 1.72MiB
399          mp4        1440x1080  1080p  893k , av01.0.08M.08, 30fps, video only, 2.55MiB
248          webm       1440x1080  1080p  981k , vp9, 30fps, video only, 2.99MiB
136          mp4        960x720    720p 1046k , avc1.4d401f, 30fps, video only, 3.47MiB
137          mp4        1440x1080  1080p 1923k , avc1.640028, 30fps, video only, 7.30MiB
18           mp4        480x360    360p  316k , avc1.42001E, 30fps, mp4a.40.2@ 96k (44100Hz), 1.50MiB
22           mp4        960x720    720p  858k , avc1.64001F, 30fps, mp4a.40.2@192k (44100Hz) (best)

所以有很多不同的格式,但有些被标记为“仅音频”或“仅视频”。如果我选择下载其中一种格式,使用指定的格式代码,比如-f 137,我将得到一个只有音频或者没有音频的视频文件,这通常不是你想要的。如果我安装了ffmpeg,并且使用-f 137+140同时指定了视频和音频格式,那么youtube-dl将会下载视频和音频,并将它们合并成一个视频文件。 如果你没有安装ffmpeg,youtube-dl默认会选择具有音频和视频的最高质量格式。最高质量通常为720p(使用格式代码22进行下载,例如-f 22)。如果你安装了ffmpeg,youtube-dl将能够下载真正的最佳质量视频(1080p或更高)和最佳质量音频,并在下载后将它们混合(合并)成一个视频文件,所以这是我推荐的方法。 总结:安装ffmpeg,然后你就可以简单地使用youtube-dl [YouTube链接]而无需任何标志来自动获取最佳质量的视频和音频,并输出到一个视频文件中。

默认情况下,youtube-dl会选择最佳的画质。

2是的,根据自述文件,您还可以选择所需的格式,详见此处:https://github.com/rg3/youtube-dl/blob/master/README.md#format-selection - AjayKumarBasuthkar

我是一个节省硬盘空间的人,所以我下载格式为1280 x 720的视频,因为4k视频会占用更多硬盘空间。
所以我在~/.bashrc文件中添加了youtube-dl,如下所示:
设置工作 -

打开终端并输入
  • nano ~/.bashrc
    现在转到文件的底部,并添加以下命令
  • alias yt='youtube-dl -if best'
  • 按下Ctrl o保存文件,然后按下Enter
  • 按下Ctrl x退出文件
  • 最后在终端中运行命令source ~/.bashrc
实验 -
打开终端并输入以下命令: yt https://www.youtube.com/watch?v=puPUJlV1-W4
它将以最佳质量开始下载视频。
解释 -
Bash允许我们定义别名,就像是对bash命令的快捷方式。 在我们的例子中,我们将别名定义为: alias yt='youtube-dl -if best' 其中yt是'youtube-dl'的快捷命令,这样我们就不用输入长命令了。 你可以在yt的位置写任何东西。 我在youtube-dl -if best命令中设置了一个-i标志,意思是:
它将继续下载错误,例如跳过不可用的播放列表中的视频。

youtube-dl的最佳选择并不完美。以这个例子为例:

pi@rpi-lounge:~ $ youtube-dl -F https://youtu.be/Xj3gU3jACe8
[youtube] Xj3gU3jACe8: Downloading webpage
[info] Available formats for Xj3gU3jACe8:
format code  extension  resolution note
249          webm       audio only tiny   55k , opus @ 50k (48000Hz), 1.11MiB
250          webm       audio only tiny   74k , opus @ 70k (48000Hz), 1.47MiB
140          m4a        audio only tiny  130k , m4a_dash container, mp4a.40.2@128k (44100Hz), 2.92MiB
251          webm       audio only tiny  143k , opus @160k (48000Hz), 2.89MiB
394          mp4        256x144    144p   81k , av01.0.00M.08, 25fps, video only, 1.54MiB
278          webm       256x144    144p   99k , webm container, vp9, 25fps, video only, 2.14MiB
160          mp4        256x144    144p  110k , avc1.4d400c, 25fps, video only, 2.38MiB
395          mp4        426x240    240p  184k , av01.0.00M.08, 25fps, video only, 3.39MiB
242          webm       426x240    240p  230k , vp9, 25fps, video only, 4.90MiB
133          mp4        426x240    240p  245k , avc1.4d4015, 25fps, video only, 5.19MiB
396          mp4        640x360    360p  395k , av01.0.01M.08, 25fps, video only, 7.20MiB
243          webm       640x360    360p  418k , vp9, 25fps, video only, 9.03MiB
134          mp4        640x360    360p  633k , avc1.4d401e, 25fps, video only, 13.61MiB
397          mp4        854x480    480p  712k , av01.0.04M.08, 25fps, video only, 13.13MiB
244          webm       854x480    480p  774k , vp9, 25fps, video only, 16.75MiB
135          mp4        854x480    480p 1160k , avc1.4d401e, 25fps, video only, 25.45MiB
398          mp4        1280x720   720p 1456k , av01.0.05M.08, 25fps, video only, 26.20MiB
247          webm       1280x720   720p 1539k , vp9, 25fps, video only, 33.49MiB
136          mp4        1280x720   720p 2316k , avc1.4d401f, 25fps, video only, 50.46MiB
399          mp4        1920x1080  1080p 2492k , av01.0.08M.08, 25fps, video only, 45.96MiB
248          webm       1920x1080  1080p 2700k , vp9, 25fps, video only, 58.80MiB
137          mp4        1920x1080  1080p 4337k , avc1.640028, 25fps, video only, 91.16MiB
400          mp4        2560x1440  1440p 7468k , av01.0.12M.08, 25fps, video only, 143.60MiB
271          webm       2560x1440  1440p 8993k , vp9, 25fps, video only, 189.90MiB
401          mp4        3840x2160  2160p 14110k , av01.0.12M.08, 25fps, video only, 278.39MiB
313          webm       3840x2160  2160p 18006k , vp9, 25fps, video only, 387.17MiB
18           mp4        640x360    360p  734k , avc1.42001E, 25fps, mp4a.40.2@ 96k (44100Hz), 16.55MiB (best)

以下命令:
youtube-dl -f 137+251  https://youtu.be/Xj3gU3jACe8

产生的结果比这种用法要好得多。
youtube-dl -f 18  https://youtu.be/Xj3gU3jACe8 (marked as best)

似乎还有一些问题,尝试指定高度过滤器限制为1080p并不起作用。它仍然下载4k的版本(值得注意的是,并没有标记为最佳)。
youtube-dl -f "bestvideo[height<=1080,ext=mp4]+bestaudio[ext=m4a]" https://youtu.be/Xj3gU3jACe8

pi@rpi-lounge:~ $ youtube-dl --version
2020.06.16.1

1实际上,高度过滤器运行正常,你只是语法写错了。不是[height<=1080,ext=mp4],而是[height<=1080][ext=mp4]。在这里完美地工作。 - iGadget
这不是youtube-dl的错误,而是它在没有安装ffmpeg的情况下提供的最佳解决方案。请参见我的回答。 - qwr