![]() |
|
تحويل الفيديوهات باستخدام حزمة xFFmpeg.NET - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم امثلة ومشاريع VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=188) +--- الموضوع : تحويل الفيديوهات باستخدام حزمة xFFmpeg.NET (/showthread.php?tid=35980) |
تحويل الفيديوهات باستخدام حزمة xFFmpeg.NET - Anas Mahmoud - 03-08-20 بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته الموضوع بلغة C# هذا مثال لاستخدام حزمة xFFmpeg.NET الخاصة بالتعامل مع الفيديوهات الحزمة ما هي الى غطاء Wrapper للتعامل مع ملف FFmpeg.exe الشهير الذي يمكنه عمل كل شيء بالفيديوهات تقريبا في الحقيقة يمكنك تحويل الفيديوهات عن طريق FFmpeg.exe مباشرة ، ولكن التعامل لن يكون بالبساطة المطلوبة ، كنت طرحت في المنتدى القديم استخدام FFmpeg.exe مباشرة عن طريق Shell . xFFmpeg.NET تجعل التعامل مع الفيديوهات اسهل ما يمكن ، فهي تمكنك من تحويل الفيديوهات والصوتيات بجميع صيغها تقريبا وكذلك قصها او تعديل اعداداتها. تحتاج لتنزيل FFmpeg.exe من موقعهم الرسمي ، بعد ذلك قم بفك الضغط وستجد ملف FFmpeg.exe داخل مجلد bin انسخ FFmpeg.exe الى مجلد bin\Debug في ملفات المشروع وسيعمل ان شاء الله تعالى [attachment=25350] [attachment=25351] [attachment=25352] [attachment=25353] المثال: [attachment=25355] الذي اقدمه لكم في غاية البساطة ، تقوم باختيار الملف المراد تحويله ووكذلك مسار واسم حفظه ثم اضغط حوّل وفقط شاهد تقدم عملية التحويل وكذلك معلومات اثناء التحويل تقبل الله منا ومنكم الطاعات في المشاركة التالية سأعلق بعض الشيء على الكود واشرح كيفيه اضافة الحزمة xFFmpeg.NET و التعامل معها لتثبيت حزمة xFFmpeg.NET في مشروعك قم بالتالي : [attachment=25362] [attachment=25363] الان وقد تم اضافة الحزمة لمشروعك ، اقم باستيراد مجالات الاسماء التالية : كود : Imports FFmpeg.NETالان كل ما عليك فعله عند الحاجة للتعامل مع الحزمة هو انشاء الكائنات التالية كود : Dim inputFile As New MediaFile(TxtSrc.Text) 'الملف المدخلالكائن من النوع MediaFile يمثل ملف مدخل او مخرج الكائن من النوع Engine هو المهم في هذه الحزمة التي يتم التعامل من خلاله مع الملفات يمكنك ايضا انشاء كائن من نوع ConversionOptions وتمريره الى كائن ffmpeg اذا اردت تعديل اعدادات الفديدو وهو امر اختياري الآن يمكنك اسناد الاحداث للكائن ffmpeg للاجراءات التي تقوم بتنفيذها : كود : AddHandler ffmpeg.Progress, Sub(s, ev) SetProgress(ev)OnError و OnComplete هم اجراءات عادية يتم استدعائها عند اكتمال العملية او عند حدوث خطأ اما SetProgress فهو اجراء يقوم باستدعاء اجراء مفوض للحدث تقدم عمليه التحويل لان عمليه التحويل تتم في Thread اخر ، لذلك فلا يمكننا اسناد حدث تقدم التحويل الى اجراء بدون تفويض ، الان السطر التالي هو الذي يقوم بامر التحويل : كود : Await ffmpeg.ConvertAsync(inputFile, outputFile)ولان عمليه التحويل بشكل غير متزامن يجب ان نستخدم الكلمة Await عند استدعاء امر التحويل ، ويجب ايضا استخدام الكلمة Async في تعريف الاجراء الذي يتم استدعائها فيه : كود : Private Async Sub BtnAction_Click(sender As Object, e As EventArgs) Handles BtnAction.Clickالان قم بتعريف الاجراءات التي يتم استدعائها بالاحداث: كود : 'حدث اكتمال التحويلكود : 'حدث عند حدوث خطأ في التحويلاما عند كيفية استخدام الاجراء المفوض للتعامل مع حدث تقدم عملية التحميل : كود : Delegate Sub SetProgressCB(ByVal ev As ConversionProgressEventArgs)يقوم الاجراء السابق باستدعاء OnProgress الآن يمكنك التعامل مع OnProgress كأنها حدث تقدم عمليه التحويل : كود : Private Sub OnProgress(ByVal e As ConversionProgressEventArgs)الامر بهذه البساطة فعلا. انصحكم بزيارة صفحتهم على GitHub هناك امثلة شارحة لكيفية الاستخدام اكثر: https://github.com/cmxl/FFmpeg.NET اذا كان هناك امر غير واضح انا جاهز تماما للرد على اسألتكم ان شاء الله تعالى السلام عليكم ورحمة الله وبركاته |