Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/norkunas/youtube-dl-php

A PHP wrapper for youtube-dl or yt-dlp.
https://github.com/norkunas/youtube-dl-php

php youtube-dl yt-dlp

Last synced: 5 days ago
JSON representation

A PHP wrapper for youtube-dl or yt-dlp.

Awesome Lists containing this project

README

        

# Youtube-dl PHP
A PHP wrapper for [youtube-dl](https://github.com/ytdl-org/youtube-dl) or [yt-dlp](https://github.com/yt-dlp/yt-dlp).

[![Latest Stable Version](https://poser.pugx.org/norkunas/youtube-dl-php/v/stable.svg)](https://packagist.org/packages/norkunas/youtube-dl-php)
[![Latest Unstable Version](https://poser.pugx.org/norkunas/youtube-dl-php/v/unstable.svg)](https://packagist.org/packages/norkunas/youtube-dl-php)
[![Total Downloads](https://poser.pugx.org/norkunas/youtube-dl-php/downloads)](https://packagist.org/packages/norkunas/youtube-dl-php)
![CI Status](https://github.com/norkunas/youtube-dl-php/workflows/CI/badge.svg?branch=master)
[![License](https://poser.pugx.org/norkunas/youtube-dl-php/license.svg)](https://packagist.org/packages/norkunas/youtube-dl-php)

## Install
First step is to download the [youtube-dl](https://ytdl-org.github.io/youtube-dl/download.html) or [yt-dlp](https://github.com/yt-dlp/yt-dlp#installation).

Second step is to install the wrapper using [Composer](http://getcomposer.org/):
```
composer require norkunas/youtube-dl-php:dev-master
```

## Download video
```php
download(
Options::create()
->downloadPath('/path/to/downloads')
->url('https://www.youtube.com/watch?v=oDAw7vW7H0c')
);

foreach ($collection->getVideos() as $video) {
if ($video->getError() !== null) {
echo "Error downloading video: {$video->getError()}.";
} else {
echo $video->getTitle(); // Will return Phonebloks
// $video->getFile(); // \SplFileInfo instance of downloaded file
}
}

```

## Download only audio (requires ffmpeg or avconv and ffprobe or avprobe)
```php
download(
Options::create()
->downloadPath('/path/to/downloads')
->extractAudio(true)
->audioFormat('mp3')
->audioQuality('0') // best
->output('%(title)s.%(ext)s')
->url('https://www.youtube.com/watch?v=oDAw7vW7H0c')
);

foreach ($collection->getVideos() as $video) {
if ($video->getError() !== null) {
echo "Error downloading video: {$video->getError()}.";
} else {
$video->getFile(); // audio file
}
}
```

## Download progress
```php
onProgress(static function (?string $progressTarget, string $percentage, string $size, string $speed, string $eta, ?string $totalTime): void {
echo "Download file: $progressTarget; Percentage: $percentage; Size: $size";
if ($speed) {
echo "; Speed: $speed";
}
if ($eta) {
echo "; ETA: $eta";
}
if ($totalTime !== null) {
echo "; Downloaded in: $totalTime";
}
});
```

## Custom Process Instantiation

```php
setTimeout(60);

return $process;
}
}
```

```php