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’