From ceba9a17a4c0b17c5a970c5b51328635721ea212 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 21 Jan 2026 16:24:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(video):=20=E8=A7=A3=E5=86=B3=E8=A7=86?= =?UTF-8?q?=E9=A2=91overlay=E7=BB=93=E6=9D=9F=E5=90=8E=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E5=8F=98=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 视频overlay需要在末尾统一颜色范围,避免overlay结束后range从tv变为pc - 添加format=yuv420p和setrange=tv参数来保持一致的颜色范围 - 确保视频overlay结束后的显示效果保持稳定 --- handlers/render_video.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/handlers/render_video.py b/handlers/render_video.py index b4f0622..48d19cd 100644 --- a/handlers/render_video.py +++ b/handlers/render_video.py @@ -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: # 移除最后一个标签,直接输出 # 将最后一个滤镜的输出标签替换为空(直接输出)