به بخش هفتم سری مقالات آشنایی با دنیای کدک‌های صوتی و تصویری رسیدیم و در این قسمت می‌خواهیم با آپشن‌های متنوع 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

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

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

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

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

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

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

انتخاب پروفایل‌های کانورت با 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 دو متریک سنجش کیفیت ویدیو.

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

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

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

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

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

بهینه‌سازی Fast Decode برای ساده کردن پخش ویدیو و در واقع سبک کردن اجرای ویدیو کاربرد دارد.

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

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

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

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

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

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

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

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

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

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

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

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

 آشنایی با انواع فریم‌ها در ویدیوی فشرده شده و تنظیمات مربوطه در x264

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

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

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

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

فریم 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

انواع فریم‌های 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

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

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

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

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

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

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

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

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

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

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

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

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

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

تنظیمات 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

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

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

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

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

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

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

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

ttf و bff و no-interlaced

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

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

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