Python Script Facebook Video Downloader Dengan Library yt-dlp
Dalam era digital saat ini, mengelola dan mengunduh video secara otomatis bisa sangat membantu, terutama untuk dokumentasi, arsip, atau pembelajaran.
Download Video dari Facebook dengan Python dan Library yt-dlp
Artikel ini akan membahas fungsi dan alur kerja dari sebuah script Python yang dirancang untuk:
- Membaca daftar video dari file teks,
- Mengelompokkan video berdasarkan judul atau kategori,
- Menyusun nama file secara rapi dan terstruktur,
- Mengunduh video dengan kualitas terbaik menggunakan
yt-dlp
.
Library yg Digunakan
Script ini memanfaatkan beberapa pustaka Python:
- yt_dlp – untuk mengambil informasi dan mengunduh video,
- subprocess – untuk menjalankan perintah terminal secara langsung,
- re – untuk pencocokan pola teks menggunakan regular expressions,
- os – untuk pengelolaan sistem file dan folder.
Fb Video Downloader Script
import subprocess
import re
import os
import yt_dlp
BASE_FOLDER = "downloads"
CUSTOM_REGEX = r"\[ *[Ee][Pp][\.\s]*([\d\.]+) *\] *(.+)"
def sanitize_filename(name):
return re.sub(r'[\\/:*?"<>|]', '_', name)
def extract_title(url):
try:
ydl_opts = {
'quiet': True,
'skip_download': True,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=False)
return info.get('title', 'fb_video')
except Exception as e:
print(f"Gagal mengambil info dari {url}: {e}")
return "fb_video"
def download_video(url, index, folder_name, base_name):
raw_title = extract_title(url)
# Coba gunakan regex kalau cocok
match = re.search(CUSTOM_REGEX, raw_title)
if match:
video_title = f"Ep. {match.group(1)} - {match.group(2)}"
else:
video_title = raw_title
video_title = sanitize_filename(video_title)
filename = f"{index:02d} - {base_name}" # Gunakan nama blok
target_folder = os.path.join(BASE_FOLDER, folder_name)
os.makedirs(target_folder, exist_ok=True)
print(f"\n Mendownload: {filename} → folder '{target_folder}'")
try:
subprocess.run([
"yt-dlp",
"-f", "best",
url,
"-o", f"{target_folder}/{filename}.%(ext)s"
])
except Exception as e:
print("Gagal download:", e)
def parse_facebook_links(file_path):
groups = []
with open(file_path, "r", encoding="utf-8") as f:
title = None
links = []
for line in f:
line = line.strip()
if line.startswith("title ="):
if title and links:
groups.append((title, links))
title = sanitize_filename(line.replace("title =", "").strip())
links = []
elif line.startswith("http"):
links.append(line)
if title and links:
groups.append((title, links)) # simpan blok terakhir
return groups
if __name__ == "__main__":
blocks = parse_facebook_links("facebook_links.txt")
for title, urls in blocks:
print(f"\n Mengunduh untuk judul: {title} ({len(urls)} video)")
for i, url in enumerate(urls, start=1):
download_video(url, i, title, title)
Penjelasan Tiap Bagian Script
1. Konstanta dan Regex Kustom
BASE_FOLDER = "downloads"CUSTOM_REGEX = r"\[ *[Ee][Pp][\.\s]*([\d\.]+) *\] *(.+)"
BASE_FOLDER: Lokasi utama tempat semua video akan disimpan.
CUSTOM_REGEX: Pola untuk mendeteksi format nama video seperti [Ep. 01] Judul Video
agar nama file bisa disusun rapi.
2. sanitize_filename(name)
Fungsi ini membersihkan nama file dari karakter ilegal di sistem file:
return re.sub(r'[\\/:*?"<>|]', '_', name)
Berguna agar nama file aman dan tidak menimbulkan error saat menyimpan.
3. extract_title(url)
Mengambil judul video dari URL Facebook menggunakan yt_dlp
tanpa mengunduh videonya:
info = ydl.extract_info(url, download=False)return info.get('title', 'fb_video')
Jika gagal, fungsi akan mengembalikan fb_video
sebagai judul default.
4. download_video(url, index, folder_name, base_name)
Fungsi utama untuk:
- Menentukan nama file berdasarkan regex atau judul asli,
- Menyusun folder berdasarkan
folder_name
, - Menjalankan perintah
yt-dlp
untuk mengunduh video.
subprocess.run(["yt-dlp","-f", "best",url,"-o", f"{target_folder}/{filename}.%(ext)s"])
Nama file dibuat dengan format 01 - NamaJudul.ext
agar tersusun rapi secara numerik.
5. parse_facebook_links(file_path)
Fungsi ini membaca file facebook_links.txt
dan mengelompokkan link video berdasarkan blok judul:
Contoh isi file:
title = Kelas Python Dasar
https://facebook.com/video1
https://facebook.com/video2
title = Tutorial Django
https://facebook.com/video3
Hasil parsing-nya adalah daftar tuple: (judul, [daftar_url])
.
6. Main Execution
Bagian ini menjalankan seluruh proses:
if __name__ == "__main__":
- Membaca file link,
- Untuk setiap blok judul → buat folder → unduh semua video di dalamnya secara berurutan.
Struktur Output
Setelah dijalankan, script ini akan membuat struktur folder seperti:
downloads/├── Kelas Python Dasar/│ ├── 01 - Kelas Python Dasar.mp4│ └── 02 - Kelas Python Dasar.mp4├── Tutorial Django/│ └── 01 - Tutorial Django.mp4
Kegunaan Script Ini
Script ini ideal untuk:
- Guru/instruktur yang menyimpan konten dari Facebook untuk pelatihan offline,
- Dokumentasi video live atau serial yang memiliki format judul konsisten,
- Pengunduhan massal video dengan pengelompokan otomatis.
Catatan Penting
yt-dlp
harus sudah terinstal dan dapat dijalankan lewat terminal, dengan mengetikkan command
pip install yt-dlp
- Pastikan Kamu memiliki izin untuk mengunduh konten dari Facebook,
- Beberapa video Facebook mungkin membutuhkan login atau tidak bisa diakses publik.
Script ini menunjukkan bagaimana Python dapat digunakan untuk mengotomatiskan tugas-tugas repetitif seperti mengunduh dan mengorganisir video dari platform seperti Facebook. Dengan menambahkan regex dan sanitasi nama file, hasil akhirnya pun menjadi lebih profesional dan rapi.
Jika Kamu ingin mengembangkan versi dengan antarmuka grafis (GUI) atau menyimpan ke Google Drive, fitur itu dapat ditambahkan dengan penyesuaian lebih lanjut.