در بیتریت آپلود، فاصلهی کیفیت انکودر سختافزاری و نرمافزاری آنقدر کم است که با دستگاه اندازه میگیری ولی معمولاً با چشم نمیبینی. روی لپتاپی با گرافیک Intel HD 530، یک کلیپ ۱۲۰ ثانیهای Samsung Log با مشخصات 1080p30 که از ۳۴ مگابیت به ۱۰ مگابیت رسید، با Quick Sync (hevc_qsv) در ۱۴۵ ثانیه VMAF ۹۵٫۶۰ گرفت و با انکودر نرمافزاری Kvazaar در ۳۷۵ ثانیه ۹۵٫۹۰: ۰٫۳ امتیاز در ازای ۲٫۶ برابر انتظار. قاعدهی عملیاش این است: از انکودر سختافزاری همان دستگاهی که داری استفاده کن، نتیجه را بسنج، و اگر امتیاز کم آمد بیتریت را بالا ببر.
چرا میگویند انکودر GPU کیفیتش بدتر است؟
چون مدتها، در همان شرایطی که بیشتر آدمها مقایسه میکردند، واقعاً بدتر بود. مقایسههایی که این باور را ساختند از دنیای استریم زنده آمدند: بیتریت ثابت و کم، جایی که انکودر نرمافزاری با preset کند میتوانست از هر بیت جزئیات بیشتری بیرون بکشد تا نسلهای اول NVENC یا Quick Sync. وقتی بیت کم است، زرنگی انکودر همه چیز است، و در آن نسلهای اول نرمافزار زرنگتر بود.
سه چیز عوض شد. انکودرهای سختافزاری چند نسل جلو رفتند و بیشتر آن فاصله را بستند. HEVC به فرمت رایج آپلود تبدیل شد و بیشتر تراشههای چند سال اخیر سختافزاری پشتیبانیاش میکنند. و خود کار عوض شد: آپلود به یوتیوب یا ریلز برای 1080p در ۸ تا ۱۲ مگابیت انجام میشود، بیتریتی که در آن هر انکودر معقولی برای بازسازی تصویر بیت کافی دارد. سؤال دیگر «کدام انکودر باهوشتر است» نیست؛ «این فایل به امتیازی که میخواهم رسید یا نه، و چقدر طول کشید».
دقیقاً چه چیزی را اندازه گرفتیم؟
یک کلیپ، یک دستگاه، سه اجرای انکود. کلیپ یک فیلم ۱۲۰ ثانیهای Samsung Log است، 1080p30، ۱۰ بیت، ۳۴ مگابیت همانطور که ضبط شده، تبدیلشده به Rec.709 و انکودشده برای یوتیوب با هدف ۱۰ مگابیت. دستگاه، لپتاپی با گرافیک داخلی Intel HD 530 است؛ همان تراشهای که در خیلی از لپتاپهای نسل ششم اینتل که هنوز در ایران دست مردم است نشسته، و HEVC را فقط ۸ بیتی انکود میکند. VMAF میانگین هارمونیک ده نمونهی ۲ ثانیهای است و ستون «کمینه» بدترینِ آن ده نمونه.
| انکودر | سطح | VMAF | کمینه | سرعت | زمان برای ۱۲۰ ثانیه |
|---|---|---|---|---|---|
| hevc_qsv (Quick Sync) | best | ۹۵٫۶۰ | ۹۴٫۳۷ | ۳۱٫۶ fps | ۱۴۵ ثانیه |
| hevc_qsv (Quick Sync) | safe | ۹۵٫۲۳ | ۹۴٫۱۸ | ۵۶٫۸ fps | ۹۴ ثانیه |
| libkvazaar (نرمافزاری) | good | ۹۵٫۹۰ | ۹۵٫۱۰ | ۱۰٫۵ fps | ۳۷۵ ثانیه |
| سقف اندازهگیری (فایل اصلی در برابر خودش) | ۹۷٫۸۴ |
ردیف سقف مهم است. اگر فایل اصلی را از همان مسیر در برابر خودش بسنجی ۹۷٫۸۴ میگیرد، نه ۱۰۰، چون تبدیل به Rec.709 و تغییر اندازه در مسیر سنجش خودشان کمی هزینه دارند. پس فاصلهی واقعی سریعترین انکود سختافزاری تا «کامل» حدود ۲٫۶ امتیاز بود و انکودر نرمافزاری ۰٫۶۷ امتیازش را پس گرفت، با چهار برابر زمانِ سطح safe.
این یک لپتاپ و یک کلیپ است، نه بنچمارک همهی کارتهای گرافیک. NVENC روی یک GTX 1650 یا تراشهی جدیدتر اینتل احتمالاً نقطهی سختافزاری را روی نمودار بالاتر میبرد. درس دربارهی شکل این معامله است، نه عددهای دقیق.
سطح انکودر مهمتر است یا بیتریت؟
بیتریت، و این مفیدترین نتیجه بود. روی همان دستگاه و همان کلیپ:
- بردن سطح Quick Sync از safe به best حدود ۱٫۵۵ برابر زمان گرفت و ۰٫۳ تا ۰٫۵ امتیاز VMAF خرید.
- تغییر بیتریت به ×۰٫۷۵ حدود ۱ امتیاز کم کرد و ×۱٫۳ حدود ۱ امتیاز اضافه.
بیتریت اهرم ارزان است و سطح انکودر اهرم گران. اگر فایلی به امتیاز لازم نرسید، اولین راه بیت بیشتر است، نه انکودر کندتر. به همین دلیل تعادل کیفیت بچلون بهصورت ضریب بیتریت بیان میشود (Smaller ×۰٫۷۵، Balanced ×۱٫۰، Higher quality ×۱٫۳) و تلاش دوبارهاش بعد از رد شدن سنجش، بیتریت را ×۱٫۴ و بعد ×۲ بالا میبرد، نه اینکه انکودر عوض کند. انتخاب بیتریت شروع در کم کردن حجم فیلم بدون افت کیفیت آمده.
من کدام انکودر سختافزاری را دارم؟
- NVENC بلوک انکود اختصاصی کارتهای NVIDIA است. کارتهای سری GTX 10 به بعد، از جمله GTX 1050 و GTX 1650 که در لپتاپهای ایران زیادند، HEVC را ۱۰ بیتی انکود میکنند؛ تراشههای قدیمیتر لپتاپی مثل GTX 950M دستگاه آزمایشگاه در تست رد شدند و کار به گرافیک داخلی اینتل افتاد.
- Quick Sync انکودر گرافیک داخلی اینتل است. از نسل هفتم Core به بعد HEVC را ۱۰ بیتی انکود میکند؛ HD 530 اینجا نسل ششم است و فقط ۸ بیت. UHD 620 و UHD 630 که در لپتاپهای نسل هشتم تا دهم رایجاند، ۱۰ بیت دارند.
- AMF (Advanced Media Framework) معادل AMD است، روی کارتهای Radeon و APUهای Ryzen؛ نسلهای اخیر HEVC ۱۰ بیتی دارند.
- Media Foundation واسط انکود داخلی ویندوز است. هر چه درایور در اختیار بگذارد همان را استفاده میکند، با کنترل کمتر، و بعضی ترکیبهای درایور کلاً خطا میدهند؛ برای همین پایین فهرست است.
- Kvazaar انکودر HEVC نرمافزاری متنباز است و مجوزش با نسخهی LGPL از FFmpeg سازگار است؛ به همین دلیل میشود آن را همراه FFmpeg داخل یک محصول گذاشت. روی CPU و روی هر دستگاهی کار میکند، آهسته.
- SVT-AV1 انکودر نرمافزاری AV1 است و فقط بهعنوان جایگزین برای آپلود HDR به یوتیوب استفاده میشود، وقتی هیچ انکودر HEVC ۱۰ بیتی در کار نیست.
فرق ۸ بیت و ۱۰ بیت فقط وقتی مهم است که خروجی باید ۱۰ بیت باشد، که در عمل یعنی HDR. آپلود SDR به یوتیوب، ریلز یا تیکتاک با ۸ بیت مشکلی ندارد و تراشهی فقط-۸-بیتی مثل HD 530 برایش نقطهضعف نیست.
بچلون انکودر را چطور انتخاب میکند؟
فهرست سختافزار را نمیخواند که حدس بزند؛ امتحان میکند. در اولین اجرا، اپ روی هر گزینه یک انکود آزمایشی ۲ ثانیهای در ۸ و ۱۰ بیت انجام میدهد و ثبت میکند چه چیزی واقعاً کار کرد و با چه سرعتی. روی همان لپتاپ بالا، NVENC خراب و Quick Sync فقط-۸-بیتی همینطور پیدا شدند، بدون اینکه جلوی چشم کاربر خطایی بالا بیاید.
- NVENC (انویدیا)، اگر تست را با موفقیت بگذراند.
- Quick Sync (گرافیک داخلی اینتل).
- AMF (AMD).
- Kvazaar، نرمافزاری، اولین گزینهای که روی هر کامپیوتری کار میکند.
- Media Foundation، برای دستگاههایی که سه انکودر بالا را ندارند ولی درایور چیزی در اختیار میگذارد.
- SVT-AV1، فقط برای HDR یوتیوب وقتی هیچکدام از بالاییها HEVC ۱۰ بیت ندارند.
کاوش یک بار انجام میشود؛ نتیجه ذخیره و در صفحهی دستگاه نشان داده میشود.
صفحهی دستگاه نشان میدهد کاوش روی این کامپیوتر چه پیدا کرده.
هر انکودری که استفاده شود، خروجی با VMAF در برابر فایل اصلی سنجیده میشود و فایل زیر کف ۹۳ هرگز «آماده» اعلام نمیشود. همین امتیاز است که انتخاب را بیخطر میکند: انکودری که روی یک کلیپ خاص ضعیفتر عمل کند گیر میافتد و تلاش دوباره با بیتریت بالاتر درستش میکند. اگر کلیپ Log یا HDR است، تبدیل رنگ قبل از انکود هم باید درست باشد، وگرنه تصویر رنگپریده میشود و هیچ انکودری نجاتش نمیدهد.
کی هنوز انکود نرمافزاری انتخاب درست است؟
- خروجی HDR بدون انکودر سختافزاری ۱۰ بیت. لپتاپ آزمایشگاه اصلاً نمیتواند HDR یوتیوب را روی GPU انکود کند؛ نرمافزار تنها راه است.
- بیتریت خیلی کم. زیر بیتریت آپلود، مثلاً برای فایلی که باید در سقف حجم سفتوسختی جا شود، بازده اضافهی انکودر نرمافزاری بیشتر از ۱۰ مگابیت به کار میآید. باید سنجید؛ روی این کلیپ در ۱۰ مگابیت برتری Kvazaar ۰٫۳ امتیاز بود.
- امتیاز حتی در سقف بیتریت مقصد کم میآید. برای فیلم گوشی نادر است، ولی وقتی بالا بردن بیتریت دیگر مجاز نیست، انکودر کندتر اهرم باقیمانده است.
- عجله نداری. ۳۷۵ ثانیه برای یک کلیپ ۲ دقیقهای یک بار قابل تحمل است؛ برای صف بیستتایی نه.
برای بقیهی موارد، انکودر سختافزاری بهعلاوهی امتیاز سنجیدهشده پیشفرض عاقلانه است. راهنمای شتاب سختافزاری FFmpeg فهرست میکند کدام انکودر روی کدام پلتفرم هست، اگر خواستی مقایسه را روی دستگاه خودت تکرار کنی.
راه میانبر
این آزمایش را میشود با FFmpeg و libvmaf خودت تکرار کرد؛ یادداشتهای آزمایشگاهی پشت این مقاله دقیقاً همین است. یا بگذار بچلون انجامش دهد: انکودرهایت را یک بار کاوش میکند، از سریعترینی که کار میکند استفاده میکند، برای مقصد انکود میکند و کنار هر خروجی امتیاز VMAF نشان میدهد، روی کامپیوتر خودت. گزارش رایگان است، سه ویدیوی اول همهی امکانات را دارند و چیزی آپلود نمیشود. دانلود نسخهی ویندوز یا دیدن پلنها.