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


فیلترها، آرگومان ها و Filterchain:
فیلترگذاری و ویرایش صدا و تصویر یکی دیگر از قابلیت های FFmpeg است. برای فیلتر گذاری نوع عادی، از سوئیچ های خروجی -af برای صوت و -vf برای ویدئو استفاده می شود یا -filter[:stream_specifier] برای هردو. البته همانطور که FFmpeg در گذشته سوئیچ های -ab و -vb و -vbsf و -absf را منسوخ اعلام کرد و خواست که از -b:a و -b:v برای تعیین بیت ریت صدا و تصویر و -bsf:a و -bsf:v برای bitstream filter صدا و تصویر استفاده بشود انتظار می رود که استفاده از -filter:a و -filter:v نوع ترجیح داده شده این سوئیچ ها در آینده باشد و برای همین از این به بعد از این دو استفاده می کنیم.
بعد از قرار دادن سوئیچ های خروجی مذکور، نوبت به وارد کردن فیلترهای موردنظر می رسد. سینتکس دستورات فیلترها به این صورت است که ابتدا نام فیلتر مذکور، بعد یک مساوی "=" و سپس آرگومان های آن را می نویسیم. ممکن است یک فیلتر بیش از یک آرگومان داشته باشد که در اون صورت باید مقادیر را با کارکتر کولُن یا همون دونقطه ":" از مقدار بعدی جدا کنیم. همچنین ممکن است یک فیلتر هیچ آرگومانی نداشته باشد که در اونصورت نیازی به قرار دادن "=" اولیه هم نیست و فقط نوشتن نام فیلتر کافیست. بعد که نوبت به فیلتر بعدی رسید (در صورت تصمیم شما)، با یک کارکتر کاما "," فیلتر قبلی را از فیلتر بعدی جدا کرده و فیلتر بعدی را به همان ترتیب فیلتر قبلی می نویسیم.
نکته: به مجموعه ای از فیلتر های پشت سر هم که توسط کاما "," از هم جدا شدن یک Filterchain گفته می شود و وضعیت اعمالشون هم به همان ترتیبی هست که نوشته شده اند (از چپ به راست). یعنی فرضا می توانید اول فیلتر crop را اعمال کنید بعد scale یا برعکس و این دست خودتان است.
به مثال زیر توجه نمایید:
در این مثال قرار هست به ترتیب دو فیلتر صوتی vibrato و earwax را به صدای خروجی بدهیم. ابتدا به راهنمای دو فیلتر مراجعه می کنیم تا وضعیت آرگومان ها را مشاهده کنیم (ffmpeg-filters.html):
earwax# TOC
Make audio easier to listen to on headphones.
This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio so that when listened to on headphones the stereo image is moved from inside your head (standard for headphones) to outside and in front of the listener (standard for speakers).
Ported from SoX.
vibrato# TOC
Sinusoidal phase modulation.
The filter accepts the following options:
f
Modulation frequency in Hertz. Range is 0.1 - 20000.0. Default value is 5.0 Hz.
d
Depth of modulation as a percentage. Range is 0.0 - 1.0. Default value is 0.5.
همانطور که می بینید فیلتر earvax هیچگونه آرگومانی ندارد. و فیلتر vibrato دارای دو آرگومان f و d و به همان ترتیب عنوان شده یعنی اول f و سپس d می باشد. اگر به شکل ابتدایی بخواهیم دستور بچ را بنویسیم به این شکل خواهد بود: "%FFmpeg%" -i %1 -map 0:a:0 -filter:a vibrato=5.0:0.4,earwax -y "%~dpn1_fiterchain.mp4"
pause
نکته 1: اگر دقت نمایید، ما آرگومان های فیلتر vibrato را بصورت value only یا "فقط مقدار" نوشتیم. در این حالت همانطور که گفته شد مقادیر را باید به همان ترتیبی که آرگومان ها در راهنمای فیلتر تعریف شدن (از بالا به پائین) وارد کرد. در غیر اینصورت FFmpeg نمیداند که منظور کاربر از وارد کردن یک مقدار، قرار گیری آن در کدام آرگومان هست و با مشکل مواجه می شوید.
نکته 2: راه دیگر وارد کردن تنظیمات یک فیلتر، وارد کردن کامل هر آرگومان به همراه مقدار آن است. یعنی نام آرگومان سپس "=" و سپس مقدار آرگومان. در اینصورت دیگر ترتیب مهم نخواهد بود. به این صورت: -filter:a vibrato=d=0.4:f=5.0,earwax همانطور که مشاهده نمودید اول d را نوشتیم و بعد f ولی چون نام آرگومان هارو وارد کردیم FFmpeg دقیقا می تواند بفهمد که منظورمان چه بوده و عملیات بدون مشکل انجام می شود.

--پایان قسمت ششم - مشاهده قسمت هفتم