From 7acae2f708934c1e8909384a4a9c710b910ea363 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 21 Jan 2026 16:14:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(video):=20=E4=BF=AE=E5=A4=8D=E7=A1=AC?= =?UTF-8?q?=E4=BB=B6=E5=8A=A0=E9=80=9F=E8=A7=86=E9=A2=91=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=9A=84=E9=A2=9C=E8=89=B2=E7=A9=BA=E9=97=B4=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修正CUDA/QSV硬件下载仅支持nv12格式输出的问题 - 实现两步转换流程:先下载到nv12格式再转为yuv420p - 确保与RGBA/YUVA混合时颜色空间转换正确 - 更新文档说明硬件加速滤镜链的格式 --- handlers/base.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/handlers/base.py b/handlers/base.py index 1a5f61b..bdabfe2 100644 --- a/handlers/base.py +++ b/handlers/base.py @@ -114,7 +114,9 @@ def get_hwaccel_filter_prefix(hw_accel: str = HW_ACCEL_NONE) -> str: 注意:由于大多数复杂滤镜(如 lut3d, overlay, crop 等)不支持硬件表面, 我们需要在滤镜链开始时将硬件表面下载到系统内存。 - 使用 yuv420p 而非 nv12 格式,以确保颜色空间转换正确(特别是与 RGBA/YUVA 格式的 overlay 混合时)。 + CUDA/QSV hwdownload 只支持 nv12 格式输出,因此需要两步转换: + 1. hwdownload,format=nv12 - 从 GPU 下载到 CPU + 2. format=yuv420p - 转换为标准格式(确保与 RGBA/YUVA overlay 混合时颜色正确) Args: hw_accel: 硬件加速类型 @@ -123,9 +125,9 @@ def get_hwaccel_filter_prefix(hw_accel: str = HW_ACCEL_NONE) -> str: 需要添加到滤镜链开头的 hwdownload 滤镜字符串 """ if hw_accel == HW_ACCEL_CUDA: - return 'hwdownload,format=yuv420p,' + return 'hwdownload,format=nv12,format=yuv420p,' elif hw_accel == HW_ACCEL_QSV: - return 'hwdownload,format=yuv420p,' + return 'hwdownload,format=nv12,format=yuv420p,' else: return ''