Seringkali kita membutuhkan cara cepat untuk mengunduh video atau playlist dari YouTube tanpa harus berurusan dengan situs downloader penuh iklan atau limitasi kualitas. Sebagai programmer, solusi terbaik tentu saja: bikin sendiri.
Hari ini saya ingin membagikan side project kecil yang baru saja saya selesaikan: DownloaderYT CLI. Ini adalah tool berbasis terminal (CLI) untuk mengunduh video dan audio dari YouTube dengan antarmuka yang interaktif dan rapi.
Mengapa Membuat Ini?
Meskipun yt-dlp sendiri sudah sangat powerful, penggunaannya via command line argumen kadang cukup panjang untuk diingat, terutama jika kita ingin mengatur format output, folder penyimpanan, dan kualitas secara spesifik.
Tujuan saya membuat tool ini adalah:
- Wrapper yang User-Friendly: Tidak perlu menghapal flag
yt-dlp. - Organisasi File Otomatis: Membuat folder rapi berdasarkan nama playlist atau judul video.
- Estetika: Terminal tidak harus membosankan. Saya ingin progress bar yang cantik dan menu yang interaktif.
Tech Stack
Proyek ini dibangun menggunakan Python dengan memanfaatkan beberapa library open-source yang luar biasa:
- yt-dlp: Engine utama untuk menangani proses unduhan dari YouTube. Ini adalah fork dari
youtube-dlyang lebih aktif dan cepat. - Rich: Untuk membuat tampilan terminal menjadi indah (warna, panel, tabel, dan progress bar).
- Questionary: Untuk membuat menu interaktif (pilihan menggunakan panah keyboard) yang intuitif.
Fitur Utama
Berikut adalah beberapa fitur yang sudah saya implementasikan:
1. Dukungan Playlist & Single Video
Tool ini cerdas mendeteksi apakah link yang dimasukkan adalah video tunggal atau playlist. Jika playlist, ia akan mengunduh seluruh isinya dan mengaturnya ke dalam folder khusus.
2. Pilihan Kualitas Fleksibel
User bisa memilih resolusi video mulai dari Low (360p) hingga 4K (2160p). Untuk audio, tersedia format MP3, M4A, FLAC, dan WAV.
3. Manajemen Metadata
Setiap unduhan tidak hanya menyimpan file media, tapi juga:
- Thumbnail video.
- Metadata lengkap dalam format JSON.
- Struktur folder yang rapi (
downloads/Judul Video/).
4. Real-time Progress Bar
Berkat library Rich, kita bisa melihat kecepatan download, estimasi waktu, dan persentase dalam tampilan yang modern.
Bedah Kode (Snippet)
Salah satu bagian menarik adalah bagaimana mengintegrasikan hook progress dari yt-dlp ke Rich progress bar. Berikut potongannya dari main.py:
def progress_hook(d):
if d['status'] == 'downloading':
try:
total = d.get('total_bytes') or d.get('total_bytes_estimate')
downloaded = d.get('downloaded_bytes', 0)
# Mendapatkan judul untuk ditampilkan
info_dict = d.get('info_dict', {})
title = info_dict.get('title', 'Unknown')
# Update progress bar Rich
if total:
progress.update(task_id, total=total, completed=downloaded, description=f"[cyan]{title}[/cyan]")
except Exception as e:
pass
Dan untuk menu interaktif pemilihan kualitas, questionary membuatnya sangat bersih:
def get_quality_options(type_choice):
if type_choice == 'Video':
return [
{"name": "๐ Best Available (Max)", "value": "bestvideo+bestaudio/best"},
{"name": "๐บ 4K (2160p)", "value": "bestvideo[height<=2160]+bestaudio/best[height<=2160]"},
{"name": "๐ Full HD (1080p)", "value": "bestvideo[height<=1080]+bestaudio/best[height<=1080]"},
# ... opsi lainnya
]
Cara Instalasi
Jika Anda tertarik mencoba atau memodifikasinya, berikut langkah singkatnya:
-
Clone Repository:
git clone https://github.com/ibnu12126800/DownloaderYT-CLI.git cd DownloaderYT-CLI -
Setup Environment:
python3 -m venv venv source venv/bin/activate # Linux/Mac # atau venv\Scripts\activate di Windows pip install -r requirements.txt -
Pastikan FFmpeg Terinstal: Tool ini membutuhkan FFmpeg untuk menggabungkan video/audio dan konversi format.
-
Jalankan:
python main.py
Penutup
Proyek ini mengajarkan saya bahwa membuat tools sederhana untuk kebutuhan pribadi bisa sangat menyenangkan, apalagi jika kita meluangkan waktu sedikit untuk memoles UI/UX-nya. Tidak ada lagi terminal hitam putih yang membosankan!
Tertarik berkontribusi atau melihat kodenya? Cek di GitHub saya.
Happy Coding! ๐