Advanced Configuration - darkwob/youtube-mp3-converter GitHub Wiki

Advanced Configuration

Audio Formats

Supported audio formats and their configurations:

use Darkwob\YoutubeMp3Converter\Converter\Options\ConverterOptions;

$options = new ConverterOptions();

// MP3 Format (Default)
$options->setAudioFormat('mp3')
        ->setAudioQuality(0);  // 0-9 scale (0 = highest quality)

// AAC Format  
$options->setAudioFormat('aac')
        ->setAudioQuality(2);  // 0-9 scale

// WAV Format
$options->setAudioFormat('wav')
        ->setAudioQuality(0);  // Always highest quality for WAV

// FLAC Format
$options->setAudioFormat('flac')
        ->setAudioQuality(0);  // Lossless compression

// M4A Format
$options->setAudioFormat('m4a')
        ->setAudioQuality(1);  // 0-9 scale

// Opus Format
$options->setAudioFormat('opus')
        ->setAudioQuality(3);  // Good quality/size balance

// Vorbis Format  
$options->setAudioFormat('vorbis')
        ->setAudioQuality(2);  // OGG Vorbis

Metadata Options

Configure metadata and thumbnails:

$options = new ConverterOptions();
$options
    ->setMetadata([                  // Set custom metadata
        'artist' => 'Artist Name',
        'album' => 'Album Name', 
        'genre' => 'Music',
        'date' => '2024'
    ])
    ->enableThumbnail(true);         // Embed thumbnail as album art

Output Templates

Customize output filenames:

$options = new ConverterOptions();

// Default template
$options->setOutputTemplate('%(title)s.%(ext)s');

// With video ID
$options->setOutputTemplate('%(title)s-%(id)s.%(ext)s');

// With date
$options->setOutputTemplate('%(upload_date)s-%(title)s.%(ext)s');

// Custom directory structure
$options->setOutputTemplate('%(uploader)s/%(title)s.%(ext)s');

Network Settings

Configure network-related options:

$options = new ConverterOptions();
$options
    ->setProxy('socks5://127.0.0.1:1080')          // Use proxy
    ->setRateLimit(500);                           // Download speed limit (KB/s)
    
// Note: Other network options may depend on yt-dlp configuration

Redis Configuration

Configure Redis for progress tracking:

use Darkwob\YoutubeMp3Converter\Progress\RedisProgress;

// Using default Redis connection
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$progress = new RedisProgress($redis);

// Using Predis client
$predis = new \Predis\Client([
    'scheme' => 'tcp',
    'host'   => '127.0.0.1',
    'port'   => 6379,
    'password' => 'your-password',
    'database' => 0
]);
$progress = new RedisProgress($predis);

// Configure TTL (Time To Live)
$progress = new RedisProgress($redis, 7200); // 2 hours

Playlist Options

Configure playlist processing:

$options = new ConverterOptions();
$options->setPlaylistItems('1,3,5-7');            // Process specific items

// Note: Current version focuses on single video processing
// Playlist support may be added in future versions

Date Filtering

Filter videos by date range:

$options = new ConverterOptions();
$options
    ->setDateAfter('20240101')                     // Videos after this date (YYYYMMDD)
    ->setDateBefore('20241231');                   // Videos before this date (YYYYMMDD)

File Size Limits

Set file size constraints:

$options = new ConverterOptions();
$options->setFileSizeLimit('100M');               // Maximum file size (50M, 100M, 1G, etc.)

Windows-Specific Configuration

Configure Windows-specific options:

use Darkwob\YoutubeMp3Converter\Converter\Util\DirectoryManager;
use Darkwob\YoutubeMp3Converter\Converter\Util\ProcessManager;
use Darkwob\YoutubeMp3Converter\Converter\Util\PlatformDetector;

// Create directory manager with Windows path handling
$dirManager = new DirectoryManager(
    'C:\\Users\\Username\\Music\\Downloads', // Output directory
    'C:\\Users\\Username\\AppData\\Local\\Temp' // Temp directory
);

// Ensure directories exist with proper permissions
try {
    $dirManager->ensureDirectoriesExist();
    echo "Directories created and validated\n";
} catch (DirectoryException $e) {
    echo "Directory error: " . $e->getMessage() . "\n";
}

// Create process manager with Windows environment setup
$processManager = new ProcessManager('C:\\Path\\To\\Binaries');

// Check if running on Windows
if (PlatformDetector::isWindows()) {
    // Windows-specific setup
    echo "Running on Windows - using platform-specific paths\n";
    
    // Create temporary directory with Windows compatibility
    $tempDir = $dirManager->createTempDirectory('ytdl_win_');
    echo "Created Windows-compatible temp directory: {$tempDir}\n";
    
    // Clean up when done
    $dirManager->cleanupTempFiles($tempDir);
}