TGViewer
برنامه نویسی | کاکتوس وب 🌵 برنامه نویسی | کاکتوس وب 🌵 @cactuswebteam · 1.73K subscribers
Post #52 640
⬇️ با سی شارپ یک YouTube Downloader بساز 😳

فکر می ‌کنی برای ساخت یک دانلودر ویدیو با سی شارپ باید صدها خط کد بنویسی؟ نه 👀

با کتابخانه YoutubeExplode چه کار هایی می ‌تونه برای شما انجام بده ⁉️

✅ دریافت اطلاعات ویدیو
✅ دریافت عنوان و مشخصات کانال
✅ بهترین کیفیت موجود رو پیدا کنه
✅ فایل MP4 رو ذخیره کنه
✅ دریافت مدت زمان ویدیو
✅ دریافت کیفیت ‌های مختلف
✅ کلی امکانات دیگه...

📱 اول کتابخانه رو نصب کن:

dotnet add package YoutubeExplode


🧑‍💻 بعد کد اصلی دانلود:

حالا یک پروژه ویندوز فرم ایجاد کنید و یک TextBox و یک دکمه Button به همراه یک Progressbar و یک Label به فرم اضافه کنید و حالا می تونید از کد زیر استفاده کنید
using YoutubeExplode;
using YoutubeExplode.Videos.Streams;

namespace YoutubeDownload
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
progressBar1.Value = 0;
}

private async void button1_Click(object sender, EventArgs e)
{
try
{
button1.Enabled = false;
progressBar1.Value = 0;

var youtube = new YoutubeClient();
var videoUrl = textBox1.Text.Trim();

if (string.IsNullOrWhiteSpace(videoUrl))
{
MessageBox.Show("لینک ویدیو را وارد کنید");
return;
}

var video = await youtube.Videos.GetAsync(videoUrl);
var manifest = await youtube.Videos.Streams.GetManifestAsync(video.Id);
var streamInfo = manifest.GetMuxedStreams().GetWithHighestVideoQuality();

if (streamInfo == null)
{
MessageBox.Show("برای این ویدیو استریم Muxed پیدا نشد");
return;
}

using var dialog = new SaveFileDialog
{
Filter = "MP4 Video (*.mp4)|*.mp4",
FileName = $"{video.Title}.mp4"
};

if (dialog.ShowDialog() != DialogResult.OK)
return;

progressBar1.Value = 0;
lblProgress.Text = "0%";

MessageBox.Show(
$"⬇️ دانلود شروع شد...\n\n" +
$"🎬 {video.Title}\n" +
$"📺 {video.Author.ChannelTitle}\n" +
$"📦 کیفیت: {streamInfo.VideoQuality.Label}"
);

var progress = new Progress<double>(value =>
{
int percent = (int)(value * 100);
percent = Math.Clamp(percent, 0, 100);
progressBar1.Value = percent;
lblProgress.Text = $"{percent}%";
});

await youtube.Videos.Streams.DownloadAsync(streamInfo, dialog.FileName, progress);
progressBar1.Value = 100;
lblProgress.Text = "100%";

MessageBox.Show($"دانلود با موفقیت انجام شد\n\n" + $"فایل:\n{dialog.FileName}", "دانلود موفق");
}
catch (Exception ex)
{
MessageBox.Show($"Error:\n\n{ex.Message}", "Error");
}
finally
{
button1.Enabled = true;
}
}
}
}


⭕️ اما یک نکته مهم:

همه ‌ی ویدیو ها یک استریم ترکیبی صدا + تصویر ندارند. اگر GetMuxedStreams() چیزی برنگرداند، باید صدا و تصویر جداگانه دریافت و سپس با ابزاری مثل FFmpeg ترکیب شوند.


💬 اگه قسمت دوم رو بخواید، می ‌تونیم نسخه حرفه ‌ای‌ ترش رو براتون بسازم:

💿 انتخاب کیفیت
💿 نمایش حجم فایل
⏱️ نمایش سرعت دانلود
🎞 توقف و ادامه دانلود
🔊 دانلود صوت
📹 ترکیب صدا و تصویر با FFmpeg


#️⃣ #برنامه_نویسی #یوتیوب #سی_شارپ

➖➖➖➖➖➖➖➖
⏺ @cactuswebteam | کاکتوس وب
  • 🔥 3
More from @cactuswebteam
  1. Sep 28, 2026💰 مردی که می توانست از ایلان ماسک هم ثروتمندتر شود… اما انتخاب دیگری کرد! اسمش تیم برنرز-…
  2. Sep 27, 2026📁 تلگرام رو تبدیل کن به هارد شخصی با Telegram Drive می ‌تونی فایل ‌های تلگرام، Saved Mess…
  3. Sep 26, 2026یه راز درباره برنامه ‌نویس ‌های حرفه ‌ای که شاید کسی بهت نگفته باشه فکر می ‌کنی برنامه ‌نو…
  4. Sep 25, 2026🗓 تقویم شمسی در Blazor Server با JalaliDatePicker اگر با Blazor Server کار می کنید و برای…
  5. Sep 24, 2026🎬 پیشنهاد فیلم Swiped (2025) تا حالا فکر کردی یک ایده ساده برای آشنایی آدم ‌ها چطور میتون…
  6. Sep 23, 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 →