假设我有一个8帧动画GIF,长度为2秒。我想构建一个30秒长的视频文件(编解码器在这一点上并不重要),该文件由源GIF反复重复组成。
是否可以仅使用ffmpeg
来执行此操作?使用convert
或其他一些预处理实用程序的答案不计算[原因我想要在PandaStream上使用它,它没有那个实用程序]。让我们假设shell脚本也是不可能的,尽管它可以是多个ffmpeg命令。
我尝试过的东西不起作用(虽然我做错了,我对ffmpeg并不十分熟悉):
使用ffmpeg docs中的-loop_input
,-loop_output
选项。使用ffmpeg 1.2和2.0,我收到Unrecognized option 'loop_[input|output]'
错误消息。我可能会使用这个错误,因为错误是关于不能识别该选项,尽管文档说它已被弃用。
-loop
选项。似乎没有用GIF做任何事情 - >视频。我认为这个标志和上面的标志与生成动画GIF作为输出有关。
的毗连。做类似的事情:
ffmpeg -i“concat:image.gif | image.gif | image1.gif | image2.gif | image3.gif | image4.gif”image-long.gif
结果是16帧gif(所以两个gif串联起来)这是进步,虽然输出gif的质量要低得多。
我有点在我的智慧结束(我已经尝试了上述概念的许多其他排列),我现在正在“用棍子戳它”,希望有人在那里做到了!
答案 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
),它就不起作用。
享受