تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تحويل الفيديوهات باستخدام حزمة xFFmpeg.NET
#1
Video 
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته 

الموضوع بلغة C#

هذا مثال لاستخدام حزمة xFFmpeg.NET الخاصة بالتعامل مع الفيديوهات

الحزمة ما هي الى غطاء Wrapper للتعامل مع ملف FFmpeg.exe الشهير الذي يمكنه عمل كل شيء بالفيديوهات تقريبا
في الحقيقة يمكنك تحويل الفيديوهات عن طريق FFmpeg.exe مباشرة ، ولكن التعامل لن يكون بالبساطة المطلوبة ، كنت طرحت في المنتدى القديم استخدام FFmpeg.exe مباشرة عن طريق Shell .

xFFmpeg.NET تجعل التعامل مع الفيديوهات اسهل ما يمكن ، فهي تمكنك من تحويل الفيديوهات والصوتيات بجميع صيغها تقريبا وكذلك قصها او تعديل اعداداتها.

تحتاج لتنزيل FFmpeg.exe من موقعهم الرسمي ، بعد ذلك قم بفك الضغط وستجد ملف  FFmpeg.exe داخل مجلد bin
 
انسخ FFmpeg.exe الى مجلد bin\Debug في ملفات المشروع وسيعمل ان شاء الله تعالى

   
   
   
   

المثال:
 
.zip   FFmpegExVB.zip (الحجم : 147.1 ك ب / التحميلات : 38)  
الذي اقدمه لكم في غاية البساطة ، تقوم باختيار الملف المراد تحويله ووكذلك مسار واسم حفظه ثم اضغط حوّل وفقط 
شاهد تقدم عملية التحويل وكذلك معلومات اثناء التحويل
تقبل الله منا ومنكم الطاعات
في المشاركة التالية سأعلق بعض الشيء على الكود واشرح كيفيه اضافة الحزمة xFFmpeg.NET و التعامل معها


لتثبيت حزمة xFFmpeg.NET في مشروعك قم بالتالي :

   
   

الان وقد تم اضافة الحزمة لمشروعك ، اقم باستيراد مجالات الاسماء التالية : 


كود :
Imports FFmpeg.NET
Imports FFmpeg.NET.Events
Imports System.IO


الان كل ما عليك فعله عند الحاجة للتعامل مع الحزمة هو انشاء الكائنات التالية 


كود :
        Dim inputFile As New MediaFile(TxtSrc.Text) 'الملف المدخل
        Dim outputFile As New MediaFile(TxtDist.Text)'الملف النتيجة
        Dim ffmpeg As New Engine(FFmpegPath)'كائن التعامل مع الفيديو


الكائن من النوع MediaFile يمثل ملف مدخل او مخرج
الكائن من النوع Engine هو المهم في هذه الحزمة التي يتم التعامل من خلاله مع الملفات

يمكنك ايضا انشاء كائن من نوع ConversionOptions  وتمريره الى كائن ffmpeg اذا اردت تعديل اعدادات الفديدو وهو امر اختياري

الآن يمكنك اسناد الاحداث للكائن ffmpeg للاجراءات التي تقوم بتنفيذها :

كود :
        AddHandler ffmpeg.Progress, Sub(s, ev) SetProgress(ev)
        AddHandler ffmpeg.Complete, AddressOf OnComplete
        AddHandler ffmpeg.[Error], AddressOf OnError

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

الان قم بتعريف الاجراءات التي يتم استدعائها بالاحداث:

كود :
    'حدث اكتمال التحويل
   Private Sub OnComplete(ByVal sender As Object, ByVal e As ConversionCompleteEventArgs)
       MessageBox.Show("تم التحويل بنجاح")
   End Sub

كود :
   'حدث عند حدوث خطأ في التحويل
   Private Sub OnError(ByVal sender As Object, ByVal e As ConversionErrorEventArgs)
       MessageBox.Show($"حدث خطأ أثناء التحويل {e.Exception.ExitCode} : \n {e.Exception.Message}")
   End Sub

اما عند كيفية استخدام الاجراء المفوض للتعامل مع حدث تقدم عملية التحميل :

كود :
   Delegate Sub SetProgressCB(ByVal ev As ConversionProgressEventArgs)

   Private Sub SetProgress(ByVal ev As ConversionProgressEventArgs)
       If Me.progressBar1.InvokeRequired Then
           Invoke(New SetProgressCB(AddressOf SetProgress), ev)
       Else
           OnProgress(ev)
       End If
   End Sub

يقوم الاجراء السابق باستدعاء OnProgress الآن يمكنك التعامل مع OnProgress كأنها حدث تقدم عمليه التحويل :

كود :
   Private Sub OnProgress(ByVal e As ConversionProgressEventArgs)
       LblFrame.Text = $"إطار : {e.Frame}"
       LblFps.Text = $"{e.Fps} إطار/ث"
       LblBit.Text = $"{e.Bitrate} بت/ث"
       LblTime.Text = $"{e.ProcessedDuration.TotalSeconds}/{e.TotalDuration.TotalSeconds} ث"
       LblSize.Text = $"الحجم : " & (If(e.SizeKb < 1024, e.SizeKb & " ك.ب.", $"{e.SizeKb / 1024.0}  م.ب."))
       progressBar1.Maximum = CInt(e.TotalDuration.TotalSeconds)
       progressBar1.Value = CInt(e.ProcessedDuration.TotalSeconds)
   End Sub

الامر بهذه البساطة فعلا.

انصحكم بزيارة صفحتهم على GitHub هناك امثلة شارحة لكيفية الاستخدام اكثر:
https://github.com/cmxl/FFmpeg.NET

اذا كان هناك امر غير واضح انا جاهز تماما للرد على اسألتكم ان شاء الله تعالى
السلام عليكم ورحمة الله وبركاته
الرد }}}


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مشروع] تحويل الهجري الى ميلادي والميلادي الى هجري بشرط سعود 5 6,302 10-04-24, 12:44 AM
آخر رد: سعود
  استخراج سيريال الوندوز باستخدام ملف VBS abuzarei 0 329 17-08-23, 09:25 PM
آخر رد: abuzarei
Video خطوة خطوة كيفية طباعة الفاتورة باستخدام Crystal report ggtt17121985 0 553 08-06-23, 01:25 AM
آخر رد: ggtt17121985
  [VB.NET] برنامج تحويل النصوص بصوت عربي مسموع ثم حفظ الصوت بصيغة wav (تم اعادة الرفع) abo ragab 2 1,611 02-04-23, 10:21 PM
آخر رد: naz123
  [مشروع] مشروع شجرة الحسابات (دليل الحسابات) باستخدام VB.net أحمد النجار 21 22,353 08-10-22, 09:56 PM
آخر رد: asemshahen5
Photo [VB.NET] الرجاء من الاخوة( مساعدة ) برنامج ارشفة الكتروني باستخدام الماسح الضوئي braithbraith 0 1,026 19-09-22, 03:07 PM
آخر رد: braithbraith
Wink [مشروع] مشروع تحويل النص الى صوت مسموع والتحكم برفع الصوت وتغيير سرعته مع السورس كود ahmadpal 8 4,762 04-08-22, 05:08 AM
آخر رد: abo ragab
  [مشروع] تحويل الصور الى نصوص واستعادتها سعود 11 2,157 21-07-22, 05:46 AM
آخر رد: سعود
  [VB.NET] برنامج تحويل النصوص بصوت عربي مسموع ثم حفظ الصوت بصيغة wav abo ragab 3 1,562 01-07-22, 01:26 AM
آخر رد: abo ragab
  [VB.NET] مشروع محرر نصوص باستخدام الفيجوال بيسك كامل ومتاح للتحميل نسخة فيجوال بيسك 2019 العابث الاخير 0 1,550 24-02-22, 03:23 PM
آخر رد: العابث الاخير

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم