2

假设我有一个 2 秒长的 8 帧动画 GIF。我想构建一个 30 秒长的视频文件(此时编解码器并不重要),其中包含一遍又一遍地重复的源 GIF。

是否可以仅使用ffmpeg来做到这一点 使用convert或其他一些预处理实用程序的答案不计入[原因是我想在 PandaStream 上使用它,它没有该实用程序]。我们还假设 shell 脚本也不存在问题,尽管它可以是多个 ffmpeg 命令。


我尝试过但不起作用的事情(尽管也许我做错了,我对 ffmpeg 不是很熟悉):

  1. 使用ffmpeg 文档-loop_input中的,-loop_output选项。同时使用 ffmpeg 1.2 和 2.0,我收到一条错误消息。我可能使用了这个错误,因为该错误是关于无法识别该选项,尽管文档说它已被弃用。Unrecognized option 'loop_[input|output]'

  2. -loop选项。似乎对 GIF -> Video 没有任何作用。我认为这个标志和上面的标志与生成动画 GIF 作为输出有关。

  3. 康卡特。做类似的事情:

    ffmpeg -i "concat:image.gif|image.gif|image1.gif|image2.gif|image3.gif|image4.gif" image-long.gif

    结果是一个 16 帧的 gif(因此两个 gif 被连接),这是一个进步,尽管输出 gif 的质量要低得多。


我有点不知所措(我已经尝试了上述概念的许多其他排列),我现在正处于“用棍子戳它”的地步,希望有人已经做到了!

4

1 回答 1

7

可能吗?是的。

查看如何连接(加入、合并)媒体文件,我们可以将 gif 和转码为 mpeg 流(您可以将第一个复制两次):

ffmpeg -i image.gif -f mpegts image1.ts
ffmpeg -i image.gif -f mpegts image2.ts
ffmpeg -i image.gif -f mpegts image3.ts

然后连接它们,输出为 gif

ffmpeg -i "concat:image1.ts|image2.ts|image3.ts" -pix_fmt rgb24 output.gif

从 mp4 或类似文件开始似乎会产生更好的结果;将第一步替换为

ffmpeg -i image.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts image1.ts

并重复其他副本。

我创建了相同文件的多个副本,因为如果我多次尝试concat:同一个文件 ( concat:image1.ts|image1.ts|image1.ts) 它不起作用。

享受

于 2013-10-23T04:05:19.340 回答