altin7m / youtube-downloader
PHP驱动的youtube-dl替代品
Requires
- php: ^7.4|^8.0
- ext-curl: *
- ext-json: *
- athlon1600/php-curl-file-downloader: ^1.0
Requires (Dev)
- phpunit/phpunit: ^8.0 || ^9.0 || ^10.0
This package is auto-updated.
Last update: 2024-09-13 14:52:41 UTC
README
该项目受非常流行的youtube-dl python包启发
https://github.com/ytdl-org/youtube-dl
是的,互联网上有多个基于PHP的youtube下载器,但其中大多数已经多年没有更新,或者它们依赖于youtube-dl本身。
纯粹的PHP下载器既能够工作,又能保持更新,这样的下载器并不存在。
这个脚本不使用任何JavaScript解释器,不调用shell... 只有纯PHP,没有任何重依赖。
这就是全部内容!
⚠️ 法律免责声明
本程序仅限个人使用。未经许可下载版权材料违反了 YouTube的服务条款。使用本程序,您对任何版权侵权行为负全责。我们不对试图以任何方式违反YouTube服务条款使用本程序的人负责。
安装
推荐通过 Composer 安装
composer require altin7m/youtube-downloader "^4.1"
示例用法
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');
- 更改YouTube客户端头部
您可以更改默认的YouTube请求客户端头部。
$youtube = new YouTubeDownloader(); $youtube->getYoutubeClientHeaders()->setClientName('ANDROID'); $youtube->getYoutubeClientHeaders()->setClientVersion('19.10.38');
另请参阅
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下载视频的更详细说明将很快编写。现在,这里有一些
其他链接
- https://gitlab.futo.org/videostreaming/plugins/youtube
- https://tyrrrz.me/blog/reverse-engineering-youtube-revisited
- https://github.com/TeamNewPipe/NewPipeExtractor/blob/d83787a5ca308c4ca4e86e63a8b63c5e7c4708d6/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java
- https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/youtube.py
- https://github.com/yt-dlp/yt-dlp
待办事项列表
- 允许下载私有视频。
- 找到一种绕过YouTube限制下载速度的系统的方法,现在大多数视频的下载速度限制在100 kb/s以下...
- 添加解决YouTube验证码和避免
HTTP 429 Too Many Requests
错误的能力。 - 添加分别下载视频和音频流,并使用ffmpeg将它们合并在一起的功能。就像
youtube-dl
一样! - 可选命令,用于查找所有视频格式。
在不使用YouTube API的情况下获取视频的额外元数据。