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如何在视频上放置颜色叠加的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:如何使用flutter_ffmpeg为视频添加水印和文字等叠加层?