TGViewer
DT_PYTHON_LEARNING DT_PYTHON_LEARNING @dt_python_learning · 1.08K subscribers
Post #223 662

Forwarded from 🛑 Iranian🇮🇷Experts 🛑 (𝓓𝓪𝓻𝓲𝓾𝓼𝓱 𝓣𝓪𝓼𝓭𝓲𝓰𝓱𝓲)

💝 سلام هموطنان گرامی و دوستان عزیزم 💝

🔴 در قرن ۲۱ام، پس از عصر دانش و ارتباطات، و در عصر هوش مصنوعی، واقعا شرم‌آور است که:

زمانی که ذهن‌های خلاق، هوش مصنوعی خلق می‌کنند، متاسفانه، ذهن‌های کودن و متوهم، ذهن‌های مستعد را مایوس، و ذهن‌های خلاق را فراری می‌دهند!

〰️ داریوش تصدیقی - هفتم / بهمن‌ماه / ۱۴۰۴

😓 ضمن عرض تسلیت، خواستم در این وضعیت نابسامان اینترنت، کدی را در اختیار شما عزیزان قرار دهم که اگر احیانا توانستید به اینترنت بین‌المللی متصل شده و برای تحقیق و توسعه فردی، فیلم‌هایی را که به صورت Playlist در YouTube قرار گرفته‌اند را ابتدا دانلود کرده و سر فرصت مشاهده نمایید، امکانش فراهم شود.

1️⃣ ابتدا برنامه پایتون را دانلود و نصب کنید.

2️⃣ سپس بسته yt-dlp را نصب نمایید:

python -m pip install -U pip
python -m pip install -U yt-dlp


3️⃣ سپس سورس‌کد ذیل را در یک فایل مثلا app.py قرار دهید.

4️⃣ سپس با دستور ذیل، برنامه را اجرا نمایید:

python ./app.py


5️⃣ در سورس کد موجود، یک متغیر به نام playlist_ids وجود دارد که برای نمونه، Id مربوط به دو Playlist قرار گرفته است. می‌توانید آن‌ها را تغییر داده و یا حتی اضافه و تکمیل نمایید.

import os
from pathlib import Path
from yt_dlp import YoutubeDL

BASE_DOWNLOAD_PATH: str = "./downloads"

def download_playlist(
base_dir: str,
playlist_id: str,
):
"""
Download a YouTube playlist in order, up to 1080p, with English subtitles
if available. Creator ID is automatically extracted from playlist metadata.
"""

playlist_url: str = f"https://www.youtube.com/playlist?list={playlist_id}"

# Step 1: Extract playlist metadata (without downloading)
with YoutubeDL(params={"quiet": True}) as ydl:
info = ydl.extract_info(url=playlist_url, download=False)

# Extract creator/uploader identifier safely
creator_id = (
info.get("uploader_id")
or info.get("uploader")
or "unknown_creator"
)

# Step 2: Build directory structure
# base_dir / creator_id / playlist_id
playlist_path = Path(base_dir) / creator_id / playlist_id
playlist_path.mkdir(parents=True, exist_ok=True)

# Archive file to track downloaded videos
archive_file = playlist_path / "downloaded.txt"

ydl_opts = {
# Best video up to 1080p + best audio, then merge
"format": "bestvideo[height<=1080]+bestaudio/best[height<=1080]",

# Preserve playlist order in filenames
"outtmpl": str(
playlist_path / "%(playlist_index)02d - %(title)s.%(ext)s"
),

# Playlist handling
"noplaylist": False,
"yesplaylist": True,

# Merge output format
"merge_output_format": "mp4",

# Error handling
"ignoreerrors": True,
"retries": 3,

# Archive to avoid re-downloading videos
"download_archive": str(archive_file),

# Subtitle settings
"writesubtitles": True,
"writeautomaticsub": True,
"subtitleslangs": ["en"],
"subtitlesformat": "vtt",
}

with YoutubeDL(ydl_opts) as ydl:
ydl.download([playlist_url])

def main() -> None:
"""
The main of program
"""

os.system(command="cls" if os.name == "nt" else "clear")

playlist_ids: list[str] = [
"PLNJUbRWljtkb0AzjG0s78goCg0xOaI9KK",
"PLgt_9NUA44-Xu6-IbAE9DDti53hhx2ltM",
]

for playlist_id in playlist_ids:
download_playlist(
playlist_id=playlist_id,
base_dir=BASE_DOWNLOAD_PATH,
)

if __name__ == "__main__":
try:
main()

except KeyboardInterrupt:
pass

except Exception as error:
print(f"\n[-] {error}!")

print()


#python #download #source_code #youtube #playlist

🆔 @Dariush_Tasdighi

🆔
@LLM_OPS
🆔
@IranianExperts
🆔
@DT_PYTHON_LEARNING

.
  • ❤ 29
  • 👍 4
More from @dt_python_learning
  1. Aug 28, 2026photo post
  2. Aug 26, 2026💢شروع قطعی دوره آنلاین برنامه نویسی با پایتون Python 🔆شروع از 5 شهریور ⏱️روزهای پنجشنبه…
  3. Aug 17, 2026💝 سلام دوستان عزیزم 💝 🔴 جلسه آموزشی در خصوص AI Agent ها و MCP Client و MCP Server 👍 پی…
  4. Aug 5, 2026💝 سلام دوستان عزیزم 💝 🔴 یادگیری زبان برنامه‌نویسی پایتون، به بهانه راه‌اندازی چند مدل T…
  5. Jul 13, 2026💢شروع قطعی دوره آنلاین هوش مصنوعی کاربردی LLMOps 🔆شروع از 25 تیر ⏱️ روزهای پنجشنبه 14 ال…
  6. Jun 29, 2026💝 سلام دوستان عزیزم 💝 🔴 معرفی یک دوره آموزشی هیجان‌انگیز (رایگان) (غیر حضوری) در کانال…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →