GIF 叠加层使用 ffmpeg 闪烁

ves*_*sna 6 ffmpeg gif

在过去的几个月里,我一直在玩 ffmpeg 并且无法摆脱在添加 GIF 文件作为叠加层时遇到的问题。

基本上我想要实现的是添加一个透明的 GIF 动画作为 MP4 视频的叠加层。

请在下面找到我正在使用的示例命令:

ffmpeg \
  -i 0689a8a9-43b5-45d2-b0e8-acbea6905ce1.mp4 \
  -ignore_loop 0 \
  -i 02a6e696-969b-4a90-9444-e4b0b4d6f6da.gif \
  -t 10.000000 \
  -filter_complex "[0:v][1:v]overlay=enable='between(t, 1, 3)'[overlay]" \
  -map '[overlay]' \
  -pix_fmt yuv420p \
  output.mp4
Run Code Online (Sandbox Code Playgroud)

为了更好地理解,请注意:

  • -ignore_loop 0 只要启用覆盖,我就可以循环播放动画
  • -t 让我的视频持续 10 秒
  • overlay=enable='between(t, 1.0, 3.0)' 设置它可见的时间间隔

但是,当我运行此命令时,在 GIF 消失前的几毫秒(3 秒时),它开始闪烁。如果我逐帧查看它,它实际上会从视频中消失,然后又回来,并最终按预期消失。

在此链接中找到一个带有黑色背景和来自 giphy 的随机 GIF 的示例。资产可以在这里找到。

我可能在这里遗漏了一些东西。你有什么提示吗?

我跑ffmpeg4.3.1

先感谢您

Suu*_*hgi 2

我可以用任意 gif 来复制这个。我怀疑覆盖过滤器中存在错误。请随意将其呈现给https://trac.ffmpeg.org

一旦设置了时间过滤(过滤器被列为具有时间线支持),就会发生这种情况,并且还会根据时间边界而变化。后者不应该是这种情况。

微量元素

ffmpeg \
  -t 10 -s qcif -f rawvideo -pix_fmt rgb24 -r 25 -i /dev/zero \
  -ignore_loop 0 -i 'https://media.tenor.com/images/c50ca435dffdb837914e7cb32c1e7edf/tenor.gif' \
  -filter_complex "overlay=enable='between(t,3,7)'" \
  -f flv - | ffplay -
Run Code Online (Sandbox Code Playgroud)

作为解决方法,您可以尝试将 gif 转换为 mp4 ( ffmpeg -re -i <gif> [...]) 并将白色区域设置为透明。