You've already forked FrameTour-RenderWorker
fix(video): 修复硬件加速视频处理的颜色空间转换问题
- 修正CUDA/QSV硬件下载仅支持nv12格式输出的问题 - 实现两步转换流程:先下载到nv12格式再转为yuv420p - 确保与RGBA/YUVA混合时颜色空间转换正确 - 更新文档说明硬件加速滤镜链的格式
This commit is contained in:
@@ -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 ''
|
||||
|
||||
|
||||
Reference in New Issue
Block a user