LOLSKATER
08-06-2012, 10:29
ولكن قبل شرح هذا الأمر يجب أن نشرح أمر مهم جدا وهو الـ piping.
"الضخ" أو الـ piping هي آلية لإرسال عناصر مخرجات برنامج معين إلى برنامج آخر. قد تكون مخرجات البرنامج الأول عناصر نصية (ascii) مثل النصوص العادية وملفات النصوص txt
أو ثنائية (binary). مثل الصور والصوتيات والفيديو.
ويمكن استخدام الخاصية هذه عن طريق رمز الأنبوبة " | "
1. أمر More
وهو يفيد في تقسيم مخرجات الأوامر إلى صفحات لتسهيل قراءتها على دفعات، فمثلا:
عند كتابة أمر المساعدة في إنكودر x264
x264 --fullhelp
فسيرمي بكامل نص المساعدة إلى الكونسول دون أن تقرأه على دفعات، حيث ستضطر إلى الطلوع للأعلى عن طريق الفأرة أو ما شابه.
ولكن عند استخدام هذا الأمر وآلية استخدامه كالتالي:
x264 --fullhelp | more
فسيطبع النص بقدر حجم نافذة محرر الأوامر، ويمكنك بعد قراءة الدفعة الأولى (أو الصفحة الأولى) الضغط على زر مسافة لكي ينتقل للصفحة الثانية، أو زر Enter لعرض سطر إضافي آخر. ويمكن الخروج عن طريق ضغط حرف Q أو ctrl+c
2. أمر Clip:
ووظيفته هي وضع النصوص في الذاكرة حيث يمكن بعد ذلك لصقها في أي مكان آخر عن طريق ctrl+v أو أي آلية أخرى. ويستخدم كالتالي على سبيل المثال:
x264 --fullhelp | clip
مثال آخر:
dir /x /b | clip
ولنسخ محتويات ملف نصي إلى الذاكرة:
clip < timecodes.txt
3. أمر Dir
ويستخدم هذا الأمر لاستعراض الملفات داخل مجلد معين
dir /?
4. مزيد من المعلومات عن الـضخ piping والـتحويل redirecting:
تسمى عادة مخرجات الأوامر التي تطبع على الشاشة بـ standard output. ويعد standard output أو اختصاراً stdout أحد أجهزة الكونسول الثلاثة. وهي:
1. standard input أو stdin، في الحالة الطبيعية يقوم باستقبال أوامر المتسخدم أو استقبال مخرجات برنامج آخر. فعندما تشغل برنامج معين، ويعطيك البرنامج خيارات yes/no فهو قد فتح جهاز الـ stdin.
2. standard output أو stdout، ويعد مسؤولا عادةً عن طباعة المخرجات على شاشة الكونسول.
3. standard error أو stderr، ويعد شبه stdout ولكنه مسؤول عن طباعة أوامر الخطأ أو مؤشرات التحميل loading أو العدادات، وهو غير قابل للتحويل أو النسخ للذاكرة بطريقة مباشرة عن طريق الـ piping أو redirecting.
والآن عن الـ redirecting:
يمكن تحويل مخرجات الأوامر التي تستخدم جهاز stdout إلى ملفات عن طريق رمز "أكبر من"
<
فمثلا لحفظ (توجيه/تحويل) مخرجات أمر x264 --fullhelp لملف نصي يمكن استخدام الرمز بالشكل التالي:
x264 --fullhelp >file.txt
ولتوجيه محتويات ملف نصي إلى stdin لبرنامج معين يتم استخدام رمز "أصغر من"
more < timecodes.txt
الكثير منا يستخدم الـ piping عند إنتاج 10 بت أو استخدام إنكودر 64-bit مع avisynth 32-bit، ففي هذه الحالة يتم استخدام stdout لبرنامج avs2yuv لأخذ البكسلات الخام ذات الصيغة الثنائية binary ومن ثم توجيهها عن طريق الضخ piping للـ stdin الخاص ببرنامج x264.
ويمكن استخدام الضخ لكثير من البرامج على نفس الشاكلة.
فبعض البرامج لا تقبل إلا صيغة معينة، مثل بعض إنكودرات الصوت لا تقبل إلا أن يكون الصوت uncompressed wave أو يسمى PCM wave.
في هذه الحالة يلجأ الكثير إلى حفظ ملف wav ومن ثم استخدامه مع البرنامج القاصر. ولكن لا داعي لهذا مع وجود خاصية الضخ.
على سبيل المثال:
برنامجي neroaac الخاص بضغط mpeg-4 audio و oggenc الخاص بضغط صوتيات كودك vorbis.
هذان البرنامجان لا يقبلان إلا صيغة PCM wav، لذا يمكننا استخدام أي ديكودر كوماندلاين، على سبيل المثال ffmpeg. بهذه الطريقة:
ffmpeg -i myfile.ac3 -f wav - | oggenc -q 2 -o output.ogg -
حيث علامة الشرطات تفيد كتابة المخرج إلى الجهاز المناسب، فـ ffmpeg سيكتب المخرج في stdout، ورمز الضخ سيقوم بتوجيه الـ stdin إلى برنامج آخر ورمز الـ "-" في oggenc يفيد باستقبال الصوت من stdin الموجه من برنامج آخر.
وفي NeroAac:
ffmpeg -i myfile.ac3 -f wav - | neroaacenc -q 0.3 -if - -of output.mp4
5. أمر findstr
ووظيفة هذا الأمر هي البحث في النصوص عن أنماط معينة، وهو بشكل افتراضي يستقبل النصوص من stdin.
فعلى سبيل المثال تريد أن تبحث عن كلمة معينة في الـ help الخاص ببرنامج معين، لنقل على سبيل المثال x264
ونريد ان نبحث عن وظيفة أمر qcomp وقيمته الافتراضية. نكتب التالي:
x264 --fullhelp | findstr qcomp
الناتج:
--qcomp <float> QP curve compression [0.60]
6. أمر Echo
وهذا الأمر له وظائف عديدة، فهو بشكل أساسي يقوم بإخفاء أو إظهار الجزء الذي يظهر المجلد الحالي،
مثلا نحن حاليا في مجلد
c:\windows>
فكتابة أمر Echo OFF سيقوم بإخفاء جزء وسيظهر المؤشر في أول السطر. وأمر Echo ON يعيد السلوك الافتراضي لمحرر الأوامر.
كما يقوم الأمر كذلك بطباعة أي نص يأخذه. مثلا:
echo Hello World!
سيطبع على الشاشة عبارة Hello World!
وإذا تم تنفيذ الأمر بدون إعطائه أي نص فسيقوم بعرض حالة الـ echo الحالية:
C:\Windows>echo
ECHO is on.
ويمكن الاستفادة من الأمر في أشياء كثيرة، فعلى سبيل المثال، لا داعي لأن تفتح المفكرة لكتابة سكربت avs من سطر واحد، يمكنك كتابة السكربت مباشرة من الدوس، مثلاً:
echo ffvideosource("episode1.mp4") >EP1.avs
وسيكون لدينا ملف الـ avs جاهز للعمل :)
ففي هذه الحالة لن يطبع الأمر ما أخذه على الشاشة،
بل سيتم تحويل المطبوع إلى ملف avs عن طريق خاصية التوجيه (تم شرحها سابقًا).
7. أمر for
هذا الأمر مهم جدا لتكرير أمر معين على مجموعة ملفات. فمثلا يمكنك عن طريقه إنتاج عدد هائل من الملفات بأمر واحد
وصيغته هي كالتالي:
for %d in (set) do command
%d عبارة عن متغير يتم أخذه بالمرو على قيم set
set: مجموعة من الملفات
command: الأمر
على سبيل المثال:
for %d in (*.mp4) do x264 --preset medium --tune animation --crf 26 -o "%d.mkv" %d
في هذا المثال، سيتم في كل مرة استبدال d% بملف من ملفات *.mkv الموجودة في المجلد حتى يمر عليها جميعا ثم يتوقف الأمر. أي سيقوم الأمر بتحويل جميع ملفاتmp4 الموجودة في المجلد الحالي إلى mkv. بالإعدادات:
--preset medium --tune animation --crf 26
يمكن قراءة المزيد عن إمكانيات أمر for الرائع عن طريق
for /?
وأي أسئلة عن أوامر أخرى سيتم الإجابة عليها. وسيتم إضافة أوامر قوية أخرى بفترات متقطعة.
"الضخ" أو الـ piping هي آلية لإرسال عناصر مخرجات برنامج معين إلى برنامج آخر. قد تكون مخرجات البرنامج الأول عناصر نصية (ascii) مثل النصوص العادية وملفات النصوص txt
أو ثنائية (binary). مثل الصور والصوتيات والفيديو.
ويمكن استخدام الخاصية هذه عن طريق رمز الأنبوبة " | "
1. أمر More
وهو يفيد في تقسيم مخرجات الأوامر إلى صفحات لتسهيل قراءتها على دفعات، فمثلا:
عند كتابة أمر المساعدة في إنكودر x264
x264 --fullhelp
فسيرمي بكامل نص المساعدة إلى الكونسول دون أن تقرأه على دفعات، حيث ستضطر إلى الطلوع للأعلى عن طريق الفأرة أو ما شابه.
ولكن عند استخدام هذا الأمر وآلية استخدامه كالتالي:
x264 --fullhelp | more
فسيطبع النص بقدر حجم نافذة محرر الأوامر، ويمكنك بعد قراءة الدفعة الأولى (أو الصفحة الأولى) الضغط على زر مسافة لكي ينتقل للصفحة الثانية، أو زر Enter لعرض سطر إضافي آخر. ويمكن الخروج عن طريق ضغط حرف Q أو ctrl+c
2. أمر Clip:
ووظيفته هي وضع النصوص في الذاكرة حيث يمكن بعد ذلك لصقها في أي مكان آخر عن طريق ctrl+v أو أي آلية أخرى. ويستخدم كالتالي على سبيل المثال:
x264 --fullhelp | clip
مثال آخر:
dir /x /b | clip
ولنسخ محتويات ملف نصي إلى الذاكرة:
clip < timecodes.txt
3. أمر Dir
ويستخدم هذا الأمر لاستعراض الملفات داخل مجلد معين
dir /?
4. مزيد من المعلومات عن الـضخ piping والـتحويل redirecting:
تسمى عادة مخرجات الأوامر التي تطبع على الشاشة بـ standard output. ويعد standard output أو اختصاراً stdout أحد أجهزة الكونسول الثلاثة. وهي:
1. standard input أو stdin، في الحالة الطبيعية يقوم باستقبال أوامر المتسخدم أو استقبال مخرجات برنامج آخر. فعندما تشغل برنامج معين، ويعطيك البرنامج خيارات yes/no فهو قد فتح جهاز الـ stdin.
2. standard output أو stdout، ويعد مسؤولا عادةً عن طباعة المخرجات على شاشة الكونسول.
3. standard error أو stderr، ويعد شبه stdout ولكنه مسؤول عن طباعة أوامر الخطأ أو مؤشرات التحميل loading أو العدادات، وهو غير قابل للتحويل أو النسخ للذاكرة بطريقة مباشرة عن طريق الـ piping أو redirecting.
والآن عن الـ redirecting:
يمكن تحويل مخرجات الأوامر التي تستخدم جهاز stdout إلى ملفات عن طريق رمز "أكبر من"
<
فمثلا لحفظ (توجيه/تحويل) مخرجات أمر x264 --fullhelp لملف نصي يمكن استخدام الرمز بالشكل التالي:
x264 --fullhelp >file.txt
ولتوجيه محتويات ملف نصي إلى stdin لبرنامج معين يتم استخدام رمز "أصغر من"
more < timecodes.txt
الكثير منا يستخدم الـ piping عند إنتاج 10 بت أو استخدام إنكودر 64-bit مع avisynth 32-bit، ففي هذه الحالة يتم استخدام stdout لبرنامج avs2yuv لأخذ البكسلات الخام ذات الصيغة الثنائية binary ومن ثم توجيهها عن طريق الضخ piping للـ stdin الخاص ببرنامج x264.
ويمكن استخدام الضخ لكثير من البرامج على نفس الشاكلة.
فبعض البرامج لا تقبل إلا صيغة معينة، مثل بعض إنكودرات الصوت لا تقبل إلا أن يكون الصوت uncompressed wave أو يسمى PCM wave.
في هذه الحالة يلجأ الكثير إلى حفظ ملف wav ومن ثم استخدامه مع البرنامج القاصر. ولكن لا داعي لهذا مع وجود خاصية الضخ.
على سبيل المثال:
برنامجي neroaac الخاص بضغط mpeg-4 audio و oggenc الخاص بضغط صوتيات كودك vorbis.
هذان البرنامجان لا يقبلان إلا صيغة PCM wav، لذا يمكننا استخدام أي ديكودر كوماندلاين، على سبيل المثال ffmpeg. بهذه الطريقة:
ffmpeg -i myfile.ac3 -f wav - | oggenc -q 2 -o output.ogg -
حيث علامة الشرطات تفيد كتابة المخرج إلى الجهاز المناسب، فـ ffmpeg سيكتب المخرج في stdout، ورمز الضخ سيقوم بتوجيه الـ stdin إلى برنامج آخر ورمز الـ "-" في oggenc يفيد باستقبال الصوت من stdin الموجه من برنامج آخر.
وفي NeroAac:
ffmpeg -i myfile.ac3 -f wav - | neroaacenc -q 0.3 -if - -of output.mp4
5. أمر findstr
ووظيفة هذا الأمر هي البحث في النصوص عن أنماط معينة، وهو بشكل افتراضي يستقبل النصوص من stdin.
فعلى سبيل المثال تريد أن تبحث عن كلمة معينة في الـ help الخاص ببرنامج معين، لنقل على سبيل المثال x264
ونريد ان نبحث عن وظيفة أمر qcomp وقيمته الافتراضية. نكتب التالي:
x264 --fullhelp | findstr qcomp
الناتج:
--qcomp <float> QP curve compression [0.60]
6. أمر Echo
وهذا الأمر له وظائف عديدة، فهو بشكل أساسي يقوم بإخفاء أو إظهار الجزء الذي يظهر المجلد الحالي،
مثلا نحن حاليا في مجلد
c:\windows>
فكتابة أمر Echo OFF سيقوم بإخفاء جزء وسيظهر المؤشر في أول السطر. وأمر Echo ON يعيد السلوك الافتراضي لمحرر الأوامر.
كما يقوم الأمر كذلك بطباعة أي نص يأخذه. مثلا:
echo Hello World!
سيطبع على الشاشة عبارة Hello World!
وإذا تم تنفيذ الأمر بدون إعطائه أي نص فسيقوم بعرض حالة الـ echo الحالية:
C:\Windows>echo
ECHO is on.
ويمكن الاستفادة من الأمر في أشياء كثيرة، فعلى سبيل المثال، لا داعي لأن تفتح المفكرة لكتابة سكربت avs من سطر واحد، يمكنك كتابة السكربت مباشرة من الدوس، مثلاً:
echo ffvideosource("episode1.mp4") >EP1.avs
وسيكون لدينا ملف الـ avs جاهز للعمل :)
ففي هذه الحالة لن يطبع الأمر ما أخذه على الشاشة،
بل سيتم تحويل المطبوع إلى ملف avs عن طريق خاصية التوجيه (تم شرحها سابقًا).
7. أمر for
هذا الأمر مهم جدا لتكرير أمر معين على مجموعة ملفات. فمثلا يمكنك عن طريقه إنتاج عدد هائل من الملفات بأمر واحد
وصيغته هي كالتالي:
for %d in (set) do command
%d عبارة عن متغير يتم أخذه بالمرو على قيم set
set: مجموعة من الملفات
command: الأمر
على سبيل المثال:
for %d in (*.mp4) do x264 --preset medium --tune animation --crf 26 -o "%d.mkv" %d
في هذا المثال، سيتم في كل مرة استبدال d% بملف من ملفات *.mkv الموجودة في المجلد حتى يمر عليها جميعا ثم يتوقف الأمر. أي سيقوم الأمر بتحويل جميع ملفاتmp4 الموجودة في المجلد الحالي إلى mkv. بالإعدادات:
--preset medium --tune animation --crf 26
يمكن قراءة المزيد عن إمكانيات أمر for الرائع عن طريق
for /?
وأي أسئلة عن أوامر أخرى سيتم الإجابة عليها. وسيتم إضافة أوامر قوية أخرى بفترات متقطعة.