تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر )
#1
كاتب الموضوع : أنس محمود


بسم الله الرحمن الرحيم

* عنوان الموضوع :- الجزء الثاني من مقال تحويل الفيديو في برامجك
* مستوي المقال :- مبتدأ إلى متوسط
* التقييم : ( متروك للقارئ )


- السلام عليكم ورحمة الله وبركاته أعضاء المنتدى الكرام ،،،

ذكرت في المقال الأول طريقة لتحويل الفيديو عن طريق إرسال معاملات معينة إلى الملف ffmpeg.exe ،
وكان مظهر المقال معقداً بعض الشيء ، وظهرت عدة مشاكل بخصوص المكتبة Convert.dll
لذلك كان لابد من أن أقوم بكتابة هذه السطور لتوضيح الأمر بعض الشيء .
(لذلك أريدك أن تنسى ما سبق وتركز معي فيما هو آت للفهم وليس الحفظ )


+ أولاً :- الفكرة التي اعتمدت عليها في تحويل ملفات الـ Media :-
ببساطة الفكرة هي الاعتماد على الملف ffmpeg.exe ، ( يعني هو الذي سيقوم بالتحويل وليس نحن ! ) ، فقط علينا أن نرسل له بعض المعاملات مع تشغيله ( تعلمون تشغيل الملفات بالدالة Shell() ) ، وهذه المعاملات تتضمن اسم الملف المدخل ( أو الملفات ، وستعرف لماذا لاحقاً ) ، وخصائص الملف المخرج ( الصوت والفيديو ) ، ثم اسم الملف المخرج ،
ــ ويمكنك معرفة كافة هذه المعاملات بالنقر المزدوج على الملف ffmpeg.exe ( لن تستطيع القراءة إلا لو كنت صاروخ !! ) لذلك قمت برفع ملف Txt بهذه المعاملات ،
* ومن تلك المعاملات ( يجب أن يُتبع كل معامل بمسافة " " وكذلك القيمة التي تليه ، تتبع بمسافة ) :-


كود :
-i "Short Path"==> لإدخال مسار الملف بالطريقة القصيرة ( لا أجد مانع من استخدام المسار الطويل ، ولكن للاحتياط فقط ) .
-y ==> للكتابة فوق الملف المخرج ( إن وُجد ).
-sameq==> ( لا أريد أن أترجمها إلى " استخدام نفس الميزة " ولكنها بالـ English 'Use Same Quality' ).
-an==> لإخفاء الصوت.
-vn==> لإخفاء الصورة ( الفيديو ) .
-b Number ==> لتحديد الـ Bit rate للفيديو .
-ab Number ==> لتحديد الـ Bit rate للصوت.
-r Number ==> لتحديد الـ Frame rate للفيديو.
-ar Number ==> لتحديد الـ Frame rate للصوت.
-ac 1 or 2 ==> لتحديد نوع الصوت ( 1 لـ Mono و 2 لـ Stereo ).
-s WidthxHight==> لتحديد الحجم مثل –s 800x600 .
-vcodec Codec Name==> لتحديد الـ codec للفيديو.
-acodec Codec Name==> لتحديد الـ codec للصوت.
-f Format==> لتحديد نسق التحويل.
-title "Title"==> لتحديد عنوان الفيديو.
-author "Author Name"==> لكتابة اسم المؤلف.
-copyright "Copy Right ©"==> لكتابة حقوق الطبع.
-comment "Comment"==> لكتابة تعليق عن الفيديو.
-album "Album name"==> لكتابة اسم الألبوم.
- وبعد كتابة ما تريده من المعاملات تقوم بكتابة مسار الملف الناتج بين علامتي "" .
+ ملاحظة هامة :-

_-_-_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
Function GetShortName(ByVal sLongFileName As String) As String
On Error Resume Next
Dim lRetVal As Long, sShortPathName As String, iLen As Integer
sShortPathName = Space(255)
iLen = sShortPathName.Length
lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen)
Return (sShortPathName) 'Left, lRetVal)
End Function
مثلاً لتحويل الملف "C:\1.wav" إلى "C:\1.mp3" بفرض وجود الملف ffmpeg.exe في المسار "C:\ffmpeg.exe" تكون المعاملات المطلوبة هي:


كود :
-i "C:\1.wav" -y "C:\1.mp3"
وللتجربة : قم بتشغيل الملف C:\ffmpeg.exe مع إضافة المعاملات السابقة عن طريق الدالة Shell() :- لاحظ أن الرمز " يكتب مزدوجاً داخل علامتي التنصيص "" هكذا """"


كود :
Shell("C:\ffmpeg.exe -i ""C:\1.wav"" -y ""C:\1.mp3""", _
AppWinStyle.MaximizedFocus, True)





تلاحظ فتح نافذة الملف 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(Video.ExecuteCommand("C:\ffmpeg.exe -i ""C:\1.wav"" -y ""C:\1.mp3"""))





تلاحظ ظهور رسالة MsgBox بحالة التحويل وما تم فيها من عمليات ،
شيء آخر يدفعك لاستخدام الفئة DOS_Outputs هو الحدث ReceiveOutputs الذي يطلق عند استقبال مخرجات من الملف ffmpeg.exe ، وتستقبل من هذا الحدث وسيطة تمثل النص الذي يعيده الملف ، فيمكنك عرضها مثلاًً في TextBox يبين تقدم العملية مثلا ، أو إظهار طبيعة المشكلة مثلاً :-


كود :
WithEvents Video As New DOS_Outputs()
Private Sub VideoOutputs_ReceiveOutputs(ByVal sender As Object, ByRef CommandOutputs As String)
Me.TextBox1.AppendText(CommandOutputs & vbCrLf)
End Sub
+ الفئة AVC :-
شيء آخر أردت توضيحه ، إذا استصعبت الطريقة السابقة في الحصول على سطر المعاملات اللازم إرساله إلى الملف ffmpeg.exe ، فإن الفئة AVC تسهل عليك ذلك ، حيث كل ما عليك هو إنشاء كائن جديد من الفئة مع إرسال مسار الملف ffmpeg.exe إلى مشيد هذه الفئة ، ثم إسناد الخصائص التي تريدها ، ثم استقبال سطر الأوامر من الدالة GetCommandLine() ،
حمل الفئة AVC ثم أضفها لمشروعك من قائمة Project ==> Add Existing File ،
ثم راقب معي ما يلي لتحويل الملف السابق باستخدام الفئة AVC :-


كود :
Dim Video As New DOS_Outputs()
Dim Line As New AVC("C:\ffmpeg.exe")
Line.SourceFile = "C:\1.wav"
Line.TargetFile = "C:\1.mp3"
Dim Cmd As String = Line.GetCommandLine(True)
MsgBox(Cmd) 'C:\ffmpeg.exe -i "C:\1.wav" -y "C:\1.mp3"
MsgBox(Video.ExecuteCommand(cmd))
تلاحظ بأن الرسالة الأولى تحوي نفس سطر الأوامر الذي استخدمناه سابقا ، ولكن من صنع الفئة AVC ، وهذه الطريقة قد تكون مفيدة لتسهيل العملية عليك في تخصيص خصائص معينة للصوت والفيديو ،
إلى هنا تقريباً نصف الطريق في عملية تحويل الفيديو ،
بقي أن أنوه أنه أحيانا يمكنك الاكتفاء بتحديد الملف المدخل والمخرج ، دون باقي الخصائص ، على أن تترك الملف ffmpeg.exe يحددها تلقائياً ، بينما أحياناً عليك معرفة الخصائص اللازمة لكل نوع من أنواع الفيديو لتتمكن من التحويل إليه ، وهذه الخصائص يمكنك معرفتها من أي برنامج تحويل فيديو ( وأنا أفضل Total Video Converter )
وهذا مثال على ما قمنا بعمله ( تحويل ملف wav إلى mp3 ) ،
قم بكتابة سطر الأوامر ( أو اضغط على الزر"الحصول على سطر الأوامر من الفئة AVC" ) ثم اضغط على أحد الأزرار للتجربة ،
سأتركك تصمم ما يعجبك ، مادمت قد علمت الطريقة ،
ولا تحرمونا من إبداعاتكم
هذا كل شيء ،،
وبإذن الله أنا جاهز لأي سؤال ،،
ولكن أرجو عدم تعجل الإجابة ، نظراً لانشغالي بعض الوقت ،،
أخوكم / أنس محمود ،،


الملفات المرفقة
.rar   converter.rar (الحجم : 85.63 ك ب / التحميلات : 92)
}}}
تم الشكر بواسطة:
#2
شكرا لك

يعطيك العافية
(( يَا أَيَّتُهَا النَّفْسُ الْمُطْمَئِنَّةُ ارْجِعِي إِلَى رَبِّكِ رَاضِيَةً مَرْضِيَّةً فَادْخُلِي فِي عِبَادِي وَادْخُلِي جَنَّتِي ))

}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! أنس محمود 10 7,837 19-07-22, 12:15 AM
آخر رد: StartLight4000
  [شرح] اتصال بقاعدة بيانات اكسيس , اضافة بيان , تعديل بيان , حذف بيان , عرض البيانات . ahmed salam 25 38,259 23-02-22, 06:04 PM
آخر رد: رضوان الجماعي
  تحويل Interface الي دوال API silverlight 1 3,415 24-11-21, 04:15 PM
آخر رد: yassoo1985
  تحويل النص إلى كلام بالعربي دون الاتصال بالأنترنت ابو ليلى 15 10,145 20-09-20, 05:27 AM
آخر رد: kingofchess
Star [مقال] كيفية تحويل اسعار العملات بإستخدام Yahoo Exchange Rates Web Service Programmation 9 8,962 22-02-20, 12:58 PM
آخر رد: دمعة المقهور
  شرح انشاء برنامج تحويل صيغ الملفات الصوتيه CLARO 10 6,972 16-11-18, 04:41 PM
آخر رد: anassss
  حساب قيمة معادلة(اقصد صيغة دون مجاهيل) مكتوبة بالتكست : الجزء الخامس والاخير محمد شريقي 4 4,521 23-02-18, 10:44 PM
آخر رد: العواد الصغير
  [درس فيديو] شرح ربط البرنامج بقاعدة بيانات, إدراج حذف تعديل جلب البيانات ( بدون أن تكتب سطر واحد) عبدالله الدوسري 4 6,457 08-02-18, 12:55 AM
آخر رد: Ameer Eagle
  مقدمة إلي إخفاء المعلومات - الجزء الأول silverlight 5 4,155 07-01-17, 10:44 PM
آخر رد: Basil Abdallah
  مقدمة إلي إخفاء المعلومات - الجزء الثاني silverlight 1 3,026 06-01-17, 11:52 AM
آخر رد: silverlight

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


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