![]() |
|
تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) (/showthread.php?tid=4955) |
تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) - RaggiTech - 03-10-12 كاتب الموضوع : أنس محمود
بسم الله الرحمن الرحيم * عنوان الموضوع :- الجزء الثاني من مقال تحويل الفيديو في برامجك * مستوي المقال :- مبتدأ إلى متوسط * التقييم : ( متروك للقارئ ) - السلام عليكم ورحمة الله وبركاته أعضاء المنتدى الكرام ،،، ذكرت في المقال الأول طريقة لتحويل الفيديو عن طريق إرسال معاملات معينة إلى الملف ffmpeg.exe ، وكان مظهر المقال معقداً بعض الشيء ، وظهرت عدة مشاكل بخصوص المكتبة Convert.dll لذلك كان لابد من أن أقوم بكتابة هذه السطور لتوضيح الأمر بعض الشيء . (لذلك أريدك أن تنسى ما سبق وتركز معي فيما هو آت للفهم وليس الحفظ ) + أولاً :- الفكرة التي اعتمدت عليها في تحويل ملفات الـ Media :- ببساطة الفكرة هي الاعتماد على الملف ffmpeg.exe ، ( يعني هو الذي سيقوم بالتحويل وليس نحن ! ) ، فقط علينا أن نرسل له بعض المعاملات مع تشغيله ( تعلمون تشغيل الملفات بالدالة Shell() ) ، وهذه المعاملات تتضمن اسم الملف المدخل ( أو الملفات ، وستعرف لماذا لاحقاً ) ، وخصائص الملف المخرج ( الصوت والفيديو ) ، ثم اسم الملف المخرج ، ــ ويمكنك معرفة كافة هذه المعاملات بالنقر المزدوج على الملف ffmpeg.exe ( لن تستطيع القراءة إلا لو كنت صاروخ !! ) لذلك قمت برفع ملف Txt بهذه المعاملات ، * ومن تلك المعاملات ( يجب أن يُتبع كل معامل بمسافة " " وكذلك القيمة التي تليه ، تتبع بمسافة ) :- كود : -i "Short Path"==> لإدخال مسار الملف بالطريقة القصيرة ( لا أجد مانع من استخدام المسار الطويل ، ولكن للاحتياط فقط ) ._-_-_1. يمكنك تكرار المعامل –i أكثر من مرة ، فقد تكون بحاجة لدمج ملف فيديو بدون صوت ، بملف صوت ، فتكتب المعامل –i مرة لمسار الفيديو و مرة لمسار الصوت ، وهكذا ... _-_-_2. للحصول على المسار القصير ( كما قلت للاحتياط فقط ، فيمكنك الاستغناء عن هذه الخطوة ) ، يمكنك ذلك عن طريق الدالة GetShortName() بعد تعريف الدوال التالية :- كود : Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Longكود : -i "C:\1.wav" -y "C:\1.mp3"كود : Shell("C:\ffmpeg.exe -i ""C:\1.wav"" -y ""C:\1.mp3""", _ تلاحظ فتح نافذة الملف ffmpeg.exe ثم تحويل الملف ثم غلق النافذة وكما قلت سابقا أنك بحاجة إلى أن تكون مثل الصاروخ حتى تتمكن من قراءة ما هو مكتوب !! ، ومع ذلك قد تكون بحاجة إلى قراءة ما يرجعه الملف ffmpeg.exe فقد تريد معرفة تقدم التحويل أو سبب المشكلة في حال ظهور مشكلة ، لذلك فإن الحل هو اللجوء للفئة DOS_Outputs . + الفئة DOS_Outputs :- تقوم الدالة ExecuteCommand داخل الفئة DOS_Outputs بنفس عمل الدالةshell() تقريبا ، ولكنها تعيد قيمة من النوع String تمثل النص الذي يرجعه الملف الذي تقوم بارسال سطر الأوامر إليه ( في مثالنا ffmpeg.exe )، حمل الفئة DOS_Outputs ثم قم بإضافتها من قائمة Project ==> Add Existing File ولا تنس إضافة مرجع مجال الأسماء Microsoft.VisualBasic.Compatibility من Project ==> Add Reference ثم من تبويب .Net أختر مجال الأسماء ، جرب مثلاً تحويل نفس الملف السابق ولكن بالدالة ExecuteCommand ، قم بإنشاء كائن جديد من الفئة ، ثم استدع الدالة وأرسل لها المعاملات السابقة ، واستقبل ناتج الدالة في MsgBox() مثلاً :- كود : Dim Video As New DOS_Outputs() تلاحظ ظهور رسالة MsgBox بحالة التحويل وما تم فيها من عمليات ، شيء آخر يدفعك لاستخدام الفئة DOS_Outputs هو الحدث ReceiveOutputs الذي يطلق عند استقبال مخرجات من الملف ffmpeg.exe ، وتستقبل من هذا الحدث وسيطة تمثل النص الذي يعيده الملف ، فيمكنك عرضها مثلاًً في TextBox يبين تقدم العملية مثلا ، أو إظهار طبيعة المشكلة مثلاً :- كود : WithEvents Video As New DOS_Outputs()شيء آخر أردت توضيحه ، إذا استصعبت الطريقة السابقة في الحصول على سطر المعاملات اللازم إرساله إلى الملف ffmpeg.exe ، فإن الفئة AVC تسهل عليك ذلك ، حيث كل ما عليك هو إنشاء كائن جديد من الفئة مع إرسال مسار الملف ffmpeg.exe إلى مشيد هذه الفئة ، ثم إسناد الخصائص التي تريدها ، ثم استقبال سطر الأوامر من الدالة GetCommandLine() ، حمل الفئة AVC ثم أضفها لمشروعك من قائمة Project ==> Add Existing File ، ثم راقب معي ما يلي لتحويل الملف السابق باستخدام الفئة AVC :- كود : Dim Video As New DOS_Outputs()إلى هنا تقريباً نصف الطريق في عملية تحويل الفيديو ، بقي أن أنوه أنه أحيانا يمكنك الاكتفاء بتحديد الملف المدخل والمخرج ، دون باقي الخصائص ، على أن تترك الملف ffmpeg.exe يحددها تلقائياً ، بينما أحياناً عليك معرفة الخصائص اللازمة لكل نوع من أنواع الفيديو لتتمكن من التحويل إليه ، وهذه الخصائص يمكنك معرفتها من أي برنامج تحويل فيديو ( وأنا أفضل Total Video Converter ) وهذا مثال على ما قمنا بعمله ( تحويل ملف wav إلى mp3 ) ، قم بكتابة سطر الأوامر ( أو اضغط على الزر"الحصول على سطر الأوامر من الفئة AVC" ) ثم اضغط على أحد الأزرار للتجربة ، سأتركك تصمم ما يعجبك ، مادمت قد علمت الطريقة ، ولا تحرمونا من إبداعاتكم هذا كل شيء ،، وبإذن الله أنا جاهز لأي سؤال ،، ولكن أرجو عدم تعجل الإجابة ، نظراً لانشغالي بعض الوقت ،، أخوكم / أنس محمود ،، RE: تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) - abulayth - 10-12-14 شكرا لك يعطيك العافية |