仅使用ffmpeg,是否可以消耗源GIF图像并输出设定长度> 1的视频。通过输入GIF一个循环?

时间:2013-09-18 22:05:10

标签: loops video ffmpeg gif pandastream

假设我有一个8帧动画GIF,长度为2秒。我想构建一个30秒长的视频文件(编解码器在这一点上并不重要),该文件由源GIF反复重复组成。

是否可以仅使用ffmpeg来执行此操作使用convert或其他一些预处理实用程序的答案不计算[原因我想要在PandaStream上使用它,它没有那个实用程序]。让我们假设shell脚本也是不可能的,尽管它可以是多个ffmpeg命令。


我尝试过的东西不起作用(虽然我做错了,我对ffmpeg并不十分熟悉):

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

  2. -loop选项。似乎没有用GIF做任何事情 - >视频。我认为这个标志和上面的标志与生成动画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 个答案:

答案 0 :(得分:5)

有可能吗?是。

查看How to concatenate (join, merge) media files,我们可以将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),它就不起作用。

享受