"Kutay Utku'in Projeleri Ve Notları"

Kendi YouTube MP3 / MP4 İndirici Sunucunuzu Kurma (Adım Adım Rehber)

İnternetten video ve ses indirmek için güvenilir bir sunucuya mı ihtiyacınız var? Bu rehberde, tamamen kendi kontrolünüzde olan bir YouTube MP3 / MP4 indirici sunucusunu nasıl kurabileceğinizi adım adım anlatıyoruz.

🚀 Neden Kendi Sunucunuzu Kurmalısınız?

YouTube içeriklerini üçüncü taraf araçlara güvenmeden, hızlı ve güvenli şekilde indirmenin en iyi yolu kendi sisteminizi kurmaktır. Üstelik:

  • Reklamsız ve güvenli
  • MP3 ve tüm çözünürlüklerde MP4 desteği
  • Tamamen size ait, sınırsız kontrol

🛠️ Gereksinimler

  • Bir Linux sunucu (Ubuntu 22.04 veya benzeri)
  • root yetkileri
  • Alan adı (isteğe bağlı) veya IP adresi
  • Apache + PHP kurulumu

1️⃣ yt-dlp Kurulumu

Öncelikle, yt-dlp indirme aracını sisteminize kurun:

cd /home
wget https://github.com/yt-dlp/yt-dlp/releases/download/2025.06.09/yt-dlp
chmod +x yt-dlp
sudo cp yt-dlp /usr/bin/yt-dlp
sudo mv yt-dlp /usr/local/bin/yt-dlp

🔍 En güncel sürüm:
yt-dlp Releases

Kurulum Kontrolü

which yt-dlp
yt-dlp --version

2️⃣ Python Güncellemesi

yt-dlp ve ffmpeg için güncel bir Python sürümü gereklidir:

sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.9 python3.9-distutils

Kontrol:

which python3
python3 --version

3️⃣ ffmpeg Kurulumu

sudo apt install ffmpeg
which ffmpeg
ffmpeg -version

4️⃣ Apache2 ve PHP Kurulumu

sudo apt install apache2
sudo apt install php php-fpm

5️⃣ FTP Kurulumu (Opsiyonel)

sudo apt install vsftpd
sudo nano /etc/vsftpd.conf

Yapılandırma Örneği:

listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
pam_service_name=ftp
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

Restart:

sudo service vsftpd restart

Kullanıcı oluşturma:

sudo useradd -d /var/www/html -s /bin/false ftpuser
sudo passwd ftpuser
sudo chown ftpuser:ftpuser /var/www/html

6️⃣ PHP İndirici Script (Tek Dosya)

/var/www/html/index.php dosyasını oluşturun ve aşağıdaki kodu yapıştırın:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['url'], $_POST['format'])) {
    $url = escapeshellarg($_POST['url']);
    $format = $_POST['format'];

    // Güvenli dosya adı
    $title = trim(shell_exec("/usr/local/bin/yt-dlp -e $url"));
    $safeTitle = preg_replace('/[^A-Za-z0-9\p{L}\p{N}_-]/u', '', $title);
    $safeTitle = preg_replace('/\s+/', '_', $safeTitle);
    $ext = ($format === 'mp3') ? 'mp3' : 'mp4';

    // MP3 için komut
    if ($format === 'mp3') {
        $cmd = "/usr/local/bin/yt-dlp -f bestaudio --extract-audio --audio-format mp3 -o - $url | ".
               "/usr/bin/ffmpeg -i pipe:0 -vn -b:a 192k -f mp3 -movflags frag_keyframe+empty_moov pipe:1";
        header("Content-Type: audio/mpeg");
    } else {
        // Video çözünürlüğü belirleme
        $resolution = intval(str_replace('p', '', $format)); // 144p -> 144
        if ($resolution <= 0) $resolution = 144;  // Varsayılan 144p
        $cmd = "/usr/local/bin/yt-dlp -f \"bestvideo[height<={$resolution}]+bestaudio\" -o - $url | ".
               "/usr/bin/ffmpeg -i pipe:0 -c:v copy -c:a aac -f mp4 -movflags frag_keyframe+empty_moov pipe:1";
        header("Content-Type: video/mp4");
    }

    // Başlık ve dosya adı ile indirme
    header("Content-Disposition: attachment; filename=\"{$safeTitle}.{$ext}\"");
    header("Content-Transfer-Encoding: binary");
    header("Cache-Control: no-cache");
    header("Pragma: public");

    $pipes = [];
    $process = proc_open($cmd, [
        1 => ['pipe', 'w'],
        2 => ['pipe', 'w']
    ], $pipes);

    if (is_resource($process)) {
        while (!feof($pipes[1])) {
            echo fread($pipes[1], 8192);
            flush();
        }
        fclose($pipes[1]);
        fclose($pipes[2]);
        proc_close($process);
    }
    exit;
}
?>

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>YouTube Video / MP3 İndirici</title>
    <style>
        body { font-family: sans-serif; background: #f9f9f9; text-align: center; padding: 50px; }
        input, select, button { padding: 12px; font-size: 16px; margin: 10px; width: 60%; max-width: 500px; }
        button { width: auto; }
        .container { max-width: 600px; margin: auto; background: white; padding: 30px; border-radius: 12px; box-shadow: 0 0 15px rgba(0,0,0,0.1); }
        
        /* Progress bar styles */
        #progress {
            width: 100%;
            background: #ddd;
            height: 20px;
            border-radius: 10px;
            overflow: hidden;
            display: none;
            margin-top: 20px;
        }

        #bar {
            width: 0;
            height: 100%;
            background: green;
            transition: width 0.5s;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>📥 YouTube MP3 / MP4 İndirici</h1>
        <form method="POST" onsubmit="startDownload()">
            <input type="text" name="url" placeholder="YouTube video bağlantısı" required>
            <br>
            <select name="format" required>
                <option value="mp3">🎧 MP3 (Ses)</option>
                <option value="144p">144p</option>
                <option value="240p">240p</option>
                <option value="360p">360p</option>
                <option value="480p">480p</option>
                <option value="720p">720p (HD)</option>
                <option value="1080p">1080p (Full HD)</option>
                <option value="1440p">1440p (2K)</option>
                <option value="2160p">2160p (4K)</option>
                <option value="4320p">4320p (8K)</option>
            </select>
            <br>
            <button type="submit">🎬 İndir</button>
        </form>

        <!-- Progress bar -->
        <div id="progress">
            <div id="bar"></div>
        </div>
    </div>

    <script>
        function startDownload() {
            document.getElementById('progress').style.display = 'block'; // Göster
            let bar = document.getElementById('bar');
            let width = 0;
            let interval = setInterval(() => {
                if (width >= 100) {
                    clearInterval(interval);
                } else {
                    width += 5;
                    bar.style.width = width + '%'; // Bar'ı güncelle
                }
            }, 500); // Her yarım saniyede 5% arttır
        }
    </script>
</body>
</html>

Bu script, kullanıcıların doğrudan tarayıcıdan MP3 veya MP4 (144p-8K) formatında indirme yapmasına olanak tanır.

🎨 Arayüz Özellikleri

  • YouTube URL alanı
  • Format seçimi (MP3, 144p–4320p)
  • Otomatik başlık alma ve güvenli dosya adı oluşturma
  • İndirme sırasında ilerleme çubuğu animasyonu

✅ Son Adım: Test Etme

Tarayıcınızdan IP adresinizi veya domain adınızı yazın:

http://sunucu-ip-adresi/

YouTube bağlantınızı girin, formatı seçin ve “İndir” tuşuna basın.

🔒 Güvenlik ve Yasal Uyarı

Bu sistem yalnızca kişisel kullanım ve eğitim amaçlı tasarlanmıştır. Telif hakkı içeren içeriklerin izinsiz indirilmesi yasal sorunlara neden olabilir.

📦 Sonuç

Bu rehber sayesinde, sunucunuza kurulu çalışan bir YouTube indirici aracı elde ettiniz. Şimdi reklamsız, özgür ve hızlı bir şekilde medya içeriklerini indirmenin keyfini çıkarabilirsiniz.

Henüz yorum yapılmamış.

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir