YouTube-dl下载视频

Python程序中使用youtube-dl跟使用其它第三方模块没有什么不同,都是先安装再引入。用模块youtube-dl的类YoutubeDL生成下载对象:

ydl = youtube_dl.YoutubeDL(ydl_opts)

通过参数ydl_opts设置下载选项,下载选项很重要,决定着下载行为。youtube-dl的功能很强大,支持这些功能的参数众多,在程序中通过下载选项(这里是ydl_opts)来设置这些参数。下载选项ydl_opts是字典类型,下载参数是ydl_opts的健值。

            参数outtmpl设定下载视频文件名和存放位置,它是out template输出模版的简写:

     ydl_opts = {           

                'outtmpl': 路径字串+'%(title)s.%(ext)s',

                # 定义输出模版,指定输出的文件夹和保存的文件名。title:视频的标题,ext:文件扩展名。

                }

下载对象ydl生成完毕后,调用它的方法函数ydl.download([视频链接])可以下载视频,代码如下:

# 指定视频链接,用youtube-dl下载视频

import youtube_dl        # 引入第三方模块youtube-dl

 

destPath = '/Users/shiying/tmp/'

# 音频文件存放的目标字串

 

# 下载视频的链接

videoPage = 'https://www.bilibili.com/video/BV1vW411X7nj'

 

# ydl_opts很重要,是个字典,所有参数在这里设置

ydl_opts = {           

            'outtmpl': destPath+'%(title)s.%(ext)s',

            # 定义输出模版:指定输出的文件夹+保存的文件名。title:视频的标题,ext:扩展名。

            }

ydl = youtube_dl.YoutubeDL(ydl_opts)        # 生成下载对象

ydl.download([videoPage])

# 下载视频,参数是列表,列表的每个元素是视频的链接

 如果视频已经下载过了(下载文件目标文件夹里已经有下载文件了),则不会启动下载进程,并给出文件已经下载的提示。

如果视频网站(比如YouTube)还提供相应视频的音频文件,可以通过设置下载选项的format参数直接下载音频文件(下载文件的路径字串放在destPath):

ydl_opts = {

            'outtmpl': destPath+'%(title)s.%(ext)s',

            'format': 'bestaudio',     # 选择品质最好的音频下载

           }

参数format也可指定下载最好品质的视频:

            'format': 'bestvideo'

            或者:

            'format': 'best' 

参数format设为'best‘,系统会下载品质最好的视频,但不设置也会下载品质好的,只是输出小有差别。我感觉format设置成best的好处一个是输出简洁一些,再一个好像快一点。还可以做进一步筛选:

ydl_opts = {

            'outtmpl': destPath+'%(title)s.%(ext)s',

            'format': 'bestaudio[ext=m4a]',        

            # [ext=m4a]扩展名是m4a品质最好的的音频,如果没有会报错

            }

也可指定下载格式:

ydl_opts = {

            'outtmpl': destPath+'%(title)s.%(ext)s',

            'format': 'mp4,    

            # 指定下载mp4格式的视频,如果没有这种格式则报错

           }

或者:

ydl_opts = {

            'outtmpl': destPath+'%(title)s.%(ext)s',

            'format': 'mp4/webm',   

            # 有mp4下载mp4格式,没有mp4下载webm格式,两种格式都没有则报错

           }

可以通过参数listformats查看网站上这个视频有哪些格式可供选:

import youtube_dl


# 下载视频的链接

videoPage = 'https://www.bilibili.com/video/BV1vW411X7nj'

ydl_opts = {           

            'listformats': True,       

            # 列出网站提供了哪些视频格式

            }

ydl = youtube_dl.YoutubeDL(ydl_opts)       

ydl.download([videoPage])

输出片段:

设置参数listformats输出网站提供的各种格式和品质的视频

此时不下载,只列出视频网站提供的关于这个视频的各种格式和品质的可选项。如果要特别指定要下载某一个格式码+格式的视/音频,比如要下载格式码251格式为webm的视频文件,则

     ‘format’: ‘251/webm’