FFmpeg如何在视频上添加彩色叠加层

6
我希望在视频上加上颜色叠加层(蓝色、红色或绿色或十六进制值),使其具有Instagram滤镜效果。
我认为应该按以下方式进行:
ffmpeg -i video.mp4 -i "red.png" -filter_complex "blend=all_mode='screen':all_opacity=0.7" output.mp4

或者使用all_mode=overlay

但是我遇到了一个错误:

First input link top parameters (SAR 0:1) do not match the corresponding second input link bottom parameters (SAR 1:1).

我也尝试使用lutrgb=r=1.5,但这并没有使它变成红色(它会去掉红色)。

我做错了什么?


1
请发布您的命令的完整控制台输出。 - aergistal
谢谢,这是Gist链接:link - flieks
请尝试在我更新的答案中执行该命令。 - aergistal
嗨,aergistal,非常感谢您的帮助,这个方法很有效。当我使用不透明度时,颜色变得更粉红了,但我认为这是正常的。也许我需要像您建议的那样使用“0xFF000050”(带有alpha通道)来解决这个问题。即使不透明度设置为1,我仍然可以透过颜色叠加看到下面的内容。 - flieks
感谢所有的帮助 :) - flieks
显示剩余4条评论
1个回答

15

这两个输入必须具有相同的尺寸和SAR。您可以使用 setsar 滤镜来设置相同的SAR,或者通过使用 color 来完全避免使用图像文件:

ffmpeg -i video.mp4 -f lavfi -i "color=red:s=1280x720" -filter_complex "blend=shortest=1:all_mode=overlay:all_opacity=0.7" output.mp4

s=1280x720代表输入视频帧的尺寸。

颜色采用[0x|#]RRGGBB[AA]格式。有关详细信息,请参见颜色


更新:

如果您仍然遇到输入视频SAR的问题,请尝试使用setsar滤镜明确设置它:

ffmpeg -i video.mp4 -f lavfi -i "color=red:s=1280x720" \
-filter_complex "[0:v]setsar=sar=1/1[s];\
[s][1:v]blend=shortest=1:all_mode=overlay:all_opacity=0.7[out]" \
-map [out] -map 0:a output.mp4

谢谢aergistal,我使用了你的代码但是仍然出现相同的错误(SAR 0:1和1:1)。 我还遇到了“Failed to configure output pad on Parsed_blend_0”的问题,但这个问题之前也存在。 - flieks
aergistal,颜色并不真正起作用。如果我选择蓝色或绿色,都没有什么区别。它总是“粉红色的”。只有白色变得更暗了,但颜色并没有显现出来。你知道解决方案吗? - flieks
看一下混合参数。它有多种模式。 - aergistal
谢谢,我发现它的模式是mode_all:overlay(而不是screen)。我读到lavfi相当于-filter_complex。为什么要将它们分开?我想与我已有的其他代码结合起来,但这很困难: -i audio.mp3 -shortest(=>另一个音频) -shortest -t 8 (=> 只能是8秒长) crop = 500:500 (=> 裁剪它)这不适用于裁剪: ffmpeg -i video.mp4 -f lavfi -i "color=Red:s=1280x720" -i audio.mp3 -shortest -t 8 -filter_complex "[0:v]setsar=sar=1/1[s];[s][1:v]blend=shortest=1:all_mode=overlay:all_opacity=0.7[out]; crop=500:500[out]" -map [out] -map 2:a output.mp4 - flieks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接