chasegiunta/youtube-downloader

PHP驱动的youtube-dl替代品

3.1 2023-01-13 23:13 UTC

This package is auto-updated.

Last update: 2024-09-04 04:31:10 UTC


README

youtube-downloader

该项目灵感来源于一个非常受欢迎的youtube-dl Python包
https://github.com/rg3/youtube-dl

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

纯PHP基础的youtube下载器,既工作良好,又能保持更新,这样的工具实际上并不存在。

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

这就是全部!

⚠️ 法律免责声明

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

演示应用

这可能在任何时候都不会工作,因为YouTube如果从这个服务器收到太多请求,会对服务器进行短暂的封禁。

在自己的App上

部署到Heroku

Deploy

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

安装

推荐通过Composer安装

composer require athlon1600/youtube-downloader "^3.0"

本地运行

php -S localhost:8000 -t vendor/athlon1600/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?...');
  • 传递您自己的cookies/user-agent

如果您尝试下载受年龄限制的视频,YouTube会要求您登录。要使此操作正常工作,您需要在您的Web浏览器中登录到YouTube账号,从浏览器导出这些新设置的cookies到文件中,然后将它们全部传递给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验证码的能力,并避免HTTP 429 Too Many Requests错误。
  • 增加分别下载视频和音频流,并使用ffmpeg合并这两个流的能力。就像youtube-dl那样!
  • 可选命令,用于查找所有视频格式。
  • 在不使用YouTube API的情况下获取关于视频的额外元数据。