فکر می کنی برای ساخت یک دانلودر ویدیو با سی شارپ باید صدها خط کد بنویسی؟ نه 👀
با کتابخانه 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 | کاکتوس وب
