如何使用ffmpeg创建mp4作为输出时,有限次数循环gif文件

时间:2018-06-18 13:42:18

标签: ffmpeg

我可以使用以下命令将gif文件转换为mp4:

ffmpeg -i animated.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.mp4

我想做的是循环gif动画3次并转换为mp4。

我可以使用2个shell命令执行此操作。首先从上面开始,然后将相同的视频连接3次。

ffmpeg -f concat -safe 0 -i <(printf "file '$PWD/video.mp4'\n%.0s" {1..3}) -c copy videoloop.mp4

我也尝试过-ignore_loop 0选项并设置时间。它确实有效,但它不是我想要做的,因为我可以扩展视频,但不能完全做出3个循环。

ffmpeg -ignore_loop 0 -i animated.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -t 12 videoloop.mp4

因为你可以看到我已经能够实现我想要的东西,但是有2个shell命令:

ffmpeg -i animated.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.mp4
ffmpeg -f concat -safe 0 -i <(printf "file '$PWD/video.mp4'\n%.0s" {1..3}) -c copy videoloop.mp4

只用一次ffmpeg调用就可以做到这一点吗?

我尝试使用-loop选项输入文件。它不适用于GIF。我也尝试过-stream_loop。它会造成一些损坏的东西。

1 个答案:

答案 0 :(得分:0)

在处理LOOPING时,我分两步将 gif 转换为 mp4

例如GIF ---> LOOP ---> MP4

  

首先循环播放gif本身。在此示例中,输出将被添加2次重复

     

[最终文件将播放一次,外加2次重复(循环)]

ffmpeg -stream_loop 2 -i normal.gif loop.gif
  

将LOOPED GIF转换为mp4

ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4