I'm trying to convert a .mov to a .gif and I'm not having success.
Here's the error:
ffmpeg -pix_fmt rgb24 -i yesbuddy.mov output.gif
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers built on Jun 12 2012 17:47:34 with clang 2.1 (tags/Apple/clang-163.7.1) configuration: --prefix=/usr/local/Cellar/ffmpeg/0.11.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/clang --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --disable-ffplay libavutil 51. 54.100 / 51. 54.100 libavcodec 54. 23.100 / 54. 23.100 libavformat 54. 6.100 / 54. 6.100 libavdevice 54. 0.100 / 54. 0.100 libavfilter 2. 77.100 / 2. 77.100 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 15.100 / 0. 15.100 libpostproc 52. 0.100 / 52. 0.100
Option pixel_format not found.If I leave out the -pix_fmt rgb24 part it complains. Thoughts on how to fix?
15 Answers
The order of command line arguments matters. This command line should work but will generate a giant file:
ffmpeg -i yesbuddy.mov -pix_fmt rgb24 output.gifNote that you probably want to reduce the frame rate and size when you convert, as well as specify a start time and duration. You probably do not want to convert the entire file at its original resolution and frame rate.
ffmpeg -ss 00:00:00.000 -i yesbuddy.mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gifThe file size will still be huge. You may be able to use ImageMagick's GIF optimizer to reduce the size:
convert -layers Optimize output.gif output_optimized.gif 6 After converting:
ffmpeg -i input.mp4 input.gif Try optimize frames:
convert input.gif -verbose -coalesce -layers OptimizeFrame input_optframe.gifAnd use gifsicle to make final optimization:
gifsicle -O2 input_optframe.gif -o optimized.gifGot 6.8mb GIF from 12.2mb video with almost the same quality!
2I made a tool that bundles FFmpeg, ImageMagick and giflossy into a single easy to use command line program that you can install in one line:
I recommend anyone willing to turn videos => GIF to use it instead of trying to spend a lot of time browsing 3 documentation websites to understand how to resize the GIF or change the start/end time.
3ffmpeg -i <input source> -filter_complex "[0:v] fps=12,scale=<width>:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" <output file>In this command there are 3 tokens you need to plug in. The <input source> will be something like your-recording.mov, the <width> should be the width you want the final gif to be, and <output file> will be something like recording.gif.
This command breaks down to mean:
filter_complexwe're going to be chaining some filters together[0:v] fps=12take the first video stream in the container at 12 frames per secondscale=1024:-1resize to width of 1024 and keep aspect ratio for the heightsplit [a][b]take the current stream and split it into two (basically clone it);new filter incoming[a] palettegen [p]take the "a" stream and generate a color palette called "p";new filter incoming[b][p] paletteusetake the "b" stream and apply "p" color palette
The color palette stuff isn't always necessary for screen recordings, but is definitely required to have better colors for recorded video.
You can also plug in -ss 00:00:00.000 and -t 00:00:00.000 as needed if you are going to be clipping it as well.
ffmpeg -y -i input.mp4 -f image2pipe -vcodec ppm - | convert -delay 2 -loop 0 -layers Optimize - gif:- | gifsicle -d 3 -O3 -o optimized.giffirst use ffmpeg to convert mp4 file to images via pipe then use imagemagick to compress it to gif at last optimized it with gifsicle
I don't know why using gifscicle directly won't work.
or you can make the gif smaller by this
convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif 0