cawa0505 / youtube-dl-php
youtube-dl wrapper for php
v1.1.0
2018-12-12 12:03 UTC
Requires
- php: >=7.0.8
- symfony/options-resolver: ^3.3|^4.0
- symfony/process: ^3.3|^4.0
Requires (Dev)
- phpunit/phpunit: ^6.5
README
A PHP wrapper for youtube-dl tool.
Install
First step is to download the youtube-dl and add it's path to environment variables.
Second step is to install the wrapper using Composer:
composer require norkunas/youtube-dl-php
Download video
<?php require __DIR__ . '/vendor/autoload.php'; use YoutubeDl\YoutubeDl; use YoutubeDl\Exception\CopyrightException; use YoutubeDl\Exception\NotFoundException; use YoutubeDl\Exception\PrivateVideoException; $dl = new YoutubeDl([ 'continue' => true, // force resume of partially downloaded files. By default, youtube-dl will resume downloads if possible. 'format' => 'bestvideo', ]); // For more options go to https://github.com/rg3/youtube-dl#user-content-options $dl->setDownloadPath('/home/user/downloads'); // Enable debugging /*$dl->debug(function ($type, $buffer) { if (\Symfony\Component\Process\Process::ERR === $type) { echo 'ERR > ' . $buffer; } else { echo 'OUT > ' . $buffer; } });*/ try { $video = $dl->download('https://www.youtube.com/watch?v=oDAw7vW7H0c'); echo $video->getTitle(); // Will return Phonebloks // $video->getFile(); // \SplFileInfo instance of downloaded file } catch (NotFoundException $e) { // Video not found } catch (PrivateVideoException $e) { // Video is private } catch (CopyrightException $e) { // The YouTube account associated with this video has been terminated due to multiple third-party notifications of copyright infringement } catch (\Exception $e) { // Failed to download }
Download only audio (requires ffmpeg or avconv and ffprobe or avprobe)
<?php require __DIR__ . '/vendor/autoload.php'; use YoutubeDl\YoutubeDl; $dl = new YoutubeDl([ 'extract-audio' => true, 'audio-format' => 'mp3', 'audio-quality' => 0, // best 'output' => '%(title)s.%(ext)s', ]); $dl->setDownloadPath('/home/user/downloads'); $video = $dl->download('https://www.youtube.com/watch?v=oDAw7vW7H0c');
Download progress
<?php $dl->onProgress(function ($progress) { $percentage = $progress['percentage']; $size = $progress['size']; $speed = $progress['speed'] ?? null; $eta = $progress['eta'] ?? null; echo "Percentage: $percentage; Size: $size"; if ($speed) { echo "; Speed: $speed"; } if ($eta) { echo "; ETA: $eta"; } // Will print: Percentage: 21.3%; Size: 4.69MiB; Speed: 4.47MiB/s; ETA: 00:01 });
Disabled options which would break download:
list-formats, list-subs, list-thumbnails, get-url, get-title, get-id, get-thumbnail, get-description, get-duration, get-filename, get-format, dump-json, dump-single-json, print-json, write-info-json (used internally), newline, no-progress, console-title, verbose, dump-pages, write-pages, print-traffic, ignore-config (used internally), all-formats, playlist-start, playlist-end, playlist-items, playlist-reverse, yes-playlist, no-playlist (used internally).