آموزش - مالتی مدیا -نرم افزار

وبلاگ شخصی محمدرضا بهرامی

آموزش - مالتی مدیا -نرم افزار

وبلاگ شخصی محمدرضا بهرامی

آموزش و آشنایی با نرم افزار FFmpeg – قسمت چهارم – تعیین کدک ها

با سلام و احترام خدمت بازدیدکنندگان عزیز

آموزش و آشنایی با نرم افزار FFmpeg – قسمت چهارم – تعیین کدک ها
برای مشاهده قسمت اول به این پست مراجعه نمایید.
برای مشاهده قسمت دوم به این پست مراجعه نمایید.
برای مشاهده قسمت سوم به این پست مراجعه نمایید.

تعیین کدک‌ها:
کُدِک برای اِنکُد و دیکُد استریم‌ها با سوئیچ -c یا نام دیگرش یعنی -codec تعیین می‌شود. این سوئیچ اگر بعنوان ورودی استفاده بشود دیکدر را برای یک (نوع) استریم از اون فایل ورودی خاص مشخص می‌کند. انتخاب دیکدر معمولا چیزیه که موارد نادری بهش احتیاج پیدا می‌شود. تا بحال برای اینجانب که پیش نیامده!
و اما انتخاب انکدر، با مثال‌های زیر پیش می‌رویم. فایلمان همان فایل mkv هست که در قسمت " مدیریت استریم‌ها " مشخصاتش را ذکر کردیم و باهاش کار می‌کردیم.
در این مثال تصویرش و اولین استریم صدایش را می‌گیریم و به ترتیب به h265 وopus تبدیل می‌کنیم: FFmpeg -i "file1.mkv" -map 0:v:0 -map 0:a:0 -codec:v libx265 -b:v 1M -codec:a libopus -b:a 192K -y "file1_encoded.mkv" نکته متفرقه: مقدار 1M برای سوئیچ -b:v می‌گوید نرخ بیت تصویر را یک مگابیت در ثانیه ( Mb/s ) در نظر بگیر. که برابر است با 1000K ( کیلوبیت در ثانیه ) و برای خلاصه نوشتن از واحد M استفاده کردیم. در واقع این سلیقه برنامه نویسان FFmpeg است که امکان استفاده از واحدها را هم قرار داده‌اند. وگرنه از دید برنامه نویسی کار سختی نیست اصلا.
در این مثال تصویر فایل1 و هر دو استریم صدایش را به ترتیب به h265 و opus تبدیل می‌کنیم: FFmpeg -i "file1.mkv" -map 0:v:0 -map 0:a -codec:v libx265 -b:v 1M -codec:a libopus -b:a 256K -y "file1_encoded.mkv" (در مثال بالا هر دو استریم صدایش با یک کدک و مشخصات تبدیل شدند)
در این مثال تصویر به vp9 و اولین استریم صدای خروجی به opus و دومین استریم صدای خروجی را به aac تبدیل می‌کنیم: FFmpeg -i "file1.mkv" -map 0:v:0 -map 0:a:0 -map 0:a:1 -codec:v libvpx-vp9 -b:v 1M -codec:a:0 libopus -b:a:0 256K -codec:a:1 aac -b:a:1 128K -y "file1_encoded.mkv" شاید برای شما فرقی نکند اما مثال بالا را می‌توانید به این صورت هم بنویسید اگر مدیریتش برایتان راحت تر هست: FFmpeg -i "file1.mkv" -map 0:v:0 -codec:v libvpx-vp9 -b:v 1M -map 0:a:0 -codec:a:0 libopus -b:a:0 256K -map 0:a:1 -codec:a:1 aac -b:a:1 128K -y "file1_encoded.mkv" در مثال زیر استریم ویدئو و تنها استریم صدای خروجی را بدون تغییر کپی می‌کنیم و استریم زیرنویس را از srt به ass تبدیل می‌کنیم: FFmpeg -i "file1.mkv" -map 0:v:0 -codec:v copy -map 0:a:0 -codec:a copy -map 0:s:0 -codec:s ass -y "file1_encoded.mkv" دستور بالارو می‌توانیم به اینصورت خلاصه کنیم: FFmpeg -i "file1.mkv" -map 0:v:0 -map 0:a:0 -codec copy -map 0:s:0 -codec:s ass -y "file1_encoded.mkv" برای دیدن لیستی از انکدرها و دیکدرهای موجود در نسخه‌ای از FFmpeg که در اختیار دارید از سوئیچ‌های -encoders و -decoders استفاده می‌کنید. این بچ کاربردی برای اینکار می‌باشد که لیست کدک‌ها را در فایل‌های متنی ذخیره می‌کند (در این پست یاد گرفته بودیم): FFmpeg -decoders > decoders.txt
FFmpeg -encoders > encoders.txt
گفته شد در نسخه‌ای که در اختیار دارید، به این دلیل که در هنگام compile کردن FFmpeg (تبدیل اون از سورس کد به یک فایل قابل اجرا توسط شما) امکان فعال و غیر فعال کردن برخی ویژگی‌های داخلی آن و همچنین برخی کتابخانه‌های خارجی آن وجود دارد. و معمولا تعداد کمی از کدک‌ها و فیلتر‌های خارجی (یعنی اونهایی که توسط افراد یا کمپانی‌های دیگر طراحی و نوشته شدن) بدلیل عدم همخوانی لایسنس، در بیلد‌های FFmpeg که عرضه "عمومی" میشن باید خاموش باشن و FFmpeg این کار را منع کرده . مثلا FDK AAC که توسط کمپانی Fraunhofer ارائه شده. یعنی اگر می‌خواهید این کدک‌ها را توی FFmpegتان داشته باشید باید خودتان شخصا FFmpeg را کامپایل کنید و ازشان بهره ببرید اما بیلدتان را با اینترنت به اشتراک نگذارید.

برای مشاهده سوئیچ‌های خاص تعریف شده برای هر انکدر یا دیکدر نیز می‌توانید از دستورات زیر بهره ببرید (بجای NAME نام کدک مورد علاقه خودتان را قرار می‌دهید): FFmpeg -help encoder=NAME
FFmpeg -help decoder=NAME

(البته راهنمای کلی هر کدک (و کلا سایر ویژگی‌های FFmpeg) در Documentation آن قرار دارد و بعنوان یک استفاده کننده معمولی توصیه می‌کنم هر دو جا را چک کنید)

- مشاهده قسمت پنجم