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

تعیین کدک ها:
کدک برای انکد و دیکد استریم ها با سوئیچ -c یا نام دیگرش یعنی -codec تعیین میشود. این سوئیچ اگر بعنوان ورودی استفاده بشود دیکدر را برای یک (نوع) استریم از اون فایل ورودی خاص مشخص می کند. انتخاب دیکدر معمولا چیزیه که موارد نادری بهش احتیاج پیدا می شود. (تا بحال برای اینجانب که پیش نیامده. اما در اینترنت دیده ام برای کسانی که قصد انتخاب libdcadec بعنوان دیکدر برای فایل DTS خود را داشتند پیش آمده).
و اما انتخاب انکدر، با مثال های زیر پیش می رویم. فایلمان همان فایل mkv هست که در قسمت " مدیریت استریم ها " مشخصاتش را ذکر کردیم و باهاش کار می کردیم.
در این مثال تصویرش و اولین استریم صدایش را می گیریم و به ترتیب به h265 وopus تبدیل می کنیم: SET FFmpeg=D:\ _Tools_\_my builds\64bit\video\ffmpeg.exe

"%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"
Pause
در این مثال تصویر فایل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 libvo_aacenc -b:a:1 116K -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 libvo_aacenc -b:a:1 116K -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 استفاده می کنید. این یک بچ بسیار کاربردی برای اینکار می باشد که لیست کدک ها را در فایل های متنی ذخیره می کند (در این پست یاد گرفته بودیم): SET FFmpeg=D:\_Tools_\FFmpeg Latest\ffmpeg.exe

"%FFmpeg%" -decoders > decoders.txt
"%FFmpeg%" -encoders > encoders.txt
Pause
گفته شد در نسخه ای که در اختیار دارید، به این دلیل که در هنگام compile کردن FFmpeg (تبدیل اون از سورس کد به یک فایل قابل اجرا توسط شما) امکان فعال و غیر فعال کردن برخی ویژگی های داخلی آن و همچنین برخی کتابخانه های خارجی آن وجود دارد. و معمولا تعداد کمی از کدک ها و فیلتر های خارجی (یعنی اونهایی که توسط افراد یا کمپانی های دیگر طراحی و نوشته شدن) بدلیل عدم همخوانی لایسنس، در بیلد های FFmpeg که عرضه "عمومی" میشن باید خاموش باشن و FFmpeg این کار را منع کرده. مثلا دو نمونه از اون کدک ها یکی nvencهست که توسط nvidia ارائه شده و یکی FDK AAC که توسط کمپانی Fraunhofer ارائه شده. یعنی اگر می خواهید این کدک ها را توی FFmpegتان داشته باشید باید خودتان شخصا FFmpeg را کامپایل کنید و ازشان بهره ببرید اما بیلدتان را با اینترنت به اشتراک نگذارید.
(البته راهنمای کلی هر کدک (و کلا سایر ویژگی های FFmpeg) در Documentation آن قرار دارد و بعنوان یک استفاده کننده معمولی توصیه می کنم هر دو جا را چک کنید)

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