66

What command would I use to convert an mp4 or mv4 video file to an animated gif, and vice versa. That is, convert a animated gif to a mp4 or mv4.

migrated from stackoverflow.com Jun 12 '12 at 21:11

This question came from our site for professional and enthusiast programmers.

87

Here's what worked for me:

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

movflags – This option optimizes the structure of the MP4 file so the browser can load it as quickly as possible.

pix_fmt – MP4 videos store pixels in different formats. We include this option to specify a specific format which has maximum compatibility across all browsers.

vf – MP4 videos using H.264 need to have a dimensions that are divisible by 2. This option ensures that’s the case.

Source: http://rigor.com/blog/2015/12/optimizing-animated-gifs-with-html5-video

  • 4
    Thanks this is the only version that worked for me on osx. – Pykler Jul 14 '16 at 23:52
  • 1
    This worked for me on Ubuntu 16.10 with ffmpeg 3.0.2, where the top answer didn't – cat Oct 23 '16 at 22:54
  • 1
    May as well crop instead of scaling (replace scale with crop), as you're only going to be cutting off at most 1 pixel. Scaling might make things blurry – Jezzamon Feb 1 '18 at 8:12
  • This cut off the last few seconds for me. Resulting mp4 ended early. – callum Feb 22 '18 at 13:06
34

In my case, using ffmpeg directly did the trick and provided the best result:

$ ffmpeg -f gif -i infile.gif outfile.mp4
  • 2
    produced a blank (corrupted) video on os x – Pykler Jul 14 '16 at 23:53
  • 2
    @Pykler you should probably increase verbosity and/or check the log file to understand what's happening. – BenC Jul 17 '16 at 19:02
  • Me too, probably the "divisible by 2 dimensions" suggested in vico Vault's answer. (which worked for me) – lapo Oct 24 '16 at 11:20
  • This method worked perfectly for me. (The top answer caused 3 seconds to be cut off the end.) EDIT: oh but it doesn't play on iOS :( – callum Feb 22 '18 at 13:07
  • A web page says you should just add -pix_fmt yuv420p – beefeather Aug 20 '18 at 16:06
2

Another way to convert GIF animation to video:

ffmpeg -i your_gif.gif -c:v libvpx -crf 12 -b:v 500K output.mp4

-crf values can go from 4 to 63. Lower values mean better quality. -b:v is the maximum allowed bitrate. Higher means better quality.

1

MacOs version is as following:

$ ffmpeg -i input.avi -pix_fmt yuv420p output.mp4

References

0

If you want to make the output in "n loops", look at this solution in one shot

Ex: converting normal.gif to loop.mp4

for 2 loops movie:

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

for 5 loops movie:

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

BE AWARE: there is a -y [for the overwrite]

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy