This script re-encodes the seconds between second 25 and 45 of an
input.mov video from
mp4; rotates the frames 180 (the
hflip,vflip flags flip all pixels vertically and horizontally); removes the audio (with the
-an flag); and speeds up the video (i.e., skips frames, with the flag
setpts=0.05*PTS, which you could adjust to have more frames, for instance, as
ffmpeg -ss 00:00:25 -to 00:00:45 \ -i "input.mov" \ -an -filter:v "hflip,vflip,setpts=0.05*PTS" \ "output.mp4"
Many platforms—among which are Google PageSpeed or ImgIX—recommend serving animated assets over video formats as opposed to GIF animations. GIFs are heavy, and data transfer can be reduced somewhere between two and twenty times (when using the
webm format) and, on top of that, videos can be streamed.
ffmpeg -i animation.gif animation.mp4
ffmpeg -i animation.gif -c vp9 -b:v 0 -crf 12 my-animation.webm
crf· The range of the CRF scale is 0–51, where 0 is lossless, 23 is the default, and 51 is worst quality possible. A lower value generally leads to higher quality, and a subjectively sane range is 17–28. Consider 17 or 18 to be visually lossless or nearly so; it should look the same or nearly the same as the input but it isn't technically lossless. The range is exponential, so increasing the CRF value +6 results in roughly half the bitrate / file size, while -6 leads to roughly twice the bitrate. Choose the highest CRF value that still provides an acceptable quality. If the output looks good, then try a higher value. If it looks bad, choose a lower value.
b:vmaximum bit rate allowed. Higher means better quality.