使用 Python 将 YouTube 视频下载到某个目录
Posted
技术标签:
【中文标题】使用 Python 将 YouTube 视频下载到某个目录【英文标题】:Download YouTube video using Python to a certain directory 【发布时间】:2017-04-04 10:34:35 【问题描述】:我已尝试使用以下代码在 YouTube 中下载视频并且它可以正常工作,但我想将视频保存在特定位置。现在它将视频保存在C:/Users/Download
。如果我想将视频保存在桌面,我需要在代码中进行哪些更改?
from __future__ import unicode_literals
import youtube_dl
import urllib
import shutil
ydl_opts =
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['https://www.youtube.com/watch?v=n06H7OcPd-g'])
【问题讨论】:
其实这个问题的答案是在命令行中添加-o
选项来设置你的输出文件,参考GitHub example。
只需在ydl_opts
中设置'outtmpl':***.com/questions/35643757/…
【参考方案1】:
自从最初发布该问题的最佳答案以来,pytube 似乎发生了一些变化。以下是使用 PyTube v11.0.2(2022 年 1 月 9 日)的更新示例:
'''
HOW TO: Download YouTube Videos Programmatically with Python & pytube
$ pip install pytube
$ python3 download.py
'''
from pytube import YouTube
def on_progress(stream, chunk, bytes_remaining):
print("Downloading...")
def on_complete(stream, file_path):
print("Download Complete")
yt = YouTube(
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
on_progress_callback=on_progress,
on_complete_callback=on_complete,
use_oauth=False,
allow_oauth_cache=True
)
yt.streams.filter(file_extension='mp4', res="720p").first().download()
【讨论】:
【参考方案2】:我发现了一个非常酷的 python 模块,它可以让你轻松地从 youtube 下载视频。安装它:
pip install pytube
现在,你可以像这样下载你的视频了 -
from pytube import YouTube
yt = YouTube("https://www.youtube.com/watch?v=n06H7OcPd-g")
yt = yt.get('mp4', '720p')
yt.download('/path/to/download/directory')
Boom,现在您可以轻松地使用 Python 轻松抓取此类视频;现在,我们喝酒!
更新 1:
感谢@Chiramisu 的评论,您可以使用以下单线下载最高质量的视频:
YouTube('video_url').streams.first().download('save_path')
对于 Windows,请使用双反斜杠指定路径,例如:
YouTube('video_url').streams.first().download('C:\\Users\\username\\save_path')
更新 2:
如果 pytube 似乎不适合您,请尝试使用 youtube-dl:
pip install --upgrade youtube-dl
现在下载视频:
from __future__ import unicode_literals
import youtube_dl
ydl_opts =
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])
更多关于 ytdl 的信息在 python here.
【讨论】:
我不明白视频变量/对象来自哪里?AttributeError: 'YouTube' object has no attribute 'get'
单线 updated logic: YouTube('video_url').streams.first().download('save_path')
。这将下载最高质量的视频,但 1080p 或更高版本将是视频和音频的单独文件,需要与 FFmpeg 或一些此类实用程序结合。
@mLstudent33 检查我的回答中的 udpate 2
YouTube('video_url').streams.first()
没有给我最高分辨率。我用yt.streams.filter(res="1080p").first().download()
解决了它【参考方案3】:
我创建了一个使其更简单的库。
安装:
$ pip install mhyt
# or
$ sudo pip install mhyt
并像这样使用它:
from mhyt import yt_download
yt_download("url","file.format","format"ismucic=True)
【讨论】:
【参考方案4】:from __future__ import unicode_literals
import youtube_dl
ydl_opts =
'outtmpl': 'yourPathToDirectory/%(title)s.%(ext)s',
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['https://www.youtube.com/watch?v=XpYGgtrMTYs'])
ydl_opts
是我们需要玩的。我们可以在其中声明多个属性/参数以进行自定义。对于此示例,我添加了一个属性 outtmpl
,用于定义自定义目录。我们可以进一步自定义这个来声明文件名等
【讨论】:
【参考方案5】:-> 卸载 pytube(如果存在)
pip uninstall pytube
-> 安装:
pip install pytube3
-> 修改环境中的 extract.py:
lib/pytube/extract.py
-> 查找和编辑行:
parse_qs(formats[i]["cipher"]) for i, data in enumerate(formats)
-> 改为:
parse_qs(formats[i]["signatureCipher"]) for i, data in enumerate(formats)
-> 使用 pytube:
from pytube import YouTube
import os
def downloadYoutube(vid_url, path):
yt = YouTube(vid_url)
yt = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()
if not os.path.exists(path):
os.makedirs(path)
yt.download(path)
url = input('Input url:\n')
path = input('Path to store file:\n')
downloadYoutube(url, path)
【讨论】:
【参考方案6】:你应该把它放在ydl_opts
:
ydl_opts =
'outtmpl': os.path.join(download_path, '%(title)s-%(id)s.%(ext)s'),
在您的情况下,download_path
应该是 'C:/Users/Desktop'
。如果您喜欢不带视频 ID 的文件名,请使用 %(title)s.%(ext)s
而不是 %(title)s-%(id)s.%(ext)s
。
或者您也可以os.chdir(path)
在开始下载之前将目录更改为您希望下载的位置。
from __future__ import unicode_literals
import youtube_dl
import os
ydl_opts =
os.chdir('C:/Users/Desktop')
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['https://www.youtube.com/watch?v=n06H7OcPd-g'])
【讨论】:
如果我想将文件保存在谷歌云存储上,我仍然可以使用os.chdir定义路径,以便下载的视频可以保存在gcs中。 您可以在文件资源管理器/Finder 中访问 gcs 吗?如果是这样,可能是的。我可以将文件直接保存在我的谷歌驱动器中,该驱动器作为卷安装在我的 Mac 上。 正是我想要的。其余的答案过于关注其他软件包,而 OP 明确提到了 youtube-dl。【参考方案7】:Path = "The Path That You Want"
Location = '%s \%(extractor)s-%(id)s-%(title)s.%(ext)s'.replace("%s ", Path)
ytdl_format_options =
'outtmpl': Location
with youtube_dl.YoutubeDL(ytdl_format_options) as ydl:
ydl.download(['https://www.youtube.com/watch?v=n06H7OcPd-g'])
我个人不太了解该库,但据我所知,youtube_dl 有 ytdl_format_options 它为您提供了添加一些我不知道它叫什么的选项,但让我们说像上面 outtmp1 这样的参数给您选项指定位置、ID、标题或安静是否查看日志,还有更多。几乎所有你可以从这个 URL 获得它:https://github.com/ytdl-org/youtube-dl/blob/master/README.md#format-selection
【讨论】:
请说明您发布的代码。【参考方案8】:在 python 3.x 中从 youtube 下载视频 作为参考,您可以查看https://python-pytube.readthedocs.io/en/latest/user/quickstart.html#downloading-a-video
from pytube import YouTube
import os
def downloadYouTube(videourl, path):
yt = YouTube(videourl)
yt = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()
if not os.path.exists(path):
os.makedirs(path)
yt.download(path)
downloadYouTube('https://www.youtube.com/watch?v=zNyYDHCg06c', './videos/FindingNemo1')
【讨论】:
我认为您的代码可能没问题,但我收到了KeyError: s
,这似乎是 github 上的一个未解决问题。【参考方案9】:
它将保存文件您的 .py 应用程序所在的位置。例如,如果您的 .py 程序位于桌面文件夹中,并且您从桌面运行应用程序,则输出将保存在您的桌面上。您唯一需要做的就是将 .py 文件保存在 Desktop 中,然后在使用 python YOURAPP.py 运行 .py 文件后打开命令行并使用 cd 命令进入 Desktop 但是如果你想下载它然后将它保存在另一个地方,你需要像现在一样下载它(在你的临时位置),然后通过 python 中的文件库移动它。
【讨论】:
【参考方案10】:我猜你有点糊涂了,试试这段代码,端到端
from __future__ import unicode_literals
import youtube_dl
import urllib
import shutil
ydl_opts =
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['https://www.youtube.com/watch?v=n06H7OcPd-g'])
#Moving your source file to destination folder
source_file = 'C:\Users\Sharmili Nag\Aahatein - Agnee (splitsvilla 4 theme song) Best audio quality-n06H7OcPd-g.mp4'
destination_folder = 'C:\Users\Sharmili Nag\Desktop\Aahatein - Agnee (splitsvilla 4 theme song) Best audio quality-n06H7OcPd-g.mp4'
shutil.move(source_file, destination_folder)
如果此代码适合您,请将答案标记为正确。
【讨论】:
【参考方案11】:youtube_dl
有一个巨大的选项列表:https://github.com/rg3/youtube-dl/blob/master/youtube_dl/YoutubeDL.py#L128-L278
但是我没有看到任何控制输出目录的东西。因此,您可以在之后移动文件。为此,请参阅:How to move a file in Python。
【讨论】:
我试过下面的代码 source = 'C:\Users\Sharmili Nag\Aahatein - Aghee (splitsvilla 4 主题曲) Best audio quality-n06H7OcPd-g.mp4' destination = 'C:\ Users\Sharmili Nag\Desktop' import os os.rename(source,destination) 但我收到此错误 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape以上是关于使用 Python 将 YouTube 视频下载到某个目录的主要内容,如果未能解决你的问题,请参考以下文章
Python:使用谷歌提供的代码段将视频上传到 youtube 不起作用
Python:使用Google提供的代码段将视频上传到youtube不起作用
将 pi 的 opencv 视频传输到 ffmpeg 以进行 Youtube 流式传输
使用url从python流传输youtube音频而无需下载python