fix(video): 解决视频overlay结束后颜色范围变化问题

- 视频overlay需要在末尾统一颜色范围,避免overlay结束后range从tv变为pc
- 添加format=yuv420p和setrange=tv参数来保持一致的颜色范围
- 确保视频overlay结束后的显示效果保持稳定
This commit is contained in:
2026-01-21 16:24:38 +08:00
parent 7acae2f708
commit ceba9a17a4

View File

@@ -495,7 +495,9 @@ class RenderSegmentVideoHandler(BaseHandler):
# 视频 overlay 使用 eof_action=pass(结束后消失),图片 overlay 使用默认行为(保持显示)
overlay_params = 'eof_action=pass' if is_video_overlay else ''
overlay_filter = f"overlay=0:0:{overlay_params}" if overlay_params else 'overlay=0:0'
return f"[0:v]{base_filters}[base];[base][1:v]{overlay_filter}"
# 视频 overlay 需要在末尾统一颜色范围,避免 overlay 结束后 range 从 tv 变为 pc
range_fix = ',format=yuv420p,setrange=tv' if is_video_overlay else ''
return f"[0:v]{base_filters}[base];[base][1:v]{overlay_filter}{range_fix}"
else:
return ','.join(filters) if filters else ''
@@ -604,7 +606,9 @@ class RenderSegmentVideoHandler(BaseHandler):
# 视频 overlay 使用 eof_action=pass(结束后消失),图片 overlay 使用默认行为(保持显示)
overlay_params = 'eof_action=pass' if is_video_overlay else ''
overlay_filter = f"overlay=0:0:{overlay_params}" if overlay_params else 'overlay=0:0'
filter_parts.append(f"{current_output}[1:v]{overlay_filter}")
# 视频 overlay 需要在末尾统一颜色范围,避免 overlay 结束后 range 从 tv 变为 pc
range_fix = ',format=yuv420p,setrange=tv' if is_video_overlay else ''
filter_parts.append(f"{current_output}[1:v]{overlay_filter}{range_fix}")
else:
# 移除最后一个标签,直接输出
# 将最后一个滤镜的输出标签替换为空(直接输出)