使用youtube-dl自动下载最高质量的DASH视频和音频

42

使用youtube-dl,首先查看哪些视频质量可用,然后在第二步下载最高可能的质量(在此示例中-f 137+140)。Youtube-dl会自动合并音频和视频流(DASH格式)。

如何使用shell脚本自动化这个过程?对于每个URL,选择最高的音频和视频质量?

> youtube-dl -F 'https://www.youtube.com/watch?v=VAdRBLyjLRQ&feature=youtu.be&t=8m14s'                              
[youtube] Downloading login page                                                                                                      
[youtube] Logging in                                                                                                                  
[youtube] VAdRBLyjLRQ: Downloading webpage                                                                                            
[youtube] VAdRBLyjLRQ: Downloading video info webpage                                                                                 
[youtube] VAdRBLyjLRQ: Extracting video information                                                                                   
[youtube] VAdRBLyjLRQ: Downloading DASH manifest                                                                                      
[youtube] VAdRBLyjLRQ: Downloading DASH manifest                                                                                      
[info] Available formats for VAdRBLyjLRQ:                                                                                             
format code  extension  resolution note                                                                                               
249          webm       audio only DASH audio , opus @ 50k                                                                            
250          webm       audio only DASH audio , opus @ 70k                                                                            
251          webm       audio only DASH audio , opus @160k                                                                            
171          webm       audio only DASH audio  117k , vorbis@128k (44100Hz), 7.68MiB                                                  
140          m4a        audio only DASH audio  128k , m4a_dash container, aac  @128k (44100Hz), 11.58MiB                              
160          mp4        256x144    DASH video  112k , avc1.4d400c, 15fps, video only, 9.94MiB                                         
278          webm       256x144    DASH video  136k , webm container, VP9, 15fps, video only, 9.10MiB                                 
133          mp4        426x240    DASH video  248k , avc1.4d4015, 30fps, video only, 22.27MiB                                        
242          webm       426x240    DASH video  316k , vp9, 30fps, video only, 22.20MiB                                                
243          webm       640x360    DASH video  557k , vp9, 30fps, video only, 41.05MiB                                                
134          mp4        640x360    DASH video  609k , avc1.4d401e, 30fps, video only, 52.94MiB                                        
244          webm       854x480    DASH video 1021k , vp9, 30fps, video only, 74.05MiB                                                
135          mp4        854x480    DASH video 1115k , avc1.4d401f, 30fps, video only, 97.02MiB                                        
247          webm       1280x720   DASH video 2011k , vp9, 30fps, video only, 150.61MiB                                               
136          mp4        1280x720   DASH video 2282k , avc1.4d401f, 30fps, video only, 189.40MiB                                       
248          webm       1920x1080  DASH video 3838k , vp9, 30fps, video only, 286.61MiB                                               
137          mp4        1920x1080  DASH video 4209k , avc1.640028, 30fps, video only, 354.19MiB                                       
17           3gp        176x144                                                                                                       
36           3gp        320x240                                                                                                       
5            flv        400x240                                                                                                       
43           webm       640x360                                                                                                       
18           mp4        640x360                                                                                                       
22           mp4        1280x720   (best)                                                                                             
> youtube-dl -f 137+140 'https://www.youtube.com/watch?v=VAdRBLyjLRQ&feature=youtu.be&t=8m14s'                      
[youtube] Downloading login page                                                                                                      
[youtube] Logging in                                                                                                                  
[youtube] VAdRBLyjLRQ: Downloading webpage                                                                                            
[youtube] VAdRBLyjLRQ: Downloading video info webpage                                                                                 
[youtube] VAdRBLyjLRQ: Extracting video information                                                                                   
(...)

例如对于高分辨率的视频教程或音乐“视频”,有时将最佳和最差的选项组合起来是有意义的,如前者的 bestvideo+worstaudio 和后者的 worstvideo+bestaudio。仅为完整起见。 - TNT
5个回答

78

只需使用-f bestvideo+bestaudio/best,即可获得可用的最高质量。

如果您想要优先选择MP4格式容器而不是WebM,请使用:

-f bestvideo[ext!=webm]+bestaudio[ext!=webm]/best[ext!=webm]


1
如何仅获取MP4?不要WebM? - Sybil
2
-f bestvideo[ext!=webm]+bestaudio[ext!=webm]/best[ext!=webm]。 - dstftw
5
2015.04.26版本以来,这已经是默认设置(请参见此处),因此无需手动指定。 - Adrian Frühwirth
2
它不一定会下载最佳音频。自2015年以来,youtube-dl使用-f bestvideo+bestaudio/best作为默认格式。这意味着当可用时,它将尝试下载作为单个文件(DASH)提供的bestaudio流,但如果不存在,则会从中下载best音视频流并从中提取音频。问题在于,对于某些YT视频,最高质量的DASH音频流比在best音视频流中找到的音频具有更低的比特率。目前正在讨论是否应在https://github.com/rg3/youtube-dl/issues/9302解决此问题。 - Redoman

28

我发现了一些奇怪的情况,即使有1080p的视频可供下载,bestvideo + bestaudio / best 的默认设置(请参见#5447#5456)也会下载720p的视频。原因是720p的比特率略高,因此在youtube-dl看来质量更好。虽然其他精美的YouTube下载应用程序都能下载1080p,但我更喜欢更高分辨率。

因此,我建议使用以下设置:

-f ("bestvideo[width>=1920]"/bestvideo)+bestaudio/best

它将寻找最佳的、至少1920宽的视频。如果没有可用的,它将使用通常选择的内容。/best部分在默认配置中。

另外我建议在文件名中放置%(format_id)s,这样你就知道该文件使用了什么。如果以后想重新下载一堆视频而不使用archive,并使用--no-overwrites,更好/不同的质量将形成一个新的文件名(这样你就可以比较或其他操作)。


10

或者您可以直接使用:

youtube-dl https://www.youtube.com/watch?v=blabla

这将下载最高质量的视频和音频并自动合并它们。我记得在某个地方听说过,您需要安装ffmpeg才能获得此自动行为。但我敢打赌大多数系统已经安装了它。


如屏幕截图所示,“best”在这个样例中通常是1280x720。这就是你通过这种方式得到的结果。我不能负面评价这个答案,因为它不值得…… - TNT
1
@TNT 实际上不是这样的。括号中的“最佳”意味着最佳完整视频。但如果您没有提供质量,它实际上会分别下载最佳视频和最佳音频。然后将它们组合成最终输出,并在此之后删除原始视频和音频文件。这些步骤实际上显示在终端中。我已经亲身体验了输出结果。在这个例子中,OP将获得一个1080p的视频。 - Lilylakshi
@Lilytakshi 对不起,你是对的!幸运的是我没有给你的回答投反对票。我真丢脸!我现在已经点赞了。 - TNT
如建议所述,我需要安装 ffmpeg 以便将最佳文件分别抓取并合并它们。 - gerry3
4
自 2015 年以来,youtube-dl 的默认格式是 -f bestvideo+bestaudio/best。这意味着它会尝试下载可用的作为单个文件(DASH)提供的 bestaudio 流作为音频,但如果不存在该流,则会下载 best 音视频流并从中提取音频。问题在于,对于某些 YouTube 视频,(DASH)音频流的质量低于在 best 音视频流中找到的音频。关于是否应解决这个问题,正在进行讨论,可以在 https://github.com/rg3/youtube-dl/issues/9302 上查看。 - Redoman

8
youtube-dl -f best 'youtube_URL'
或者,
youtube-dl -f 'bestvideo+bestaudio/bestvideo+bestaudio' --merge-output-format mp4 'youtube_URL'
或者,
youtube-dl -f 'bestvideo[ext=webm]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4 'youtube_URL'
希望这有所帮助!

1
由于格式数量有限,我进行了以下操作:
youtube-dl -f 299+140 "http://www.youtube.com/watch?v=P9pzm5b6FFY"
youtube-dl -f 137+140 "http://www.youtube.com/watch?v=P9pzm5b6FFY"
youtube-dl -f best "http://www.youtube.com/watch?v=P9pzm5b6FFY"

如果已经下载了299+140,那么137+140就不会被下载;如果这两个都没有,那么最好从22开始下载。唯一的问题是你会得到webm格式的重复文件,但你可以使用ext!=webm来避免这种情况。
当然,你也可以从313+140或其他更高的格式开始下载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接