使用Python下载YouTube视频到某个目录

问题描述 投票:0回答:13

我已尝试使用以下代码在 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'])
python python-3.x python-2.7
13个回答
97
投票

我发现了一个非常酷的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'])

有关 python 中 ytdl 的更多信息这里


27
投票

在 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')

13
投票

你应该把它放在里面

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'])

4
投票
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


4
投票

-> 卸载 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)

2
投票

youtube_dl
有一个巨大的选项列表:https://github.com/rg3/youtube-dl/blob/master/youtube_dl/YoutubeDL.py#L128-L278

但我没有看到任何控制输出目录的东西。 这样您就可以稍后移动该文件。 为此,请参阅:如何在 Python 中移动文件


2
投票

它将保存文件您的 .py 应用程序所在的位置。例如,如果您的 .py 程序位于桌面文件夹中,并且您从桌面运行应用程序,则输出将保存在您的桌面上。您唯一需要的是将 .py 文件保存在桌面中,然后打开命令行并在使用 python YOURAPP.py 运行您的 .py 文件后使用 cd 命令进入桌面 但如果你想下载它然后将其保存在另一个地方,你需要像现在一样下载它(在你的临时位置),然后通过 python 中的文件库移动它。


2
投票
自从最初发布问题的最佳答案以来,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
投票
我对@orlov_dumitru 的答案做了一些更改,效果很好。

#!/usr/bin/env python import os import sys from pytube import YouTube 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) # video url url = sys.argv[1] # path to where you want to save the video path = sys.argv[2] downloadYoutube(url, path) exit()
    

1
投票
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
,用于定义自定义目录。我们可以进一步自定义它来声明
filename


0
投票
pip3 install pytube yt_url = "https://youtu.be/k8oMuLWiUzo" from pytube import YouTube yt = YouTube(yt_url) yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first().download()
    

0
投票

pip install youtube-dl

对我不起作用,

但这对我有用:

pip install git+https://github.com/ytdl-org/youtube-dl.git@master#egg=youtube_dl


    


-5
投票
我猜你有点困惑,尝试一下这段代码,端到端

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)

如果此代码适合您,请将答案标记为正确。

© www.soinside.com 2019 - 2024. All rights reserved.