المتطلبات:-
1- avisynth النسخة الرسمية 2.5 او 2.6 الفا وما فوقها، او نسخ MT الغير رسمية (يعني اي نسخة) "اجباري وجود avisynth" وكذلك avisynth 64 اي نسخة ايضا (اختياري)
2- الـ plugin من
هنا او ان كان لديك مجلد فلاتري فلن تحتاجه لانه موجود بهم، مجلد فلاتري
32 و الـ64 افضل نسخة وملحقاتها والفلاتر (من ضمنهم MP_pipeline)
هنا
فكرة عمل ومزايا وطريقة استخدام MP_pipeline:-
الفكرة هي تقسيم السكربت الى جزئين على الاقل ونقل الفريمات بينهم (او ما يسمى Clip) بعملية تدعى pipe اي الانبوبة، اي كأنما هنالك انبوبة بين سكربتين افس يعملان بنفس الوقت
لانه كما هو معروف في الحالة العادية يتشارك الافس والانكودر بنفس العملية بالرام، وبما ان الافس الرسمي 32 لذا يجب استعمال انكودر 32 وكما هو معروف الانكودر يحتاج رام وخصوصا في الـ 10 بت والابعاد الكبيرة، عدا الافس الذي حاجز له 512 افتراضيا، وان تجاوزا (اي الانكودر والافس) حد ال4 جيجا ستتولد مشاكل وتوقفات مفاجئة
كان سابقا يستخدمون ادوات بها pipe بين الانكودر والسكربت، وكذلك ليستعملوا انكودر 64
لكنها مزعجة ومملة، تحتاج ان تضبط معدل الفريمات والابعاد يدويا
لكن الـ
MP_pipeline سهلة ومريحة

وبها مزايا اكثر

وتقدر تتحكم بها من داخل السكربت
طيب، كما كنت اقول، تتلخص الية عملها بنقل الفريمات (Clips) من سكربت لاخر، طبعا كل سكربت سيكون له عملية مستقلة بالرام، مما يعني ممكن تعطيه الى حد 4 جيجا
فمثلا لاستعمال بسيط لـ MP_pipeline سيكون هكذا
كود:
MP_Pipeline("""
### platform: win32
سكربتك المعتاد
### ###
""")
سهلة صح؟
لنشرح قليلا عن الاوامر اعلاه
### platform: win32 هذا لتبلغ به MP_Pipeline عن الافس الذي تستعمله في هذا السكربت
اي ممكن تحط 64 ان كان لديك 64 وتريد استخدامه في هذا السكربت (او ما يسمى بالبلوك في MP_Pipeline) وممكن ما تضع امر platform اساسا وهنا MP_Pipeline سيختار حسب الانكودر او البرنامج العارض (لا انصح بهذا)
### ### توضع في نهاية كل سكربت (او بلوك) لكي تعطيه كيان في عمليات الرام في الجهاز
""") نهاية عمليات MP_Pipeline والجدير بالذكر هنا ان ما قبل الـ MP_Pipeline سيتم تجاهله بالكامل
لكن ما بعد عمليات MP_Pipeline سيكون ضمن الافس المتصل بالانكودر، لذا يفضل ان لا تضع اوامر ثقيلة ما بعد عمليات MP_Pipeline
والجدير بالذكر ايضا ان ما بعد MP_Pipeline سيكون افس 32 او افس 64 حسب الانكودر (البرنامج) المستعمل، لذا ضعوا هذا في حسبانكم
و هنالك ملاحظة حول الصوت، لن يتم نقله لما خارج MP_Pipeline لانها تنقل الفريمات (Clips) كما قلت اعلاه لذا ضع
في نهاية السكربت بعد عمليات MP_Pipeline
هذا ان كنت تستعمل الصوت بالسكربت، لانه يمكنك التعامل مع الصوت خارج السكربت بشكل كامل تقريبا، من قص وانتاج وما الى ذلك
الفائدة من الاستعمال البسيط اعلاه كبيرة، ومنها استخدام انكودر 64 مع فلاتر ال32 (تحتاج افس 64 في هذه الحالة)
عزل عمليات الافس عن الانكودر لكي يعمل كل منهما براحته لتجنب المشاكل والتوقف المافجئ
توفير رام اكثر للافس والانكودر على حد سواء، ورام مفتوح للانكودر اذا كان 64
والجدير بالذكر هنا ان عمليات الـ 64 اسرع من الـ32 لان عمليات الـ32 تمر بعملية محاكاة
-------------
طيب الان لنفرض ان لديك سكربت تريد تقسيمه الى قسمين حقيقيين (الحقيقة سيكون ثلاثة مع ما موجود خارج MP_Pipeline والذي سيشترك مع الانكودر في نفس عملية الرام)
سيكون التقسيم هكذا
كود:
MP_Pipeline("""
### platform: winXX
الجزء الاول من السكربت
### ###
### platform: winXX
الجزء الثاني من السكربت
### ###
""")
AudioDub()
تلاحظون اني وضعت XX في مكان ال32 او ال64 اي لكم الحرية هنا
AudioDub حطيته لتوضيح مكان وضعه لا اكثر
الباقي اظن واضح، مع ملاحظة شيء مهم وهو ان كنت تستدعي بعض الفلاتر الخارجية عن طريق LoadPlugin او Import او ما الى ذلك يجب ان تعيدها في الجزء الثاني من السكربت (ان كنت تحتاجها فيه)
مع ان هنالك طريقة لمشاركة جزء معين بين البلوكات (اجزاء السكربت) موجودة ضمن دليل استخدام MP_Pipeline لو تريد اطلع عليها (ليست شيء اساسي انما كمالي مساعد لتقليل الاوامر، اي تجنب تكرار نفس الامر في كل بلوك)
-----------
لمزيد من الامثلة والفاصيل واستخدام الرام لكل بلوك
http://amjadsony.wordpress.com/2012/...-1/#comment-42
---------
نأتي الان للكاش، من مزايا MP_Pipeline الجميلة انك ممكن تخلق كاش بها
الكاش يعني فريمات تحفظ ليتم استخدامها في البلوك القادم من اجل توفير استخدام الcpu وزيادة الاداء ايضا
على سبيل المثال
كود:
MP_Pipeline("""
### platform: win32
الجزء الاول من السكربت
### ###
### platform: win64
SetMemoryMax(128)
### prefetch: 46, 32
### ###
### platform: win32
الجزء الثاني من السكربت
### ###
### platform: win64
SetMemoryMax(128)
### prefetch: 32, 24
### ###
""")
prefetch للتحكم بالكاش، الرقم الكبير هو عدد الفريمات بهذه العملية لهذا البلوك، والصغير هو الفريمات التي تم معالجتها لكن تم تخزينها في حال تم طلبها من فلتر او انكودر.
حددت الرام ب128 لانه كاف وزيادة على مجرد كاش بدون اي معالجة، واخترت 64 لانه اسرع، وكون البلوك لا يحتاج اي تغيير بالفريمات انما مجرد تخزينها ككاش فقط
ارقام الكاش لا يفضل زيادتها بشكل مبالغ فيه والا ستكون النتيجة عكسية
وهنا يفضل ان تقيس السرعة باستخدام avspmod من خلال analysis pass
او الافضل ان تستعمل
AVSMeter تجد شرح مبسط عنه هنا
http://www.mediafire.com/folder/oncgnmgaba7my/avspmod في ملف لتجربة وقياس سرعة الافس (الموجود به ليس احدث نسخة لذا حدثها من رابط دووم9 المرفق بالشرح)
ووضعت رقم الكاش باول بلوك اكبر من الرقم الموجود في اخر بلوك لان العمليات ستكون ابطئ كلما تقدمنا نحو الاسفل لذا الكاش هناك لن يكون له فائدة كبيرة، لهذا قللته
وفي المثال اعلاه سيكون عندنا 5 سكربتات (الاحرى عمليات بالجهاز)
الاولى هي الجزء الاول من السكربت
الثانية هي الكاش بينه وبين الثاني
الثالثة للجزء الثاني من السكربت
الرابعة كاش بين الثاني وبين عمليات ما بعد MP_Pipeline
الخامسة ما بعد MP_Pipeline والانكودر
-----------
هنالك مزايا اخرى لـ MP_Pipeline لكني لم اتعمق بها بعد، لاني ارى ان ما شرحته فوق اهم
عموما ممكن تراجع دليل استخدامها لتعرفها وتتعمق بها
---------------------
شيء خارج الموضوع شوية (الحقيقة له علاقة بالموضوع ايضا بسبب الكاش)
هنالك plugins تعمل كاش وتغير الكور (او الخيط) وهي SoraThread وكذلك ThreadRequest
اي ان وضعتها بين الفلاتر ستولد كاش وتغير الكور، لهذا ستلاحظ سرعة بدون التأثير على استهلاك المعالج
---------------------------------------
في النهاية احب اقول ان ليس كل السكربتات والفلاتر تحب الكاش الكبير
يجب ان تفحص قابلية سكربتك على وجود الكاش الكبير او الصغير
لهذا ضروري انك تستعمل
AVSMeter او المرور التحليلي بـ avspmod وذلك على الاقل في بداياتك مع التعامل مع الكاش سواء بـ MP_Pipeline او اي فلتر اخر به كاش
حتى يكون عندك خبرة بالامر
===============================================
---------------------------------------------------------------
الشرح تحت رخصة BSD
حول الرخصة:-
احب ابين شيء للجميع والحاضر يبلغ الغائب، الشروحات وكلامي كله برخصة BSD كما ذكرت بموضوع التداخل
وهذا يطبق بأثر رجعي على كل ما مضى، اي كل GPL قلته سابقا او خيرت الناس بينه وبين BSD صار كله BSD من هذه اللحظة، ولا يتم قبول اي عذر، حتى الجهل بوجود اعلاني هذا
طبعا لا استطيع ملاحقة كل الموجودين بالنت واجبارهم على الالتزام بالرخصة، ولكني لن ارضى وسيبقى هذا الشيء بذمتهم الى يوم الدين