انویدیا از Video Codec SDK 13.1 رونمایی کرد: ترنسکود Zero-Copy، فریم‌های B در AV1 و جستجوی دقیق فریم

انویدیا از Video Codec SDK 13.1 رونمایی کرد: ترنسکود Zero-Copy، فریم‌های B در AV1 و جستجوی دقیق فریم

انویدیا نسخه جدید توسعه‌دهنده کدک ویدیویی خود، NVIDIA Video Codec SDK 13.1، را معرفی کرد. این نسخه حالت مرجع سلسله‌مراتبی (Hierarchical Reference Mode) را برای کدک AV1 ارائه می‌دهد که تا ۳۱ فریم B را پشتیبانی می‌کند. همچنین ترکیب اطلاعات تنظیم کیفیت فوق‌العاده بالا (UHQ) با انکودینگ تکراری (Iterative Encoding) و صرفه‌جویی چشمگیر در بیت‌ریت (Bitrate) در هر دو حالت CQ و VBR، بدون تحمیل بار پردازشی اضافی، بازدهی انکود را به‌طور محسوسی افزایش می‌دهد.

در بخش دکود (Decode)، بهبودها شامل ارائه آمار به ازای هر ماکروبلاک (Per-macroblock statistics) برای H.264/HEVC، جستجوی دقیق فریم (Frame-Accurate Seek) از طریق معماری آگاه از GOP، و گسترش پشتیبانی استریوسکوپیک MV-HEVC با متادیتای لایه/دید و سازگاری با نرم‌افزارهای شخص ثالث است. این قابلیت‌ها تحلیلهای پیشرفته مبتنی بر شتاب‌دهی GPU و دسترسی دقیق به فریم‌ها را برای جریان‌های کاری هوش مصنوعی و ویرایش ویدیو ممکن می‌سازند.

خط لوله ترنسکودر (Transcoder Pipeline) نیز با یک معماری ماژولار و مبتنی بر صف (Queue-Based) از نو طراحی شده و از ترنسکود Zero-Copy با بافرهای مشترک CUarray پشتیبانی می‌کند. این تغییرات منجر به کاهش مصرف پهنای باند حافظه و پردازنده گرافیکی (SM)، نرخ عبور (Throughput) بالاتر، قابلیت سفارشی‌سازی بیشتر و انتشار ساده‌تر با استفاده از محیط توسعه رسمی مبتنی بر داکر (Docker) شده است.

چرا حالت مرجع سلسله‌مراتبی AV1 اهمیت دارد؟

استفاده از فریم‌های B به عنوان مرجع، کیفیت انکود را بهبود می‌بخشد. حالت مرجع سلسله‌مراتبی با چینش فریم‌های B در یک ساختار درختی، این کیفیت را بیش از پیش افزایش می‌دهد: گره‌های برگ فریم‌های B غیرمرجع هستند و ریشه، فریم B میانی است. این ساختار حداکثر تعداد فریم‌های B در NVENC را از ۷ به ۳۱ افزایش می‌دهد و به انکودر اجازه می‌دهد از همپوشانی زمانی استفاده کرده و کیفیت کلی را ارتقا دهد. استفاده از این حالت هیچ جریمه عملکردی ندارد، اما مصرف حافظه ویدیو (VRAM) را افزایش می‌دهد.

نسخه 13.1 این حالت را برای AV1 با پشتیبانی از ۱، ۳، ۷، ۱۵ و ۳۱ فریم B اضافه می‌کند؛ پشتیبانی از H.264 و HEVC در نسخه‌های آینده درایور ارائه خواهد شد. این حالت در ۷ فریم B یا بیشتر بیشترین کارایی را دارد و حداقل تأثیر را بر عملکرد می‌گذارد.

اطلاعات تنظیم UHQ همراه با انکودینگ تکراری

انکودینگ تکراری (Iterative Encoding) پیشروی خودکار وضعیت انکودر را متوقف کرده و به کاربر اجازه می‌دهد همان فریم را با پارامترهای متفاوت مجدداً انکود کند. NVENC وضعیت هر تکرار را پیگیری کرده و می‌تواند در هر کدام متوقف شده و آن را اعمال کند.

اطلاعات تنظیم UHQ (UHQ tuning info) سطح نگاه به جلو (Lookahead Level) و فیلتر زمانی (Temporal Filtering) را ترکیب می‌کند تا بهترین توازن میان کیفیت و عملکرد را در انکودینگ‌های متحمل تاخیر ارائه دهد. فیلتر زمانی با استفاده از تخمین حرکت، نویز ویدیوهای طبیعی را کاهش داده و به‌طور متوسط ۴ تا ۵ درصد بهره‌وری کدگذاری ایجاد می‌کند. نسخه 13.1 این دو قابلیت را ترکیب کرده است تا فیلتر زمانی و نگاه به جلو در کنار باز-انکود تکراری کار کنند.

آمار دکود به ازای هر ماکروبلاک

رابط برنامه‌نویسی NVDECODE اکنون آمار دقیق دکود را به ازای هر ماکروبلاک برای ویدیوهای H.264 و HEVC بازیابی می‌کند. برای هر بلوک 16×16، دکودر پارامتر کوانتیزاسیون روشنایی (Luma QP)، نوع واحد کدگذاری (Intra, Inter, Skip, PCM) و تا دو بردار حرکت (Forward و Backward) را بدون هیچ بار اضافی روی CPU استخراج می‌کند.

این آمار جریان‌های کاری تحلیل ویدیو مبتنی بر GPU را فعال می‌کند که قبلاً نیازمند پارس کردن بیت‌استریم در سمت CPU بودند. بردارهای حرکت امکان تشخیص تغییر صحنه، ردگیری اشیاء و تحلیل مرز شات‌ها را فراهم می‌کنند.

جستجوی دقیق فریم برای هوش مصنوعی و ویرایش ویدیو

جریان‌های کاری هوش مصنوعی — از استنتاج برای تشخیص اشیاء تا آماده‌سازی داده‌های آموزشی — و همچنین نرم‌افزارهای ویرایش ویدیو، مکرراً به فریم‌های خاصی نیاز دارند نه دکود ترتیبی. اکنون SDK از طریق کلاس NvVideoDecoder یک API جامع برای جستجو و دسترسی تصادفی به فریم ارائه می‌دهد که دسترسی دقیق را به سادگی ایندکس‌گذاری آرایه می‌کند.

معماری جستجوی آگاه از GOP این درخواست‌ها را مدیریت می‌کند. برای فریم N، ابتدا نزدیک‌ترین فریم IDR قبل از هدف شناسایی شده، دکودر به آنجا پرش می‌کند و تنها فریم‌های لازم تا رسیدن به فریم N پردازش می‌شوند. تنها فریم N خط لوله کامل دکود، نگاشت و پس‌پردازش را طی می‌کند.

بهبودهای استریوسکوپیک MV-HEVC

این SDK اکنون پشتیبانی بهتری از ویدیوهای سه‌بعدی ارائه می‌دهد:

  • ارائه متادیتای شناسه دید (View-ID) و لایه از دکودر برای مسیریابی فریم‌ها در ویدیوهای استریو.
  • پشتیبانی گسترده‌تر از بیت‌استریم‌های سه‌بعدی MV-HEVC ایجاد شده توسط انکودرهای شخص ثالث.
  • متادیتای نمایش سه‌بعدی HEVC هنگام انکود از طریق FFmpeg به‌درستی در بیت‌استریم ظاهر می‌شود.
  • رمزگذاری فریم تقسیم‌شده (Split Frame Encoding): امکان کار چند انکودر روی یک فریم برای افزایش سرعت ویدیوهای باکیفیت 3D و XR.

بازطراحی خط لوله ترنسکودر

برنامه‌های نمونه ترنسکود اکنون بر انعطاف‌پذیری، عملکرد و سفارشی‌سازی تمرکز دارند. این مجموعه شامل چهار برنامه است:

  • AppTransPerf: بنچمارک حداکثر نرخ عبور NVDEC و NVENC.
  • AppTrans: ترنسکود ۱ به ۱ با تبدیل اختیاری عمق بیت (Bit-depth).
  • AppTransOneToN: ترنسکود ۱ به N همراه با مقیاس‌بندی (Scaling).
  • AppTransZeroCopy: برنامه جدید ترنسکود ۱ به ۱ بدون کپی (Zero-copy) بهینه‌شده برای کمترین تاخیر ممکن.

معماری ماژولار و مبتنی بر صف

در نسخه 13.1، نمونه‌ها بر اساس یک معماری کاملاً ماژولار و مبتنی بر صف بازطراحی شده‌اند که همزمانی را تضمین کرده و بهره‌وری سخت‌افزار را به حداکثر می‌رساند. این بازطراحی یک نخ پردازشی (CPU Thread) اختصاصی به هر مرحله از خط لوله اختصاص می‌دهد که از طریق صف‌های ورودی و خروجی مشخص با یکدیگر ارتباط برقرار می‌کنند.

ترنسکود Zero-copy با استفاده از CUarray

در خط لوله سنتی ترنسکود، فریم دکودشده قبل از رسیدن به انکودر از چندین تبدیل فرمت داخلی و کپی گذرد. برنامه AppTransZeroCopy این زنجیره کپی را با قرار دادن NVDEC و NVENC روی یک حافظه GPU مشترک حذف می‌کند.

این سازوکار دارای چهار بخش است: تخصیص استخر بافر مشترک با استفاده از آرایه‌های CUDA (CUarray) همراه با پرچم CUDA_ARRAY3D_VIDEO_ENCODE_DECODE که به درایور اعلام می‌کند این سطوح بین هر دو موتور کدک ویدیو به اشتراک گذاشته خواهند شد. ثبت دوگانه: همان CUarray…