به بخش هفتم سری مقالات آشنایی با دنیای کدک‌های صوتی و تصویری رسیدیم و در این قسمت می‌خواهیم با آپشن‌های متنوع x264 و مقدمات کانورت با x264 آشنا شویم. با ما همراه شوید.

در قسمت قبلی سری مقالات نگاهی به دنیای کدک‌های صوتی و تصویری، مقایسه‌ای بین کیفیت چند کدک خوب، سریع و معروف داشتیم و دیدیم که کیفیت فعلی x265 در حد x264 است اما سرعت آن یک سوم است. لذا فعلاً کدکی که برای فشرده‌سازی ویدیو پیشنهاد می‌شود و صد البته مورد استفاده‌ی وب‌سایت‌های دانلود فیلم و ویدیوست، x264 است.

در ادامه می‌خواهم به آپشن‌های مختلف x264 نگاهی داشته باشم و سپس در قسمت‌های بعدی تبدیل ویدیو، قرار دادن استریم صدا و ویدیو در یک کانتینر mkv و در صورت نیاز اضافه کردن فایل زیرنویس به مجموعه را با چند مثال کاربردی توضیح می‌دهم.

دقت داشته باشید که برای x264 چند GUI (واسط گرافیکی کاربری) خوب مثل Hybrid و Staxrip وجود دارد. برخی نرم‌افزارهای دیگر مثل Mediacoder و XMedia Recode هم از هسته‌ی x264 برای تبدیل به H.264 بهره می‌گیرند. در تمام این نرم‌افزارها، آپشن‌های اصلی x264 پیش روی شماست اما تنها در برخی نرم‌افزارها می‌توانید به همه‌ی آپشن‌ها دسترسی داشته باشید. لذا بهتر است از GUI بروز و جدید استفاده کنید.

به شخصه از x264 Launcher، Fair Use Wizard، Ripbot 264، Auto x264، Handbrake و تا چندی پیش از Xvid4PSP و چندین ابزار دیگر استفاده کرده‌ام. معمولاً هیچ کدام از نرم‌افزارها همیشگی نیستند و به مرحله‌ای می‌رسند که دیر به دیر آپدیت می‌شوند. برخی هم امکانات کاملی ندارند. در حال حاضر Hybrid انتخاب من است اما آپشن‌هایی که توضیح می‌دهم، کلی هستند و به x264 مربوط می‌شوند نه به نرم‌افزاری که با آن کانورت می‌کنید.

حتی اگر با اینکدر دیگری که عضوی از گروه بزرگ H.264ها است، کار می‌کنید هم اصول کلی و آپشن‌های اصلی یکسان است و بد نیست با آنها آشنا شوید.

تنظیمات کلی تبدیل با x264

تمام تنظیماتی که در ادامه ذکر می‌کنم به صورت سوییچ‌ها و کامندهایی است که می‌توان در اغلب نرم‌افزارها استفاده کرد. مثلاً سوییچ زیر:

--subme 5 --trellis 0 --profile high

سه آپشن subme و trellis و profile را در حالت‌های موردنظر تنظیم می‌کند.

preset: حالت پیش‌فرض Meidum

پریست مهم‌ترین آپشن x264 است و با انتخاب یک از پریست‌های Ultra Fast و Very Fast که سریع هستند و همین‌طور Veryslow و Placbo که کندترین موارد هستند، تنظیمات کلی و بهینه انتخاب می‌شود.

به عبارتی اگر بخواهید سریع و راحت از اینکدر x264 استفاده کنید، تنها مورد مهم، انتخاب پریست و حجم فایل نهایی است.

انتخاب پریست‌های کانورت با x264

profile: حالت پیش‌فرض تنظیم نشده

پروفایل در کانورت کردن فایل برای پخش کردن توسط پلیرهای خاص کاربرد دارد. پروفایلی مثل High در اکثریت قریب به اتفاق پلیرها پخش می‌شود. Baseline و Main ساده‌تر هستند و پروفایلی مثل High 422 یا High 444 که کیفیت رنگ را بیشتر می‌کند، روی تمام دستگاه‌ها و پلیرها اجرا نمی‌شود.

 در خصوص کیفیت رنگ در فضای رنگ YUV با نمونه‌برداری YUV444 و YUV422 پیش‌تر بررسی مفصلی کرده‌ام. اگر می‌دانید که پلیر شما کدام پروفایل‌ها را پشتیبانی می‌کند، بهترین پروفایل ممکن را گزینش کنید.

انتخاب پروفایل‌های کانورت با x264

tune: حالت پیش‌فرض تنظیم نشده

تیون یا بهینه‌سازی برای بهینه کردن فرآیند تبدیل قابل انتخاب است. بهینه‌سازی برای تبدیل فیلم و انیمیشن دو انتخاب کلی است.

  • بهینه‌سازی Grain همان‌طور که از نام آن پیداست، دانه‌های ریز موجود در ویدیو را بهتر حفظ می‌کند.
  • بهینه‌سازی Stillimage برای ویدیوهایی کاربرد دارد که شبیه اسلایدشو و پر از تصاویر نسبتاً ثابت هستند.
  • بهینه‌سازی PSNR برای حفظ جزئیات و بافت اجسام کاربرد دارد که تا حدی شبیه Film است. PSNR مخفف Peak Signal-to-Noise Ratio و به معنی بیشترین نسبت سیگنال به نویز است. هر چه تبدیل ویدیو دقیق‌تر باشد و نویز کمتری مشاهده شود، PSNR رقم بالاتری خواهد داشت. ممکن است لبه‌ی اجسام صاف نباشد اما از منظر PSNR کیفیت بالاتری داشته باشد چرا که در این حالت ساختار تصویر حفظ نشده و صرفاً به اختلاف ورودی و خروجی استناد شده است.
  • بهینه‌سازی SSIM وضوح لبه‌ی عناصر را مورد توجه قرار می‌دهد که تا حدی شبیه Animation است. SSIM مخفف Structural Similarity Image Metric و به معنی متریکی برای سنجش حفظ ساختار است. مرز اجسام چیزی است که در حفظ ساختار اهمیت زیادی دارد و به همین علت در انیمه‌ها می‌توان از SSIM استفاده کرد.

مقایسه کردن دو متریک سنجش کیفیت ویدیو یعنی PSNR و SSIM بسیار مشکل است. ویدیویی خوب است که هر دو فاکتور را حفظ کند. در تصاویز زیر تصویری که نویز زیاد و اضافه‌ای دارد، و همین‌طور تصویری که مات است، از نگاه SSIM و PSNR جالب نیستند. تصویر آخر که صرفاً لبه‌های واضحی دارد، بهترین گزینه است:

SSIM و PSNR دو متریک سنجش کیفیت ویدیو.

یکی از آپشن‌های x264 که در ارزیابی کیفیت خروجی و بررسی گزینه‌های مختلف، مفید واقع می‌شود، آپشن محاسبه‌ی دو متریک PSNR و SSIM است. SSIM بالایی 0.9 یا 90 درصد و PSNR بالاتر از 41 دسی‌بل ارقامی مطلوب هستند.

فعال کردن محاسبه‌ی PSNR و SSIM

نتیجه‌ی محاسبه را می‌توانید در تب آخر هایبرید یعنی Log و همین‌طور در بخش پایین صفحه بررسی کنید.

  • بهینه‌سازی Fast Decode برای ساده کردن پخش ویدیو و در واقع سبک کردن اجرای ویدیو کاربرد دارد.
  • بهینه‌سازی Zerolatency برای کاهش تأخیر در پخش ویدیو کاربرد دارد. مثلاً در سرویس‌های استریم آنلاین ویدیو.

انتخاب نوع بهینه‌سازی کانورت با x264

no-cabac: حالت پیش‌فرض غیرفعال

با اضافه کردن این دستور، تبدیل ویدیو بدون فشرده‌سازی CABAC صورت می‌گیرد. CAVAC از نظر فشرده‌سازی بین 10 تا 20 درصد ضعیف‌تر است و دیکد کردن آن هم بار پردازشی کمتری دارد. این ویژگی در Hybrid به Entropy coding که در تصویر قبلی زیر آپشن Tune بود، ترجمه شده است.

Slow-firstpass: حالت پیش‌فرض مسیر اول تبدیل سریع است

در اینکد کردن دو مسیره که فایل ویدیویی ما یک بار به سرعت از ابتدا تا انتها بررسی می‌شود و در مسیر بعدی فرآیند اینکد صورت می‌گیرد، می‌توان مسیر اول را به همان کندی مسیر دوم انجام داد که معمولاً اثر کمی در افزایش کیفیت کانورت دارد و سرعت را بیش از حد پایین می‌آورد.

 اما واقعاً در حالت مسیر اول به صورت سریع چه اتفاقی می‌افتد؟

در حالت سریع تعداد ریفرنس فریم‌ها 1 عدد است، جست‌وجو برای حرکت در ساده‌ترین حالت یعنی Dia است و خلاصه آپشن‌هایی که سرعت کار را بالا می‌برند، در حالت بهینه تنظیم می‌شوند.

اگر نیازی به سرعت بالا ندارید و می‌خواهید کیفیت ویدیوی خروجی در بالاترین حد ممکن باشد، از Slow-firstpass که احتمالاً به صورت یک چک‌باکس است، استفاده کنید.

مسیر اول کانورت به صورت سریع

تنظیمات فریم‌ها

در ویدیوی نهایی که با x264 تبدیل شده، چند نوع فریم داریم. مهم‌ترین آنها، IDR یا Keyframe یا فریم کلیدی نام دارد. x264 هر فریم جدید را با قبلی مقایسه می‌کند. اگر تفاوت از حدی بیشتر باشد و از طرفی فاصله با فریم کلیدی قبلی بیش از حد تعیین شده باشد، این اجازه را دارد که یک فریم کلیدی اضافه کند.

فریم‌های I یا Intra به فریم‌هایی گفته می‌شود که اطلاعات کاملی دارند و معمولاً 10 برابر بیشتر از فریم‌های معمولی، فضا اشغال می‌کنند. دو نوع دیگر، از اطلاعات فریم I استفاده می‌کنند و با اعمال تغییراتی، تصویر کامل را تشکیل می‌دهند. در تصویر زیر، فریم I یک فریم حجیم و کامل است و دو نوع B و P فقط بخشی از اطلاعات تصویر را شامل می‌شوند:

فریم B و P یک فریم کامل نیستند، بخشی از داده را دارند.

تغییرات ممکن است شامل حرکت گروه‌هایی از پیکسل‌ها با یک بردار حرکتی باشد. حالت دیگر ترکیب گروه‌های پیکسلی از فریم‌های مختلف است. هدف این است که فریم نهایی با کمترین میزان داده، بازسازی شود.

فریم B به قبل و بعد و فریم P فقط به فریم‌های قبلی ریفرنس می‌دهد.

پخش ویدیو با دیکد از یک فریم I شروع می‌شود. وقتی فایل را به جلو و عقب می‌زنیم هم تنظیم پیش‌فرض اغلب پلیرهای نرم‌افزاری و سخت‌افزاری، نمایش فریم I است. سایر فریم‌ها یعنی P و B با استفاده از داده‌های فریم I کامل می‌شوند. لذا به پردازش بیشتری نیاز دارند.

تفاوت P و B در این است که فریم نوع P فقط از اطلاعات فریم‌های قبلی خود استفاده می‌کند حال آنکه B فریم از فریم‌های قبل یا بعد از خود، اطلاعات لازم را دریافت می‌کند و لذا پردازش سنگین‌تری نیاز دارد. حال به تنظیمات می‌پردازم.

keyint: حالت پیش‌فرض 250

حالت پیش‌فرض یعنی 250 به این معنی است که بیشترین فاصله‌ی دو فریم کلیدی، 250 فریم است. حالت بی‌نهایت یا infinite کاری می‌کند که فریم‌های کلیدی در موقعیت‌هایی به جز تغییر صحنه قرار داده نشوند.

فریم‌های که بین دو فریم کلیدی قرار می‌گیرند، نمی‌توانند به کمک اطلاعات موجود در فریم‌های خارج از این بازه، تکمیل و دیکد شوند. در تصویر زیر فریم‌های گروه تصاویر یا به اختصار GoP اول و دوم، فقط به دیگر فریم‌های همان بازه ریفرنس داده شده‌اند.

انواع فریم‌های I و B و P در استریم ویدیویی x264

هر چه Keyint را بزرگ‌تر در نظر بگیرید، فرآیند تبدیل و همین‌طور پخش ویدیو مشکل‌تر می‌شود و هر چه آن را کوچک‌تر فرض کنید، حجم ویدیوی نهایی بیشتر شده و پخش آن ساده‌تر می‌شود. از طرفی می‌توان آن را راحت‌تر عقب و جلو زد.

حالت پیش‌فرض خوب است اما اگر می‌خواهید ویدیو را برای سرویس‌های استریم زنده، بلوری و دستگاه‌های خاص تبدیل کنید، بهتر است از اعداد پایین‌تر استفاده کنید.

min-keying: حالت پیش‌فرض خودکار یا یک دهم Keyint

کمترین فاصله بین دو فریم کلیدی است که اگر بیش از حد کوچک باشد، ممکن است فریم کلیدی را در مکان نامناسب اضافه کند.

مقدار توصیه شده، عددی برابر با فریم ریت است. مثلاً اگر فریم ریت ویدیوی شما 24 فریم بر ثانیه است (که معمولاً همین‌طور است)، عدد 24 گزینه‌ی خوبی است.

دقت کنید که نام این تنظیم ممکن است min GoP باشد، مثل تصویر زیر:

تنظیمات فاصله‌ی فریم‌های کلیدی و تشخیص خودکار تغییر صحنه.

no-scencecut: حالت پیش‌فرض غیرفعال است.

اگر این کد را به کامندهای تبدیل با x264 اضافه کنید، دیگر فریم I به ویدیوی شما اضافه نمی‌شوند و تنها در هنگام تغییر صحنه یعنی Scencecut است که یک فریم I اضافه می‌گردد.

scenecut: حالت پیش‌فرض 40

متناسب با معکوس حدی است که x264 برای اضافه کردن یک فریم کلیدی جدید، از آن استفاده می‌کند. لذا هر چه این عدد را بیشتر کنیم، تعداد فریم‌های کلیدی افزایش می‌یابد. اگر آن را صفر در نظر بگیریم هم به این معنی است که تغییر بی‌نهایت بین فریم‌های متوالی، به معنی تغییر صحنه و اضافه کردن فریم کلیدی نیست. لذا با عدد 0 فریم کلیدی اضافه نمی‌شود، درست مثل اینکه آپشن no-scencecut را فعال کرده باشیم.

تغییر صحنه‌ی بالاتر برای ویدیوهای اکشنی که می‌خواهیم جزئیات بخش‌های پرتحرک حفظ شود، تنظیمی مناسب است. در این موارد می‌توان حداکثر فاصله‌ی دو فریم کلیدی که 250 فریم بود را هم کاهش داد که x264 زودتر فریم کلیدی جدید را ایجاد کند. یادتان باشد که فریم کلیدی حجم و کیفیت بسیار بالایی دارد.

دو تنظیم بسیار مهم، ریفرنس فریم و B فریم

ref: حالت پیش‌فرض 3 فریم

مهم‌ترین ویژگی x264 شاید این باشد که از فریم‌های قبلی برای ایجاد فریم جدید استفاده می‌کند. آپشن ref مشخص می‌کند که x264 برای ایجاد یک فریم P حداکثر می‌تواند از چند فریم قبلی استفاده کند. در حالت عادی عدد 3 مناسب است اما در ویدیوهایی با تحرک کم و همین‌طور انیمیشن‌ها می‌توان اعداد بزرگ‌تری انتخاب کرد.

محدوده‌ی این آپشن 1 تا 16 فریم است. هر چه عدد انتخابی بزرگ‌تر باشد، دیکد کردن ویدیو پیچیده‌تر می‌شود. اگر بخواهیم ویدیوی نهایی طبق پروفایل 4.1 استاندارد H.264 تبدیل شده باشد، برای رزولوشن 720p می‌توان حداکثر از 9 فریم استفاده کرد و برای رزولوشن فول‌اچ‌دی می‌توان از 4 فریم بهره گرفت.

انتخاب تعداد ریفرنس فریم و B فریم در کانورت با x264

دقت کنید که انتخاب محدوده‌ی بزرگ‌تر، فرآیند کانورت شدن ویدیو را هم طولانی‌تر می‌کند.

bframes: حالت پیش‌فرض 3 عدد

در حالت عادی و بدون فریم B، یک استریم x264 شامل فریم‌های Intra و P است. یعنی شکلی شبیه IPPPPPPIPPPIPPP دارد. اگر bframes را 2 عدد در نظر بگیریم، حداکثر 2 فریم B پشت سر هم در استریم ظاهر می‌شوند و به جای فریم‌های P می‌نشینند. به عبارتی استریم ما به شکل IPPBBPBIPPBPBPIP تغییر می‌کند.

استفاده از فریم B در فشرده‌سازی بیشتر ویدیو موثر است و صد البته بار پردازشی در هنگام دیکد یا اینکد را افزایش می‌دهد چرا که همان‌طور که قبلاً اشاره شد، فریم B به فریم‌های بعدی و قبلی وابسته است حال آنکه فریم P فقط به فریم‌های قبلی بستگی دارد.

فریم B می‌توان جزئیات بافت بخش‌هایی از فریم را با فریم‌های بعدی تکمیل کند.

b-adapt: حالت پیش‌فرض عدد 1 یا آپشن Fast است.

سرعت تصمیم‌گیری و انتخاب یک B یا P فریم است. عدد 0 یا Disabled باعث می‌شود که همیشه فریم نوع B انتخاب شود.

عدد 1 یا Fast به سرعت عمل در تصمیم‌گیری اشاره می‌کند و عدد 2 یا الگوریتم Optimal ، سرعت تصمیم‌گیری را پایین آورده و دقت انتخاب را افزایش می‌دهد.

در تبدیل چند مسیره، فقط مسیر اول به این آپشن بستگی دارد.

دقت کنید که در Hybrid این ویژگی به نام Adaptive b-frame decision شناخته می‌شود.

تنظیمات B فریم در کانورت با x264

b-bias: حالت پیش‌فرض 0 است.

با انتخاب عددی بین منفی 100 تا 100 می‌توان احتمال جایگزین شدن یک فریم P با فریم B را معین کرد.

در Hybrid این آپشن به Boost b-frame-frequency ترجمه شده است.

b-pyramid: حالت پیش‌فرض normal

یک فریم B ممکن است به فریم B دیگری ریفرنس داده شود که در این صورت هرم فریم‌های B شکل می‌گیرد. حالت none اجازه نمی‌دهد که یک فریم B به فریم B دیگری وابستگی داشته باشد. حالت دوم یعنی Strict در هر گروه کوچک تصاویر یا miniGOP حداکثر یکی از فریم‌های B را به صورت وابسته به فریم B دیگر فرض می‌کند. آخرین حالت که پیش‌فرض است هم چندین فریم B در هر miniGOP می‌توانند به دیگر فریم‌های B بستگی داشته باشند.

open-gop: حالت پیش‌فرض غیرفعال

برخی پلیرها با ویدیویی که گروه تصاویر باز داشته باشد، مشکل دارند و از این رو این ویژگی غیرفعال است. اگر آن را فعال کنیم، بازدهی فرآیند تبدیل افزایش می‌یابد. در گروه تصاویر باز، ممکن است یک فریم B به صورت موقتی قبل از فریم IDR قرار بگیرد اما اگر حالت عادی آن که غیرفعال است را در نظر بگیریم، فریم B بین دو فریم IDR قرار دارد و نمی‌تواند به خارج از این بازه ریفرنس داده شود.

این گزینه را در تصویر قبلی؛ سمت راست و بالا جست‌و‌جو کنید.

deblock: حالت پیش‌فرض 0:0

یکی از مهم‌ترین آپشن‌ها که روی وضوح لبه‌ها و وضوح بافت ویدیو موثر است، Deblocking یا کاهش بلوک‌ها نام دارد. عدد اول دیبلاکینگ آلفاست و عدد دوم دیبلاکینگ بتا. اگر آلفا را زیاد کنیم، ویدیو حالت صاف‌تر و بدون بلاک‌تر پیدا می‌کند و به عبارتی جزئیات آن هم بیشتر از بین می‌رود. عدد منفی 6 هم عمل کاهش بلوک‌ها را کم می‌کند و معمولاً بهتر است از اعداد بین مثبت و منفی 3 استفاده کنیم.

In-Loop Filter یا دیبلاکینگ در کانورت با x264

عدد دوم یعنی بتا، برای برخورد با جزئیات موجود در بلوک‌ها کاربرد دارد. بتای کوچک به این معنی است که بلوک‌های دیبلاک شده و صافی که شامل جزئیات ریز هستند، کمتر صاف می‌شوند و در مقابل بلوک‌هایی که جزئیات زیادی ندارند، حالت صاف‌ترین به خود می‌گیرند.

حالت پیش‌فرض 0:0 برای اغلب استریم‌های ویدیویی مناسب است اما اگر به نظر می‌رسد که تصویر بیش از حد مات و بدون جزئیات شده، هر دو عدد را کاهش دهید. گاهی کاهش بتا پاسخ‌گوی نیاز شماست و بلوک‌های دارای جزئیات را به حالت واقعی‌تر بر‌می‌گرداند.

دیبلاکینگ یا کاهش بلوکی شدن تصویر در کانورت با x264

no-deblock: حالت پیش‌فرض غیرفعال

هدف این کامند، غیرفعال کردن دیبلاک است که پیش‌تر اثر آن را توضیح دادم. در Hybrid با برداشتن تیک جک‌باکس In-Loop Filter، دیبلاکینگ غیرفعال می‌شود.

ttf و bff و no-interlaced

با x264 می‌توان ویدیوهای اینترلیس (Interlaced) هم ایجاد کرد اما بازدهی فشرده‌سازی آن کاهش می‌یابد. با توجه به اینکه بیشتر نرم‌افزارها و پلیرها با ویدیوی پروگرسیو (progressive) میانه‌ی بهتری دارند، می‌توانید از کامند no-interlaced استفاده کنید که ویدیوی نهایی، حتماً پروگرسیو باشد. ttf ویدیوی اینترلیس با اولویت فیلد بالایی است و bff هم به اولویت فیلد پایینی اشاره می‌کند.

کانورت ویدیو به صورت اینترلیس با x264

کنترل بیت ریت و حجم ویدیو

در x264 برای کنترل کیفیت و حجم ویدیوی تبدیل شده، سه روش کلی وجود دارد. ساده‌ترین روش مشخص کردن بیت ریت یا معادل آن، حجم فایل است. می‌توان از حالت دو مسیره هم استفاده کرد به این صورت که در مسیر اول، اینکدر به سرعت استریم ورودی را تحلیل و بررسی می‌کند و در مسیر دوم تبدیل را با دقتی بالا برای رسیدن به حجم یا بیت ریت متوسطی که مشخص شده، انجام می‌دهد.

منظور از Quantizer در تنظیمات تبدیل با x264 و بسیاری از کدک‌های ویدیویی چیست؟

منظور از کوآنتایزر، بیان کیفیت به صورت یک کمیت یا Quantity است. کوآنتایز کردن یعنی چیزی را با عدد و رقم بیان کردن.

Constant Quantizer برای حفظ کیفیت صحنه‌های پرتحرک و گذرا مناسب است.

روش دوم یعنی qp استفاده از کوآنتایزر برای فریم‌های P است. هر چه کوآنتایزر بیشتر باشد، کیفیت پایین‌تر است. عدد 0 به معنی اینکدینگ بدون افت کیفیت است و اعدادی در محدوده‌ی 18 تا 23، کیفیت خوب استریم خروجی را تضمین می‌کنند. در qp فقط کوآنتایزر فریم‌های P را به اینکدر می‌دهیم. کوآنتایزر دو نوع دیگر یعنی I و B با دو آپشن ipration و bpratio که نسبت کوآنتایزر این دو نوع فریم به کوآنتایزر فریم‌های P را بیان می‌کنند، محاسبه می‌شود. این روش Constant Quantizer نامیده شده چرا که کوآنتایزر همه‌ی فریم‌ها دقیقاً مشخص می‌شود.

حجم ویدیوی نهایی در این روش، قطعاً مشخص نیست اما می‌توان تخمینی از آن داشت. از این رو در برخی نرم‌افزارها، حالت دو مسیره برای تبدیل با آپشن qp و crf هم به چشم می‌خورد حال آنکه در اغلب نرم‌افزارها، qp و crf تنها به صورت یک مسیره قابل استفاده هستند.

CRF بهترین روش است اما کیفیت فریم‌های صحنه‌های پرتحرک و گذرا را پایین می‌آورد.

 روش جالب‌تر Constant Rate Factor است که به صورت مخفف crf گفته می‌شود. هدف این است که در صحنه‌های پرتحرک و فریم‌های پیچیده، کوآنتایزر به صورت هوشمندانه افزایش یابد و کیفیت کمتر شود چرا که چشم انسان آن قدر سریع و دقیق نیست که کیفیت این بخش‌ها را تشخیص دهد. در نتیجه کیفیت بصری حفظ می‌شود و در عین حال حجم فایل کمتر از روش qp خواهد شد. در این روش هم حجم فایل نهایی را می‌توان صرفاً تخمین زد.

x264 در حالت پیش‌فرض از روش سوم یعنی CRF استفاده می‌کند و مقدار کوآنتایزر را 23 در نظر می‌گیرد که برای ویدیوهای باکیفیت خوب است. اگر کیفیت ورودی شما بسیار بالاست، بهتر است سراغ اعدادی مثل 20 تا 22 بروید.

نکته‌ی آخر اینکه عدد 18 در این بخش به مثابه‌ی عدد 4 در اینکدرهای قدیمی استاندارد H.263 است. منظورم به طور دقیق نسخه‌ی تحت H.263 دو اینکدر Xvid و DivX است.

crf-max و qp-max: پیش‌فرض به ترتیب غیرفعال و 51

این دو آپشن برای مشخص کردن بیشترین کوآنتایزر کاربرد دارند. اگر بخواهیم کیفیت فریم‌های کم‌اهمیت هم بالا باشد، باید از اعداد پایین‌تر استفاده کنیم.

aq-mode: حالت پیش‌فرض 1

عدد 0 به این معنی است که کوانتایزر خودکار به کلی غیرفعال شود. عدد 1 هم با توضیحاتی که در مورد crf دادم، کیفیت فریم‌های مختلف را کاهش و افزایش می‌دهد تا کیفیت کلی ویدیو بالا برود. حالت سوم یعنی عدد 2، حالت Auto-Variance AQ است که بیت‌های داده را در هر فریم به صورت بهینه استفاده می‌کند که البته فعلاً هم به صورت آزمایشی باقی مانده است اما به شخصه آن را مفید تجربه کرده‌ام.

تحلیل فریم‌ها

partitions: حالت پیش‌فرض همگی فعال

x264 فریم‌های ویدیو را به بخش‌های کوچک‌تری در ابعاد 16 در 16 پیکسل تقسیم می‌کند و سپس به فشرده‌سازی این مایکروبلاک‌ها می‌پردازد. در حقیقت ارزیابی حرکت و برداری حرکتی چیزی است که با فرض کردن بلوک‌های مختلف به آن می‌رسد. می‌توان این مایکروبلاک‌ها را به تناسب نوع فریم، مجدداً تقسیم کرد.

مثلاً I8x8 یعنی فریم‌های نوع I به بلوک‌های کوچک‌تر 8 در 8 پیکسل تقسیم شوند. در میان چند گزینه‌ی موجود، p4x4 یکی از مواردی است که کمک زیادی به فشرده‌سازی نمی‌کند و سرعت تبدیل را کاهش می‌دهد و بهتر است آن را غیرفعال کنیم. گاهی b8x8 هم همین اثر را دارد اما در نهایت به i8x8 و i4x4 می‌رسیم که مهم‌ترین موارد هستند و بهتر است فعال باقی بمانند.

انواع پارتیشن در کانورت ویدیو با اینکدر x264

در استاندارد H.265 پارتیشن‌ها تنوع بیشتری دارند.

تقسیم یک فریم به پارتیشن‌هایی با ابعاد مختلف در کانورت با x264

direct: حالت پیش‌فرض auto

x264 در ارزیابی بردار‌های حرکتی، سه نوع پیشگویی مختلف را استفاده می‌کند. حالت spatial به جست‌وجو در دیگر بخش‌های فریم B می‌پردازد و حالت Temporal به مقایسه با فریم‌های P بعدی هم می‌پردازد. بهترین حالت Auto است که تصمیم‌گیری را دقیق‌تر می‌کند و به خصوص در اینکد کردن دو مسیره، مفید واقع می‌شود.

no-weightb: حالت پیش‌فرض غیرفعال

x264 در هنگام استفاده از بردارهای حرکتی برای ایجاد فریم‌های B می‌تواند فاصله‌ی فریم‌هایی که از اطلاعات آنها در یک فریم استفاده شده را در نظر بگیرد. با این روش احتمال اینکه در یک فریم B، تصویر حالت محو داشته باشد و برخی عناصر چند بار تکرار شوند پایین می‌آید چرا که فریم‌هایی که فاصله‌ی زیادی دارند و احتمالاً برداری حرکتی بزرگ‌تری ایجاد می‌کنند، با ضریب کوچک‌تری استفاده می‌شوند.

با اضافه کردن کامند no-weightb دیگر فاصله‌ی فریم‌ها مهم نیست و البته استفاده از این کامند توصیه نمی‌شوند.

me: پیش‌فرض hex

x264 برای یافتن بردارهای حرکتی، به 5 روش مختلف جست‌وجو می‌کند.

ساده‌ترین روش dia است که در آن محتوای یک پیکسل با 4 پیکسل بالا، پایین و چپ و راست مقایسه می‌شود تا اگر حرکتی تشخیص داده شد، بردار یک واحدی شکل بگیرد و در ادامه این فرآیند تکرار می‌شود تا به جایی برسیم که دیگر شباهتی وجود ندارد و مشخص است که به پایان بردار رسیده‌ایم. Diagonal یا حالت لوزی شکل، اسمی است که روی این روش گذاشته شده چرا که درست شبیه لوزی جست‌وجو می‌کند.

روش دوم Hex نام دارد که از 6 نقطه‌ی اطراف استفاده می‌کند و از نظر سرعت، تقریباً مثل Dia است اما با توجه به برد آن که 2 پیکسل است، کیفیت و دقت بیشتری دارد.

umh یا Uneven multi-hex آپشن سوم است که سرعت را کاهش می دهد. استفاده کردن از me-range روی دو آپشن قبلی موثر نیست اما در این مورد شعاع جست‌وجو را مشخص می‌کند و تأثیر زیادی روی کیفیت و سرعت تبدیل دارد.

esa الگوریتم بعدی است که بسیار کند است و تقریباً شبیه روش سعی و خطاست. تمام پیکسل‌ها در محدوده‌ی جست‌وجوی مشخص شده، بررسی می‌شود.

tesa شبیه روش قبلی است با این تفاوت که برای هر برداری حرکتی، یک بار تبدیل Hadamard اجرا می‌شود و لذا کندتر و بهتر است.

در هایبرید Full-Pixel Precision نام این آپشن x264 است.

تنظیمات جست‌وجوی حرکت در x264

me-range: حالت پیش‌فرض 16 پیکسل

همان محدوده‌ی جست‌وجو بر حسب پیکسل است که در بخش قبلی معرفی شد. اگر ویدیو شامل تحرکات شدید است، می‌توان از اعداد بزرگ‌تر استفاده کرد اما دقت کنید که در مورد hex و dia اعداد بیش از 16 کاربردی ندارند. اعداد بزرگ‌تر از 64 هم معمولاً مفید نیستند و به علاوه سرعت تبدیل را بسیار کاهش می‌دهند. در تصویر قبلی این آپشن را به اسم Max Pixel Search Range دیدیم.

subme: حالت پیش‌فرض 7 یا RD on all frame

مهم‌ترین آپشنی که سرعت عمل x264 در کانورت ویدیو را مشخص می‌کند، Subpixel Estimation نام دارد. اعداد کوچک‌تر و در واقع حالت‌های ساده‌تر، پیکسل‌ها را سریع‌تر بررسی کرده و تصمیم‌گیری تقسیم کردن پیکسل‌ها را سریع‌تر انجام می‌دهند.

حالت پیش‌فرض توصیه می‌شود اما در اینکد دو مسیره، حالت اول بهترین است و در حالت کلی حالت 6 و 7 مناسب‌تر هستند. حالت 6 آپشن RD یا Rate Distortion را تنها در مورد فریم‌های I و P که اهمیت بیشتری دارند فعال می‌کند و حالت 7 در تمام فریم‌ها از RD استفاده می‌کند. این آپشن در هایبرید همان‌طور که از تصویر قبلی پیداست، Sub-Pixel Precision ترجمه شده است.

دقت کنید که منظور از RD اعوجاج کیفیت ویدیو در مقایسه با داده‌ی مورد نیاز است. x264 با بررسی کیفیت ویدیو در حالت‌های مختلف، حالتی که بهینه است و به داده‌ی کمتری نیاز دارد را انتخاب می‌کند و این بررسی کردن، فرآیندی پیچیده و سرعت‌گیر است.

بهینه‌سازی کیفیت فیلم با تغییرات بصری

psy-rd: حالت پیش‌فرض 1.0:0.0

این آپشن هم یکی از جالب‌ترین تنظیمات x264 است چرا که مخفف Psychological Rate Distortion و به معنی اعوجاج بصری کیفیت است. در حقیقت توسعه‌دهندگان x264 با توجه به دریافت بصری انسان به این نتیجه رسیده‌اند که اگر تصویر بیش از حد مات باشد، کیفیت آن ظاهراً پایین‌تر است اما اگر اندکی بافت حتی به شکل غیرواقعی به آن اضافه شود، به ظاهر زیبا و دقیق‌تر است. درست مثل تصویر زیر، دقت کنید که PSY بافت غیرواقعی اما مطلوب به ویدیو اضافه کرده است:

PSY و بدون PSY در ویدیوی x264

لذا با دو عدد می‌توان شدت psy-RDO و Psy-trellis را مشخص کرد. عدد اول گرایش x264 به حفظ جزئیات بیشتر به جای دقت بالاتر را مشخص می‌کند و عدد دوم الگوریتمی آزمایشی برای بهینه‌سازی وضوح و بافت است که در عین حال، عیوب ریزی به تصویر اضافه می‌کند.

حالت پیشنهادی همان حالت پیش‌فرض است، مخصوصاً اگر انیمیشن و ویدیوهایی با بافت کم مدنظرتان است. اما در مورد فیلم‌ها می‌توانید عدد دوم را به 0.1 الی 0.2 تغییر دهید تا بافت جالب‌تری در خروجی نهایی به دست آید.

تنظیمات Trellis و PSY در کانورت با x264

Trellis: حالت پیش‌فرض عدد 1 است

Trellis کاری می‌کند که اعوجاج کیفیت به حداقل برسد. این کار با تصحیح ضرایب تبدیل گسسته‌ی کسینوسی یا به اختصار DCT انجام می‌شود و فرآیند زمان‌بر است. عدد 0 این تصحیح را به کلی غیرفعال می‌کند. عدد 1 که حالت پیش‌فرض است، Trellis را تنها در آخرین مرحله‌ی اینکد یک مایکروبلاک استفاده می‌کند و حالت 2 همواره از Trellis استفاده می‌نماید.

Trellis بالاتر، اعوجاج کمتری به دنبال دارد. اثر آن را در سه تصویر زیر ببینید:

اثر تنظیمات مختلف Trellis در کانویت ویدیو با x264

no-dct-decimate: حالت پیش‌فرض غیرفعال است

x264 در اینکد کردن مایکروبلاک‌هایی که به نظر می‌رسد توسط چشم انسان تشخیص داده نمی‌شوند، از آنها صرف‌نظر می‌کند اما این فرآیند ممکن است منجر به نمایان شدن عیوب ریز در تصویر شوند. لذا می‌توان این کامند را اضافه کرد تا x264 بلوک‌ها را به صور کامل اینکد کند و در نتیجه حجم فایل کمی افزایش می‌یابد.

جمع‌بندی و سخن آخر

تقریباً نیمی از آپشن‌های x264 و حتی کمتر را توضیح دادم. در مورد برخی از آپشن‌ها واقعاً پیدا کردن یک نمونه‌ی عینی که اثر آن را به صورت محسوس بیان کند، مشکل است اما تلاش کردم که اغلب موارد مهم و اصلی را توضیح دهم.

جالب اینجاست که اینکدر x265 هم بسیاری از آپشن‌های مشابه وجود دارد و گویا استاندارد H.265 نسخه‌ی بهینه‌سازی شده‌ی H.264 و H.263 است. لذا مطالعه در مورد x264 راهی برای آشنایی اساسی با دنیای تبدیل ویدیو است و امیدوارم از آن استفاده‌ی لازم را ببرید.

پیشنهاد من این است که در آغاز به کار با کدک‌های ویدیویی، هر از چند گاهی معنای آپشن‌ها را در دنیای گسترده‌ی وب جست‌وجو کنید تا تدریجاً به تمامشان واقف شوید.

در قسمت بعدی مبحث تبدیل صدا را مطرح کرده و آزمونی مقایسه‌ای بین کدک‌های مطرح برگزار می‌‌کنم تا ببینیم MP3 که ممکن است بیت ریت بالایی در حد 320 کیلوبیت بر ثانیه داشته باشد را چطور می‌توان با یک کدک پیشرفته‌تر، جایگزین کرد.