PHP code example of b7s / ytpilot
1. Go to this page and download the library: Download b7s/ytpilot library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
b7s / ytpilot example snippets
use YtPilot\YtPilot;
// Download video with best quality
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->best()
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->audioOnly()
->audioFormat('mp3')
->audioQuality('320K')
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->video()
->audio()
->subtitles()
->metadata()
->thumbnail()
->download();
$pilot = YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
// Get all formats
$formats = $pilot->getAvailableFormats();
foreach ($formats as $format) {
echo "ID: {$format->id}, Resolution: {$format->resolution}, Codec: {$format->vcodec}\n";
}
// Get available resolutions
$resolutions = $pilot->getAvailableResolutions();
echo "Resolutions: " . implode(', ', $resolutions) . "\n";
// Get video codecs
$codecs = $pilot->getAvailableVideoCodecs();
echo "Codecs: " . implode(', ', $codecs) . "\n";
// Get available subtitles
$subtitles = $pilot->getAvailableSubtitles();
echo "Languages: " . implode(', ', $subtitles->getLanguages()) . "\n";
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->cinema() // 1080p+, AV1/VP9/AVC, best audio
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->mobile() // 720p max, AVC, 128k audio
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->archive() // Best available codec (AV1/VP9)
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->video()
->audio()
->subtitles()
->subtitleLanguages(['en', 'es', 'fr'])
->subtitleAsSrt() // or ->subtitleFormat('srt')
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->resolution('1080p')
->fps(60)
->videoCodec('av01')
->audioCodec('opus')
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->outputPath('./downloads')
->output('%(title)s-%(id)s.%(ext)s')
->download();
$result = YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->video()
->audio()
->subtitles()
->metadata()
->thumbnail()
->download();
if ($result->success) {
echo "✓ Download completed!\n";
echo "Video: {$result->videoPath}\n";
echo "Audio: {$result->audioPath}\n";
echo "Thumbnail: {$result->thumbnailPath}\n";
echo "Metadata: {$result->metadataPath}\n";
echo "Subtitles: " . implode(', ', $result->subtitlePaths) . "\n";
echo "Total files: " . count($result->downloadedFiles) . "\n";
} else {
echo "✗ Download failed\n";
echo "Error: {$result->output}\n";
}
YtPilot::make()
->withYtDlpPath('/usr/local/bin/yt-dlp')
->withFfmpegPath('/usr/local/bin/ffmpeg')
->withFfprobePath('/usr/local/bin/ffprobe')
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->best()
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->timeout(600) // 10 minutes
->best()
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=PRIVATE_VIDEO_ID')
->cookies('/path/to/cookies.txt')
->best()
->download();
// From Chrome
YtPilot::make()
->url('https://www.youtube.com/watch?v=AGE_RESTRICTED_VIDEO')
->cookiesFromBrowser('chrome')
->best()
->download();
// From Firefox with specific profile
YtPilot::make()
->url('https://www.youtube.com/watch?v=PREMIUM_VIDEO')
->cookiesFromBrowser('firefox', 'default-release')
->best()
->download();
// From Firefox with profile and container
YtPilot::make()
->url('https://www.youtube.com/watch?v=VIDEO_ID')
->cookiesFromBrowser('firefox', 'default-release', 'Personal')
->best()
->download();
// HTTP proxy
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->httpProxy('proxy.example.com', 8080)
->best()
->download();
// SOCKS5 proxy
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->socks5Proxy('proxy.example.com', 1080)
->best()
->download();
// Full proxy URL (any protocol)
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->proxy('socks5://user:[email protected] :1080')
->best()
->download();
use YtPilot\Enums\ProxyProtocol;
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->proxyWithAuth(
host: 'proxy.example.com',
port: 8080,
username: 'myuser',
password: 'mypassword',
protocol: ProxyProtocol::Http
)
->best()
->download();
// Default Tor port (9050)
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->torProxy()
->best()
->download();
// Tor Browser port (9150)
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->torProxy(9150)
->best()
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=GEO_RESTRICTED_VIDEO')
->geoVerificationProxy('http://us-proxy.example.com:8080')
->best()
->download();
// Force IPv4 connections
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->forceIpv4()
->best()
->download();
// Force IPv6 connections
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->forceIpv6()
->best()
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->sourceAddress('192.168.1.100')
->best()
->download();
use YtPilot\YtPilot;
// Instagram
YtPilot::make()
->url('https://www.instagram.com/reel/ABC123/')
->cookiesFromBrowser('chrome') // Recommended for Instagram
->download();
// Twitter/X
YtPilot::make()
->url('https://twitter.com/user/status/123456789')
->best()
->download();
// TikTok
YtPilot::make()
->url('https://www.tiktok.com/@user/video/123456789')
->download();
// Facebook
YtPilot::make()
->url('https://www.facebook.com/watch?v=123456789')
->cookiesFromBrowser('chrome')
->download();
// Reddit
YtPilot::make()
->url('https://www.reddit.com/r/subreddit/comments/abc123/title/')
->download();
// SoundCloud
YtPilot::make()
->url('https://soundcloud.com/artist/track-name')
->audioOnly()
->audioFormat('mp3')
->download();
// Twitch VOD
YtPilot::make()
->url('https://www.twitch.tv/videos/123456789')
->download();
// Vimeo with subtitles
YtPilot::make()
->url('https://vimeo.com/123456789')
->video()
->subtitles()
->subtitleLanguages(['en', 'pt'])
->download();
use YtPilot\Enums\TwitterApi;
// Using syndication API (default, no auth ->configTwitter(TwitterApi::Syndication)
->download();
// Using GraphQL API (may
use YtPilot\Enums\TikTokApi;
// Using web API (default)
YtPilot::make()
->url('https://www.tiktok.com/@user/video/123456789')
->configTikTok(TikTokApi::Web)
->download();
// Using app API
YtPilot::make()
->url('https://vm.tiktok.com/ABC123/')
->configTikTok(TikTokApi::App)
->download();
YtPilot::make()
->url('https://vimeo.com/123456789')
->configVimeo('video_password')
->download();
YtPilot::make()
->url('https://www.bilibili.com/video/BV1xx411c7mD')
->configBilibili('your_sess_data_cookie')
->download();
YtPilot::make()
->url('https://example.com/video/123')
->withCredentials('username', 'password')
->download();
YtPilot::make()
->url('https://example.com/video/123')
->extractorArgs('youtube', [
'player_client' => 'android',
'skip' => 'dash',
])
->download();
YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->video()
->onDownloading(function (int $percentage, float $downloaded, float $total): void {
echo "\rDownloading: {$percentage}% ";
})
->download();
YtPilot::make()
->onConverting(function (int $percentage, float $current, float $duration): void {
$currentTime = gmdate('H:i:s', (int) $current);
$totalTime = gmdate('H:i:s', (int) $duration);
echo "\rConverting: {$percentage}% ({$currentTime} / {$totalTime}) ";
})
->convertVideoToMp4('input.webm', 'output.mp4');
$ytpilot = YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->video()
->onDownloading(fn($p) => sendToSomeWebhook($p))
->onConverting(fn($p) => sendToOtherWebhook($p));
$ytpilot->download();
// No parameters needed! Uses downloaded video, auto-names output, deletes original
$ytpilot->convertVideoToMp4();
$ytpilot = YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->audioOnly();
$ytpilot->download();
// Keep the original file
$ytpilot->convertAudioToMp3(deleteOriginal: false);
$ytpilot = YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->video();
$ytpilot->download();
// Custom output path, keep original
$ytpilot->convertVideoToMp4(
outputPath: '/tmp/my-video.mp4',
deleteOriginal: false
);
$ytpilot = YtPilot::make();
// Auto output name, keep original
$ytpilot->convertVideoToWebm('video.mp4', deleteOriginal: false);
// Custom output name, delete original
$ytpilot->convertVideoToMkv('video.mp4', 'custom-name.mkv');
// Convert audio formats
$ytpilot->convertAudioToMp3('audio.m4a', deleteOriginal: false);
$ytpilot->convertAudioToFlac('audio.wav', 'high-quality.flac');
YtPilot::make()
->onConverting(function (int $percentage, float $current, float $duration): void {
$time = gmdate('H:i:s', (int) $current);
$total = gmdate('H:i:s', (int) $duration);
echo "\rProgress: {$percentage}% ({$time} / {$total}) ";
})
->convertVideoTo('input.avi', format: 'mp4', deleteOriginal: false);
$ytpilot = YtPilot::make()
->url('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
->video();
$result = $ytpilot->download();
if ($result->success && $result->videoPath) {
// Create multiple formats from the same source
$ytpilot->convertVideoToMp4(deleteOriginal: false); // video.mp4
$ytpilot->convertVideoToWebm(deleteOriginal: false); // video.webm
$ytpilot->convertVideoToMkv(deleteOriginal: true); // video.mkv (deletes original)
}
return [
// Directory where binaries will be stored
'bin_path' => '.ytpilot/bin',
// yt-dlp configuration
'yt_dlp' => [
'path' => null, // null = auto-detect
],
// ffmpeg configuration
'ffmpeg' => [
'path' => null, // null = auto-detect
'probe_path' => null, // null = auto-detect
'prefer_global' => true, // Prefer system binaries
'enabled' => true, // Enable ffmpeg
],
// Default timeout in seconds
'timeout' => 300,
// Default download directory (null = current working directory)
'download_path' => null,
];
// config/ytpilot.php
return [
'download_path' => './downloads',
// ...
];
YtPilot::make()
->url($url)
->outputPath('./my-videos')
->download();
YtPilot::make()
->url($url)
->outputPath('./downloads')
->output('%(title)s-%(id)s.%(ext)s')
->download();