VideoFlowcodeGitHubTry itCoreRenderersReact Video EditorPlaygroundExamplesDocscodeGitHubTry it
Comparison

VideoFlow vs. FFmpeg — programmatic video without the shell scripts.

FFmpeg is powerful. Its filtergraph syntax is also notoriously write-once, read-never. VideoFlow lets you compose the same kinds of videos in typed code and portable JSON — then use FFmpeg as the workhorse underneath where it counts.

VideoFlowFFmpeg CLI
Learning curveFluent, typed APIDense flag syntax, filtergraph DSL
ComposabilityJSON is data — version, diff, templateShell strings, often copy-pasted
Preview before renderLive DOM preview, frame-accurateRe-render or trial-and-error
Audio mixingDeclarative, per-layerComplex filtergraph plumbing
Cross-platformBrowser + Node + serverWherever ffmpeg binary lives
TypingFull TS types for every propNone
Same job, different shape

A fade-in and a caption — two ways.

FFmpeg

ffmpeg -i bg.mp4 -vf \
  "drawtext=text='Hello':fontsize=120:\
  x=(w-text_w)/2:y=(h-text_h)/2:\
  alpha='if(lt(t,1),t,1)'" out.mp4

VideoFlow

const $ = new VideoFlow();
$.addVideo({}, { source: 'bg.mp4' });
const t = $.addText({ text: 'Hello', fontSize: 4 });
t.fadeIn('1s');
await $.renderVideo();
FAQ

Frequently asked.

Does VideoFlow use FFmpeg under the hood?

No — by default the server renderer encodes via WebCodecs + MediaBunny inside headless Chromium, so ffmpeg is not required. You can opt in with { ffmpeg: true } when you need custom encoder flags.

Can I still drop into a filtergraph?

Not directly — VideoFlow abstracts the filtergraph. For most production videos you will not need to.

What about performance?

Server rendering is frame-by-frame and deterministic. Browser rendering is on-device and cancellable.

Try the playgroundGitHub
VideoFlow

Open-source toolkit for composing videos from code.

Product

CoreRenderersReact Video EditorPlayground

Learn

DocsAPI referenceExamplesvs. Remotionvs. FFmpeg

Project

GitHubLicenseContact

Legal

TermsPrivacy
© 2026 VideoFlow. Apache-2.0 core.