با سلام و احترام خدمت بازدیدکنندگان عزیز
آموزش خلاصه از طریقه استفاده مستقیم از نرم افزارهای کنسولی ویدئو و صوت - قسمت سوم
برای مشاهده قسمت اول به این پست مراجعه نمایید.
برای مشاهده قسمت دوم به این پست مراجعه نمایید.
--

پس حالا یادگرفتیم که چطور با سوئیچ ها و syntax هر ابزار کنسولی آشنا بشیم. راه دیگری وجود دارد آیا؟
بله. تقریبا تمام ابزارهای کنسولی یک راهنما (همون documentation یا manual یا readme و..) دارند بصورت pdf یا html یا txt همراهشون و حتی اگر همراهشون نداشته باشند حداقل در سایت سازندشون یکی پیدا می شود.

ترفند ذخیره راهنمای کدک توی فایل متنی جالب بود. میشه چند تر فند دیگه از کار با فایل های بچ معرفی کنید؟
1- آدرس دهی به فایل نرم افزار کنسولی یا فایل ورودی
برای آدرس دهی ما دربالا روشی را یاد گرفتیم که مناسب جاهاییست که فایل بچ در کنار نرم افزار کنسولی یا کنار فایل ورودی نیست. البته در همه شرایط هم کار می کند و به اصطلاح روش محکم کاری هست. اما اگر فایل بچ در کنار فایل اجرایی نرم افزار کنسولی یا فایل ورودی بود می توانستیم از دادن آدرس کامل صرف نظر کنیم تا مثلا سرعت نوشتن بچ بالاتر برود. یعنی راحت بنویسیم: flac.exe --help
pause
اما یادتان باشد قوانین escape کردن هنوز حاکم است. یعنی اگر در نام نرم افزار کنسولیتان یا فایل ورودی/خروجیتان و غیره کارکتر فاصله بود حتما باید escape کنید. به اینصورت: "fla c.exe" --help
pause
همین نحوه آدرس دهی برای فایل ورودی و خروجی و سایر آدرس ها هم حاکم هست.
یک امکان دیگر اینه که فایل بچ در پوشه ای باشه و نرم افزار کنسولی (یا فایل ورودی و غیره) در پوشه ای در زیرشاخه همون پوشه فایل بچ باشه.
برای مثال:
D:\_Tools_\_my builds\run-dcadec.bat
D:\_Tools_\_my builds\64bit\audio\dcadec.exe
که در اینصورت در فایل بچ بجای دادن آدرس کامل می تونید آدرس را تاجایی که شباهت دارند برش بزنید و خلاصه کنید.
یعنی در فایل bat بجای آدرس کامل dcadec.exe می توانیم بنویسیم: .\64bit\audio\dcadec.exe توجه کنید که قوانین escape کردن همیشه حاکم هستن.
نکته: همانطور که گفتیم آدرس دهی بصورت absolute path (یعنی نوشتن آدرس بصورت کامل) روشی هست که همیشه جواب میده اما دو روش دیگری که معرفی شد، قبلاها توسط برخی یوزرها گزارش شده که در برخی سیستم عامل های جدیدتر ویندوز، بخاطر مبحث permission پاسخ نداده و مشکل با run as administrator کردن فایل بچ حل شده!!!

2- متغیر ها در فایل های بچ
میشه ازشون برای موارد گوناگونی استفاده کرد اما مهمترینش به نظر شخصی اینجانب، افزایش خوانایی فایل بچ برای شخص هست. طریقه تعریف متغیر به این شکل است که اول کلمه set را می نویسیم، بعد فاصله می گذاریم، بعد نام متغیر را و بعد یک مساوی می گذاریم. مثال: Set ffmpeg= و جلوی مساوی هرچیزی بگذاریم تا انتهای اون خط و به شرط نبودن کارکترهای خاص، میشود مقدار اون متغیر. از اینجا برای استفاده از متغیری که تعریف کردیم کافیه نام متغیر را بین دو علامت درصد قرار بدیم و در محل دلخواه قرارش بدیم. مثال از یک فایل بچ بدون استفاده از متغیر: .\64bit\video\ffmpeg.exe -i "D:\_samples_\sample source.avi" -pass 1 -map 0:v:0 -c:v libx264 -preset slow -x264opts bitrate=760:ref=4 -y nul.mkv
.\64bit\video\ffmpeg.exe -i "D:\_samples_\sample source.avi" -pass 2 -map 0:v:0 -c:v libx264 -preset slow -x264opts bitrate=760:ref=4 -map 0:a:0 -c:a libfdk_aac -b:a 226K -channels 6 -y "D:\_samples_\sample source.avi_encoded.mkv"
همین فایل با کمک متغیر: set ffmpeg=.\64bit\video\ffmpeg.exe
set infile=D:\_samples_\sample source.avi
set vcodec=-map 0:v:0 -c:v libx264 -preset slow -x264opts bitrate=760:ref=4
set acodec=-map 0:a:0 -c:a libfdk_aac -b:a 226K -channels 6

"%ffmpeg%" -i "%infile%" -pass 1 %vcodec% -y nul.mkv
"%ffmpeg%" -i "%infile%" -pass 2 %vcodec% %acodec% -y "%infile%_encoded.mkv"
مشاهده کنید خوانایی و ویرایش کدام یک بیشتر و راحت تر هست. به escape کردن های انجام شده نیز توجه کنید که در خود متغیر تعریف نکردیم.

3- معرفی یک متغیر کاربردی پیش فرض
فرض کنید یک فایل بچ بی نقص نوشتید برای تبدیل فایل ورودی تان از فرمت ایکس به فرمت وای. و این بچ تنها مخصوص یک فایل نیست و برای فایل های مخصوصی دائما عملی می کنید. مثلا برای فایل هایی که با گیرنده دیجیتال خودتان ضبط می کنید. و چون اون فایل ها از یک دستگاه ضبط می شن و مشخصات یکسانی دارند تنظیمات فایل بچ را دست نمی زنید. فقط هر بار، مجبورید فایل بچ را باز کنید و آدرس فایل ورودی/خروجی را تغییر بدید. خسته کنندست نه؟ اینکه تنها برای نام فایل مجبور باشید هر دفعه...
خوشبختانه یک متغیر کاربردی در ویندوز تعریف شده هست به اسم1%. با استفاده از این متغیر و modifierهای دیگری که بسته به این متغیر مقدارشون تعیین می شه (به نام فایل خروجی در مثال پائین دقت کنید)، دیگر لازم نیست برای هر فایل ورودی حتی فایل بچ را باز کنید. تنها کافیست فایلی که می خواهید تبدیل کنید را بکشید و روی آیکن فایل بچ رها کنید: SET FFmpeg=D:\_Tools_\_my builds\64bit\video\ffmpeg.exe

"%FFmpeg%" -i %1 -map 0:v:0 -map 0:a:0 -target pal-dvd -y "%~dpn1_encoded.mpg"
Pause
در مثال بالا، فایل خروجی همنام فایل ورودی (به اضافه ای _encoded در انتهای نامش) و در کنار خود فایل ورودی ایجاد می شود. مهم نیست که فایل بچ در کجا قرار دارد.

--پایان قسمت سوم - برای مشاهده قسمت چهارم (پایانی) به این پست مراجعه نمایید.