proger89/youtube-downloader

基于 PHP 的 youtube-dl 替代方案

v3.1.0 2021-10-21 00:21 UTC

This package is auto-updated.

Last update: 2024-09-19 23:59:21 UTC


README

youtube-downloader

该项目受到非常流行的 python 包 youtube-dl 的启发
https://github.com/rg3/youtube-dl

是的,互联网上有很多其他基于 PHP 的 YouTube 下载器,但其中大多数已经多年未更新,或者它们依赖于 youtube-dl 本身。

能够工作并且保持更新的纯 PHP 基础 YouTube 下载器根本不存在。

此脚本不使用任何 JavaScript 解释器,不调用 shell... 只有纯 PHP,没有沉重的依赖。

就是这样!

⚠️ 法律免责声明

此程序仅限个人使用。未经许可下载版权材料违反了 YouTube 的服务条款。使用此程序,您将完全负责任何版权侵权行为。我们不负责试图以任何方式使用此程序违反 YouTube 服务条款的人。

演示应用

这可能在任何时候都不起作用,因为如果 YouTube 收到来自该服务器的过多请求,它将对服务器进行短暂封禁。

在 Heroku 上部署您自己的应用

on Heroku

Deploy

如果您还没有,请先创建一个免费账户
https://signup.heroku.com/

安装

推荐通过 Composer 安装

composer require proger89/youtube-downloader "dev-master"

本地运行

php -S localhost:8000 -t vendor/proger89/youtube-downloader/public

旧版本

安装和使用版本 2 的说明可以在此处找到
https://github.com/Athlon1600/youtube-downloader/tree/2.x

使用方法

use YouTube\YouTubeDownloader;
use YouTube\Exception\YouTubeException;

$youtube = new YouTubeDownloader();

try {
    $downloadOptions = $youtube->getDownloadLinks("https://www.youtube.com/watch?v=aqz-KE-bpKQ");

    if ($downloadOptions->getAllFormats()) {
        echo $downloadOptions->getFirstCombinedFormat()->url;
    } else {
        echo 'No links found';
    }

} catch (YouTubeException $e) {
    echo 'Something went wrong: ' . $e->getMessage();
}

getDownloadLinks 方法返回一个 DownloadOptions 类型对象,其中包含一个流链接数组 - 一些是仅音频的,一些是音频和视频组合成一个。

对于典型使用,您可能对处理组合流感兴趣,在这种情况下,有 getCombinedFormats 方法。

其他功能

  • 直接从您的服务器流式传输 YouTube 视频
$youtube = new \YouTube\YouTubeStreamer();
$youtube->stream('https://r4---sn-n4v7knll.googlevideo.com/videoplayback?...');
  • 传递您自己的 cookie/user-agent

如果您尝试下载受年龄限制的视频,YouTube 将要求您登录。要使其工作,您必须在您的网络浏览器中登录到您的 YouTube 账户,从您的浏览器中导出这些新设置的 cookie 到一个文件中,然后将所有这些传递给 youtube-downloader 以使用。

$youtube = new YouTubeDownloader();
$youtube->getBrowser()->setCookieFile('./your_cookies.txt');
$youtube->getBrowser()->setUserAgent('Opera 7.6');

另请参阅
https://github.com/ytdl-org/youtube-dl/blob/master/README.md#how-do-i-pass-cookies-to-youtube-dl

  • 在您继续访问 YouTube 之前...

根据您的地区,您可能被迫重定向到要求您同意 Google 的 cookie 政策的 页面。您可以通过您的浏览器实例的 consentCookies 方法程序性地同意这些条款,并永久绕过此警告。示例

$youtube = new YouTubeDownloader();
$youtube->getBrowser()->consentCookies();

它是如何工作的

关于如何从 YouTube 下载视频的更详细说明将很快撰写。目前,这里有这个

Athlon1600#25 (评论)

其他链接

待办事项列表

  • 允许下载私人视频。
  • 找到一种绕过YouTube限制下载速度的方法,目前大多数视频的下载速度限制在100 kb/s以下...
  • 添加了解决YouTube Captcha和避免HTTP 429 Too Many Requests错误的能力。
  • 添加了分别下载视频和音频流,并使用ffmpeg将两者合并的功能。就像youtube-dl一样!
  • 可选命令,用于查找所有视频格式。
  • 在不使用YouTube API的情况下获取视频的额外元数据。