ffmpeg如何在视频上放置颜色叠加

Posted

技术标签:

【中文标题】ffmpeg如何在视频上放置颜色叠加【英文标题】:ffmpeg how to put color overlay over video 【发布时间】:2016-02-17 13:03:23 【问题描述】:

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

我做错了什么?

【问题讨论】:

请发布您的命令的完整控制台输出。 谢谢,这里是要点link 尝试我更新的答案中的命令 嗨 aergistal,效果很好。太感谢了。颜色更粉红色,但我认为当您放置不透明度时这是正常的。也许我必须像你提议的那样使用“0xFF000050”(带有alpha)。即使不透明度为 1,我仍然可以透过颜色叠加层看到。 是的,您可以进行实验。如果需要,您可以使用png 执行相同的操作。如果它解决了您的问题,请接受答案。 【参考方案1】:

两个输入必须共享相同的维度和 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

【讨论】:

感谢 aergistal,我拿走了你的代码,但仍然有同样的错误(SAR 0:1 和 1:1)。我也得到“无法在 Parsed_blend_0 上配置输出板”,但以前也有。 aergistal,颜色真的不怎么好用。如果我选择蓝色或绿色,这并不重要。它总是“粉红色的”。它只会变得更深的白色,但颜色不会出现。你知道解决方案吗? 看看blend参数。它有多种模式。 感谢我发现它是 mode_all:overlay(不是屏幕)我读到的 lavfi 相当于 -filter_complex。你为什么要把他们分开?我想与我的其他代码结合使用,但这很困难:-i audio.mp3 -shortest (=> another audio) -shortest -t 8 (=> can only be 8sec long) crop = 500:500 (=>crop它)这不适用裁剪: 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:输出.mp4

以上是关于ffmpeg如何在视频上放置颜色叠加的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg在另一个上叠加视频

FFMPEG - 以特定的时间间隔在视频上叠加多个视频

Flutter:如何使用flutter_ffmpeg为视频添加水印和文字等叠加层?

使用 FFmpeg 在特定时间将视频叠加到另一个视频上

在Android中使用FFMPEG在另一个视频上循环叠加视频

FFmpeg - 将一个视频叠加到另一个视频上?