Loading...
Bytes is my collection of short-form posts, tips, and things I learn as I build software.
ffmpeg is a fantastic tool for converting videos between various formats. I recently needed to create a GIF from a screen recording, which you can do with ffmpeg, but the command isn’t the easiest to remember.
#!/bin/bash
ffmpeg -i "$1" \
-vf "fps=10,scale=1080:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
If you’re curious what this command does, here’s an explanation of each part, courtesy of ChatGPT.
-i "$1": Input file is the first command line argument.-vf: Applies video filters.
fps=10: Sets the frames per second to 10.scale=1080:-1: Scales the video to a width of 1080 pixels; height is
set automatically to keep aspect ratio.flags=lanczos: Uses the Lanczos filter for scaling, known for high
quality.split[s0][s1]: Splits the video stream into two streams, s0 and
s1.[s0]palettegen[p]: Generates an optimized palette (p) for the GIF
from stream s0.[s1][p]paletteuse: Applies the generated palette to stream s1.-loop 0: Makes the GIF loop indefinitely."${2:-${i%.*}.gif}": Output file is either the second command line
argument, or the input file renamed to .gif.We can now call our gif command like this to convert our video to a GIF!
gif input.mp4 output.gif