图像序列转换为带有运动轨迹的动画?

图像序列转换为带有运动轨迹的动画?

假设我有一个图像序列——下面是bash使用 ImageMagick生成这样一个序列的示例convert

for i in $(seq 1 10); do fname=$(printf "circle_%02d.png" $i); x=$((30+10*$i)); sz=$((10+2*$i)); magick convert -size 300x300 xc:LavenderBlush2 -stroke SeaGreen -fill PaleGreen -strokewidth 2 -draw "translate $x,$x circle 0,0 $sz,0" $fname; echo $fname; done

然后我可以使用 ImageMagick 从此图像序列中创建动画 .gif:

magick convert -delay 20 circle*.png -loop 0 animcircle.gif

我已经将这些图片发布到https://i.stack.imgur.com/8dLLl.jpg;并且 gif(不幸的是,我无法链接到我已经在 imgur 上发布的相同 animcircle.gif,所以我不得不再次上传...有人应该发明某种技术,你只需上传一次,然后使用链接在网页上显示图像 - 这将是惊人的!)看起来像这样:

动画片

因此,这里发生的情况是,图像被“逐字逐句”地作为帧一个接一个地附加,我们得到了动画的印象。

然而我想要做的是某种运动轨迹:

  • 第一幅图像按原样/逐字添加为视频帧
  • 第二帧变成类似 0.9*first_image + second_image 的东西 - 所以我在第二帧中得到了第一幅图像的“鬼影痕迹”
  • 第三帧变成类似于 0.8*第一幅图像 + 0.9*第二幅图像 + 第三幅图像 - 所以我在第三帧中有第一幅和第二幅图像的“鬼影痕迹”,
  • ETC

这可能很棘手,因为添加背景像素肯定会使背景颜色饱和,而且我不确定可以使用什么技术使其不那么明显 - 所以理想情况下,我宁愿有一个工具或库对此进行某种处理。

我想知道,是否可以在命令行工具中执行此操作,例如ffmpeg- 或者是否有允许执行此类操作的 Python 库?我最终想创建一个.mp4视频 - 但将图像序列转换为“运动跟踪”图像序列也可以(因为 image-sequence-to-mp4 是ffmpeg类似工具的标准做法)

答案1

好吧,您已经确定 imagemagick 和 ffmpeg 是实现此目的的工具,所以我认为您只需稍微绞尽脑汁并进行一些实验就能获得成功。

由于您无论如何都要以编程方式生成圆圈,因此您能否同时使用 alpha 透明度生成轨迹?

我不知道它是否会在命令行上显示为一行,但一个简短的 bash 或 python 循环肯定可以轻松完成它,只需从绘制最大透明度的“最旧”圆圈开始,然后在顶部绘制每个第 N 个圆圈(while n <i)直到绘制当前圆圈。

这比生成“单球”图像然后透明地堆叠它们要容易得多,尽管使用 imagemagick 使背景颜色透明然后在空白背景颜色之上透明地堆叠框架可能会实现相同的结果。

相关内容