Drawvg Filter for FFmpeg

New FFmpeg tool lets you draw on videos; cheers, groans, and turtle jokes

TLDR: FFmpeg’s new drawvg lets you script drawings and effects directly on videos with a simple mini-language. Fans are ecstatic for easy annotations and custom transitions, while others roast the “ugly” command syntax and debate whether this replaces older tools—making it a big deal for DIY video creators.

FFmpeg just dropped an experimental trick called drawvg, a mini “script” language that lets you sketch shapes, captions, timers—basically vector art—right onto video. Think: progress rings, spotlight boxes, circle wipe transitions, even wavy distortions. It’s nerdy magic, but the real fireworks exploded in the comments.

One camp is thrilled. Creators cheered this as an easy way to add self-explanatory annotations to tutorials. Power users sprinted past “wait for release” and straight into compiling the cutting-edge build, bragging that they rebuilt FFmpeg overnight just to play with it. Another crowd is stunned there’s an entire new mini-language (a DSL) for drawing, but pleasantly surprised at how handy it looks.

Then the drama: syntax haters vs. command-line lifers. A top gripe slammed the “ugly” command spaghetti needed to run it, while old-school video folks joked that this might replace legacy scripting tools like Avisynth. Meanwhile, nostalgia erupted when one commenter declared vector graphics a “solved problem” thanks to turtle graphics—yes, the school-era cursor turtle made a cameo as the thread’s unofficial mascot. Verdict: drawvg turns FFmpeg into a video doodle pad, and the crowd is equally split between “shut up and render” and “why does the command look like alphabet soup” — all while posting turtle memes for moral support.

Key Points

  • drawvg is an experimental FFmpeg filter that renders vector graphics onto video frames using scripts written in VGS.
  • VGS is a concise, domain-specific language inspired by MVG, SVG path syntax, Tcl-like argument separation, and PostScript command names, with rendering via Cairo.
  • VGS supports FFmpeg expressions for dynamic graphics, including frame-based calculations, metadata access, and pixel color sampling.
  • Examples show integrations: a progress indicator, metadata-driven crop rectangle, circle-based transitions, custom alpha-mask transitions, and pixelization using rhombuses.
  • A wave effect is achieved by generating a grayscale map with drawvg, smoothing it with boxblur, and using it as xmap input for the displace filter.

Hottest takes

"vector graphics is a solved problem... turtle graphics" — torginus
"the syntax it uses horrible" — shevy-java
"immediately re-built ffmpeg from master" — jasode
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.