执行以下代码时:
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 colorspacing。我认为Blend过滤器仅支持rgba模式,但我不确定。
如何避免绿色覆盖并获得原始颜色? (例如原始输入视频的样子)
答案 0 :(得分:1)
您正在以差异模式将视频与几乎相同的副本混合,因此大多数像素将被归零。在YUV编码中,两个色度通道中的0值像素代表绿色。亮度通道(Y)并非纯粹表示亮度,因此亮度0
以及两个色度均为0
时会导致呈现绿色。
Rotem的答案在右行,但不需要任何中间文件。只需预先转换为RGB空间即可。
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