ffmpeg如何在视频上叠加颜色

ffmpeg how to put color overlay over video

我想在视频上叠加颜色(蓝色、红色或绿色或十六进制值),使其具有类似 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,但是没有给它一个红色(它把红色带走了)。

我做错了什么?

两个输入必须共享相同的维度和 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 是输入视频帧的大小。

color 具有 [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