为什么我的 H.264 视频在应用视频过滤器后有绿色覆盖?
Why does my H.264 video have a green overlay after video filter is applied?
执行以下代码时:
ffmpeg -i input.mov -c:v libx264 -preset veryslow -pix_fmt yuv420p -filter_complex "drawtext=fontfile=font.ttf:fontcolor=white@1:fontsize=h/6:x=(w-text_w)/2:y=(h-text_h)/2:text='Henk de Vries'[watermark];[0][watermark]blend=all_mode=difference:all_opacity=1" output.mp4
输出文件有绿色覆盖层。使用其他混合模式时,结果会因某些模式显示正确的颜色而其他模式显示绿色和粉红色而有所不同。
我知道输入文件有 yuv420p 色彩空间。我认为混合滤镜只支持 rgba 模式,但我不确定。
如何避免绿色叠加并获得原始颜色? (e.i。原始输入视频的样子)
您在差异模式下将视频与几乎相同的副本混合,因此大部分像素将 zero-ed 消失。在 YUV 编码中,两个色度通道中的 0 值像素表示绿色。亮度通道 (Y) 不是亮度的纯粹表示,因此亮度值 0
以及两个色度 0
会导致呈现绿色。
Rotem 的答案是正确的,但不需要中间文件。只需事先转换为 RGB space。
ffmpeg -i input.mov -c:v libx264 -preset veryslow -pix_fmt yuv420p -filter_complex "[0]format=gbrp,split=2[text][orig];[text]drawtext=fontfile=font.ttf:fontcolor=white@1:fontsize=h/6:x=(w-text_w)/2:y=(h-text_h)/2:text='Henk de Vries'[watermark];[orig][watermark]blend=all_mode=difference:all_opacity=1" output.mp4
执行以下代码时:
ffmpeg -i input.mov -c:v libx264 -preset veryslow -pix_fmt yuv420p -filter_complex "drawtext=fontfile=font.ttf:fontcolor=white@1:fontsize=h/6:x=(w-text_w)/2:y=(h-text_h)/2:text='Henk de Vries'[watermark];[0][watermark]blend=all_mode=difference:all_opacity=1" output.mp4
输出文件有绿色覆盖层。使用其他混合模式时,结果会因某些模式显示正确的颜色而其他模式显示绿色和粉红色而有所不同。
我知道输入文件有 yuv420p 色彩空间。我认为混合滤镜只支持 rgba 模式,但我不确定。
如何避免绿色叠加并获得原始颜色? (e.i。原始输入视频的样子)
您在差异模式下将视频与几乎相同的副本混合,因此大部分像素将 zero-ed 消失。在 YUV 编码中,两个色度通道中的 0 值像素表示绿色。亮度通道 (Y) 不是亮度的纯粹表示,因此亮度值 0
以及两个色度 0
会导致呈现绿色。
Rotem 的答案是正确的,但不需要中间文件。只需事先转换为 RGB space。
ffmpeg -i input.mov -c:v libx264 -preset veryslow -pix_fmt yuv420p -filter_complex "[0]format=gbrp,split=2[text][orig];[text]drawtext=fontfile=font.ttf:fontcolor=white@1:fontsize=h/6:x=(w-text_w)/2:y=(h-text_h)/2:text='Henk de Vries'[watermark];[orig][watermark]blend=all_mode=difference:all_opacity=1" output.mp4