Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Youtube Dl Bundle Laravel Package

das-l/youtube-dl-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require das-l/youtube-dl-bundle
    

    Add to config/bundles.php:

    return [
        // ...
        DasL\YouTubeDlBundle\DasLYoutubeDlBundle::class => ['all' => true],
    ];
    
  2. Configure config/packages/das_l_youtube_dl.yaml:

    das_l_youtube_dl:
        bin_path: '/usr/bin/yt-dlp'  # or '/usr/bin/youtube-dl'
        python_path: null  # Optional, if needed for metadata extraction
    
  3. First Use Case: Inject YoutubeDl into a service and use it to download a video:

    use YoutubeDl\Options;
    use YoutubeDl\YoutubeDl;
    
    class VideoService {
        public function __construct(private YoutubeDl $youtubeDl) {}
    
        public function fetchVideo(string $url): array {
            $options = Options::create()->url($url);
            return $this->youtubeDl->download($options)->toArray();
        }
    }
    

Implementation Patterns

Common Workflows

  1. Basic Downloads:

    $options = Options::create()
        ->url('https://youtube.com/watch?v=abc123')
        ->downloadPath(storage_path('videos'));
    $this->youtubeDl->download($options);
    
  2. Metadata Extraction:

    $metadata = $this->youtubeDl->getMetadata($url);
    $title = $metadata->getTitle();
    
  3. Custom Options:

    $options = Options::create()
        ->url($url)
        ->format('bestvideo+bestaudio') // Merge video/audio streams
        ->subtitles(true); // Enable subtitles
    
  4. Batch Processing:

    $urls = ['url1', 'url2', 'url3'];
    foreach ($urls as $url) {
        $this->youtubeDl->download(Options::create()->url($url));
    }
    

Integration Tips

  • Queue Jobs: Wrap downloads in a job for async processing:

    use Illuminate\Bus\Queueable;
    use YoutubeDl\Options;
    
    class DownloadVideoJob implements Queueable {
        public function handle(YoutubeDl $youtubeDl) {
            $youtubeDl->download(Options::create()->url($this->url));
        }
    }
    
  • Event Listeners: Trigger events on download completion:

    // config/packages/das_l_youtube_dl.yaml
    das_l_youtube_dl:
        listeners:
            on_download_complete: ['App\Listeners\LogDownload', 'handle']
    
  • Custom Process Builder: Extend DefaultProcessBuilder for advanced use cases:

    class CustomProcessBuilder extends DefaultProcessBuilder {
        public function build(Options $options): Process {
            // Custom logic (e.g., proxy support)
            return parent::build($options);
        }
    }
    

    Register in services.yaml:

    das_l_youtube_dl.process_builder:
        class: App\CustomProcessBuilder
    

Gotchas and Tips

Pitfalls

  1. Binary Path:

    • Ensure bin_path points to a valid youtube-dl or yt-dlp executable.
    • Debug with:
      which youtube-dl  # or yt-dlp
      
  2. Python Dependencies:

    • If using yt-dlp, Python may be required for metadata extraction. Install dependencies:
      pip install yt-dlp
      
    • Set python_path in config if Python isn’t in PATH.
  3. Permissions:

    • Ensure the web server user (e.g., www-data) has read/write access to the download directory.
  4. Rate Limiting:

    • Avoid aggressive scraping. Use --limit-rate in options:
      ->addOption('--limit-rate', '50K') // 50KB/s
      
  5. Metadata Caching:

    • Disable caching for live updates (not recommended for production):
      ->addOption('--no-cache-dir')
      

Debugging

  • Verbose Output: Enable debug mode to inspect commands:

    das_l_youtube_dl:
        debug: true
    

    Or via code:

    $options->addOption('-v'); // Verbose mode
    
  • Error Handling: Wrap downloads in try-catch:

    try {
        $this->youtubeDl->download($options);
    } catch (ProcessFailedException $e) {
        Log::error('Download failed: ' . $e->getProcess()->getOutput());
    }
    

Extension Points

  1. Custom Metadata Readers: Extend DefaultMetadataReader to parse additional fields:

    class CustomMetadataReader extends DefaultMetadataReader {
        protected function parseJson(array $json): Metadata {
            $metadata = parent::parseJson($json);
            $metadata->setCustomField($json['custom_field']);
            return $metadata;
        }
    }
    
  2. Post-Processing: Use events to transform downloaded files:

    // config/packages/das_l_youtube_dl.yaml
    das_l_youtube_dl:
        listeners:
            on_download_complete: ['App\Services\VideoProcessor', 'process']
    
  3. Proxy Support: Configure proxies via options:

    ->addOption('--proxy', 'http://user:pass@proxy.example.com:8080')
    
  4. Fallback Binaries: Dynamically switch between youtube-dl and yt-dlp:

    $binPath = file_exists('/usr/bin/yt-dlp') ? '/usr/bin/yt-dlp' : '/usr/bin/youtube-dl';
    $this->youtubeDl->setBinPath($binPath);
    

Performance

  • Concurrent Downloads: Use Symfony’s Messenger component to parallelize downloads:

    $bus->dispatch(new DownloadVideoJob($url));
    
  • Memory Management: Stream large files directly to disk instead of loading into memory:

    $options->addOption('--no-playlist') // Avoid playlist processing
             ->addOption('--get-url');    // Get URL without downloading
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
daikazu/eloquent-salesforce-objects
unseen-codes/chat
romalytar/yammi-jobs-monitoring-laravel
kisame76/filament-db-table-state
nqxcode/laravel-lucene-search
dpfx/laravel-livewire-wizards
workos/workos-php-laravel
sofa/laravel-global-scope
nawasara/auth-primitives
adhocrat-io/arkhe-main
make-dev/orca-harpoon
itsemon245/lamet
baks-dev/dashboard
amoifr/pickle-panther-bundle
make-dev/orca
dmstr/symfony-system-resources-bundle
dmstr/symfony-job-queue-bundle
dmstr/openapi-json-schema-bundle
dmstr/keycloak-security-bundle
dmstr/doctrine-audit-log-bundle