>FFmpegLab

Orchestrate video pipelines natively—with SQL, YAML, and AI.

FFmpegLab is the first API-native IDE for media engineering. Query your entire media catalog via SQL, define complex filter graphs with YAML, and orchestrate renders with Bash—all backed by a collaborative workspace that scales from your laptop to production clusters.

SQL API · YAML API · Typescript SDK · postgresql · supabase · s3 · whisper ai · ffmpeg · self-hostable · open-source

Share Renders { } Code Config
Generated Code Logs Customize
-i $MEDIA_1
-i $MEDIA_2
-filter_complex
[0:v]loop=loop=150:size=1:start=0,setdar=16/9,scale=1280:720:force_original_aspect_ra
[1:v]loop=loop=150:size=1:start=0,setdar=16/9,scale=1280:720:force_original_aspect_ra
[v0?][v1?]concat=n=2:v=1:a=0,settb=expr=1/30[c1?];
[c1?]settb=expr=1/30[v_layer0];
[v_layer0]split[v_main][v_overlay];[v_main]settb=expr=1/30[v_concat];[v_overlay]nullsink
aevalsrc=0:d=5[s0];[s0]adelay=delays=0|0,volume=10[a0?];
aevalsrc=0:d=5[s1];[s1]adelay=delays=5000|5000,volume=10[a1?];
[a0?][a1?]amix=inputs=2:duration=longest[a_concat]
-aspect 16/9
-movflags +faststart
-map [v_concat]
-map [a_concat]
-r 30
-ss 00:00:00
-to 00:00:10
-y $OUTPUT_PATH

Three native interfaces. One powerful engine.

Write SQL to query frame-level metadata. Define rendering topologies in YAML. Trigger batch jobs via Bash. The timeline and the command are just two sides of the same API-first coin.

Edit the script—or generate it via YAML

No black boxes. Drop directly into the raw filter_complex graph, or define your entire pipeline declaratively with our YAML API. Every render is reproducible, versionable, and ready for automation.

  • Direct access to the FFmpeg command and filter graph
  • Live previews with instant parameter tuning
  • Declarative YAML API for pipeline-as-code
ShareRenders{ } CodeConfig
Generated CodeLogsCustomize
[0:v]scale=1920:-2,
  setsar=1[base];
[1:v]format=rgba,
  colorchannelmixer=aa=0.6[ov];
[base][ov]overlay=
  (W-w)/2:(H-h)/2[v]

Build, fork, and share custom filter effects

Start with 30+ built-in xfade transitions, then compose your own using pure FFmpeg filter graphs. Save any effect as a reusable YAML template and share it instantly across your entire team or organization.

  • 30+ xfade transitions with precision duration control
  • Unlimited audio layers mixed via amix
  • YAML-based effect library for team-wide reuse
ShareRenders{ } CodeConfig
Generated CodeLogsCustomize
xfade=transition=
  wipeleft:
  duration=0.75:
  offset=3.0

# 30+ presets,
# or write your own.

Ship high-quality video, faster—with your whole team.

Invite your entire team into the same project. Leave timestamped comments, see timeline changes in real-time, and review cuts without endless export loops. Built for velocity.

How collaborative video editing works →

One tool, from render script to finished product

10+
Templates to build on top
50GB
Free Cloud Storage
100%
Open Source
Unlimited
Free Public Runners
✦  Zero Egress Cost S3 Storage

Store your media. Never pay to move it.

Every render, every download, every byte served to your users—$0 in egress fees. Forever. No surprise bills at the end of the month. No penalties for going viral.

Starter
€0 / forever
50 GB
  • ✓  Full S3-compatible API
  • ✓  Zero egress cost — always
  • ✓  Directly wired into your projects & renders
  • ✓  No credit card required
Best value
Pro Storage
€4 / month
1 TB
  • ✓  Full S3-compatible API
  • ✓  Zero egress cost — serve unlimited traffic
  • ✓  Perfect for rendered output delivery & archives
  • ✓  Works with any S3 client, SDK, or rclone
Enterprise
€3000 / month
1 PB
  • ✓  Full S3-compatible API
  • ✓  Zero egress cost — serve unlimited traffic
  • ✓  Perfect for any kind of large scale applications
  • ✓  Works with any S3 client, SDK, or rclone

Serving 10 TB of rendered video per month elsewhere could cost ~$900+ in egress alone. On FFmpegLab it costs €0. Not a cent.

Get your S3 Configuration

Embed FFmpeg into your stack with YAML, SQL, and native SDKs

FFmpegLab is fully open source and API-first. Pick the interface that fits your workflow: Typescript SDK for frontend apps, raw SQL for Supabase triggers, or YAML for pipeline-as-code. Connect your AI agents directly.

render.ts render.sql render.yml render.sh
import * as ffmpeglab from 'ffmpeglab-sdk';

const mediaUrl = 'https://www.ffmpeglab.com/media/zoompan.mp4'
const clientConfig = new ffmpeglab.Configuration({
  accessToken: 'API_KEY',
  basePath: 'https://api.ffmpeglab.com',
});

const client = new ffmpeglab.RendersApi(clientConfig);

client.rendersControllerCreate({renderDto:{
  project: { 
      id: 'myproject',
      title: 'myproject',
      editor: {
        code: '-i $MEDIA_1 -movflags +faststart -y $OUTPUT_PATH',
        selectedCode: 'custom'
      }
  },
  layers: [
    {
      id: 'layer1',
      media: [
        {
          id: 'media1',
          url: mediaUrl,
          folderId: "myfolder",
          filename: "zoompan.mp4",
          encoding: {}
        }
      ],
      "editor":{}
    }
  ]
}})
.then((render)=>client.rendersControllerRunRender({
  runDto:{
    id:render.id
  }
}))
          
✦  GitOps for Video

Your pipelines live in GitHub.
Push a commit, render a video.

Store every project, filter graph, and YAML pipeline as code in your repository. Version it, review it in pull requests, and let GitHub Actions trigger renders automatically on merge.

1

Commit your pipeline

Every FFmpegLab project syncs to a repo as YAML + SQL. Branch, fork, and review media pipelines exactly like application code.

2

Review in PRs

Filter graph changes show up as readable diffs. Teammates comment, suggest edits, and approve before anything renders.

3

Merge → auto-render

A GitHub Action calls the FFmpegLab API on merge. Renders run on your runners and output lands in zero-egress storage.

Every render starts as a commit.

Your pipeline history, live in the workspace. Revert a bad cut, diff a filter change, or roll back to last week's version—git semantics all the way down

git log --graph --oneline ⎇ main
v1.4 · rendered
  • f3ac91efix: xfade offset misaligned on 30fps clipsMKrendered
  • b71d204pipeline.yml: bump zoompan to 150 framesDPrendered
  • 9ce01aaMerge branch 'feat/audio-duck'CIrendering…
  • 2ea77c4feat: sidechaincompress for voiceover duckingDPrendered
  • 7710fd3effects/wipeleft.yml + duration=0.75- duration=0.5
✓ filter graph validated 3 ahead · 0 behind origin/main
.github/workflows/render.yml
name: Render on merge
on:
  push:
    branches: [main]
    paths: ['pipelines/**']   # only re-render when YAML changes

jobs:
  render:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Trigger FFmpegLab render
        run: |
          curl -X POST https://api.ffmpeglab.com/renders \
            -H "Authorization: Bearer ${{ secrets.FFMPEGLAB_API_KEY }}" \
            -F "pipeline=@pipelines/trailer.yml" \
            -F "output=storage://renders/trailer.mp4"

Change one line of YAML — a transition duration, an overlay position — push, and the finished video is regenerated. Full audit history, instant rollback via git revert, and CI checks that validate your filter graphs before they ever hit a runner.

Read the GitHub guide → Example repos on GitHub

Run it on your own infrastructure—or in the cloud

Own your entire media pipeline end-to-end. Deploy with Docker Compose or Kubernetes, bring your own PostgreSQL, S3 storage, and render runners. Scale horizontally, automate with CI/CD, and keep full control of your data plane.

docker-compose.yml
services:
  ffmpeglab:
    image: ffmpeglab/ide
    ports: ["8080:8080"]
    environment:
      - FFMPEGLAB_HOST=http://localhost:8080/webapp/
      - FFMPEGLAB_API=http://localhost:3000
      - EVOLU_DB_HOST=http://localhost:4000
      - EVOLU_DB_NAME=ffmpeglab
      - PUBLIC_HOST=https://localhost:8080/
      - PEXELS_API_HOST=https://pexels.starpy.me/
      - SUPABASE_HOST=https://office.starpy.me
      - SUPABASE_ANON_KEY=123456789qwerty
  api:
    restart: unless-stopped
    image: ffmpeglab/server
    ports:
      - "3000:3000"
    environment:
      - DB_HOST=${DB_HOST}
      - DB_USER=${DB_USER}
      - DB_PORT=${DB_PORT}
      - DB_PASSWORD=${DB_PASSWORD}
      - DB_NAME=${DB_NAME}
      - DB_MIGRATION_ENABLED=true
      - S3_BUCKET_ID=${S3_BUCKET_ID}
      - S3_ACCESS_KEY=${S3_ACCESS_KEY}
      - S3_SECRET_KEY=${S3_SECRET_KEY}
      - S3_REGION=${S3_REGION}
      - S3_ENDPOINT=${S3_ENDPOINT}
      - IS_FILE_RUNNER=true
      - IS_RENDER_RUNNER=true
      - IS_LOGS_RUNNER=true
  evolu:
    image: evoluhq/evolu:pr-5
    ports: ["4000:4000"]
# your machines. your footage. your rules.

FFmpeg guides & templates

Practical, copy-pasteable walkthroughs for the FFmpeg techniques behind every edit.

Template
Transitions
FFmpeg xfade transitions guide
Syntax, duration & offset, all 30+ presets, audio crossfades, and chaining transitions across clips.
Template
Effects
Ken Burns / Zoompan Effects – The Art of Motion
Bring still images to life with smooth pan-and-zoom animations. Master the zoompan filter to create Ken Burns effects, dynamic slideshows, and cinematic camera movements.
Template
GIF
Convert video to GIF
A quick one-liner plus the palettegen/paletteuse method for crisp, banding-free GIFs.
Template
Audio
Mixing audio with amix
Layer music, voiceover, and effects; balance levels; duck with sidechaincompress; crossfade tracks.
Template
Effects
filter_complex effects, by example
Overlay, scale, pad, crop, color correction, and chroma key — chained into one custom filter graph.
Template
Effects
xstack FFmpeg Filter – Create Video Mosaics & Grids
Stack multiple videos into custom layouts, split-screen grids, and collages — without the complex overlay chains. Master the xstack filter.
Compression
Video Compression with FFmpeg – Complete Guide to Reducing File Size
Master CRF, codec selection, presets, two-pass encoding, and hardware acceleration to reduce file size while preserving quality.
Effects
Bitstream Filters – The -bsf Power Tool
Manipulate encoded streams without decoding or re-encoding. Master h264_mp4toannexb, h264_metadata, aac_adtstoasc, noise, and more.
Effects
Video Denoising – Complete Guide to Noise Removal
Remove grain, salt‑and‑pepper, and compression artifacts with FFmpeg's powerful denoise filters. Compare hqdn3d, nlmeans, vaguedenoiser, bm3d, and more.
Effects
Optical Flow & Motion Interpolation
Create buttery-smooth slow motion, convert frame rates, and eliminate judder with the minterpolate filter. Master motion estimation, compensation, and scene detection.
Editing
Scene Detection & Automated Editing
Automatically detect scene changes, split videos, extract thumbnails, and build highlight reels with scdet, select, and blackdetect.
Audio
Advanced Audio Processing
Master loudness normalization, noise reduction, sidechain compression, and creative audio effects with FFmpeg's professional audio filter suite.
Color
Color Spaces, HDR, and Tone Mapping in FFmpeg
Convert HDR video to SDR without washed-out colors. Master zscale, tonemap, and proper color space conversion for HDR10, HLG, and Dolby Vision.
Stabilize
Stabilize shaky video
The two-pass vidstab workflow, smoothing and zoom tuning, and a quick deshake fallback.
Audio
Sidechain Compression & Audio Ducking in FFmpeg
Auto-duck background music when voiceover plays, create pumping EDM effects, and build professional audio mixes with the sidechaincompress filter.
Metadata
Metadata Preservation – Timecode, Reel Names & EXIF
Keep timecode, reel names, camera metadata, and EXIF data through transcoding, remuxing, and rewrapping. Master -map_metadata, -movflags, and the ffmetadata workflow.
Debug
FFmpeg Debugging & Troubleshooting – Read Logs, Fix Errors Fast
Stop staring at cryptic error messages. Master -loglevel, decode filtergraph failures, debug stream mapping, and use the FFmpegLab IDE as your personal linting tool.
Editing
Mask Overlay & Advanced Compositing in FFmpeg
Blur faces, create split screens, and composite videos like a pro. Master alphamerge, maskedmerge, and the overlay filter with grayscale masks.
Encoding
ROI Encoding – Region of Interest Encoding
Allocate more bitrate to faces, text, and critical regions while saving bandwidth on backgrounds. Master the addroi filter and qoffset parameter.
Effects
Lens Correction & Distortion – Remove or Add Effects
Remove barrel distortion, fisheye, and pincushion from action cameras and wide-angle lenses. Or add creative distortion effects for music videos, dream sequences, and retro vibes.
Editing
Dynamic Runtime Commands & Timeline Editing in FFmpeg
Send interactive commands to FFmpeg while it's running to change filter parameters on the fly. Master sendcmd, zmq, and timeline expressions for dynamic overlays, opacity fades, and real‑time adjustments.
Compress
Compress video & reduce file size
CRF explained, H.264 vs H.265/HEVC, two-pass bitrate, downscaling, and shrinking audio.
Convert
Convert video formats
MP4, WebM, MOV, MKV — remux vs re-encode, extract audio, and export high-quality GIFs.
Editing
Trim, cut & split video
Lossless clipping with -ss/-to, frame-accurate cuts, splitting, and joining with concat.
Text
Add text & subtitles
drawtext titles and lower-thirds, plus burning in or attaching SRT/ASS subtitles.
Speed
Speed up & slow down video
setpts and atempo for 2× cuts, timelapses, and smooth slow motion — with audio in sync.
Frames
Extract frames & thumbnails
Single stills, one frame per second, every Nth frame, auto thumbnails, and contact sheets.
Rotate
Rotate & flip video
transpose, hflip and vflip for 90/180° turns and mirrors, plus lossless metadata rotation.
Fades
Fade video & audio in and out
fade and afade for opening from black, ending on black, and ramping the soundtrack.
Crop
Crop video
crop=w:h:x:y with centering, square and 9:16 reframes, and removing black bars.
Resize
Resize & scale video
The scale filter, keeping aspect ratio, downscaling to 1080p/720p, and padding to size.
Merge
Merge & concatenate videos
The concat demuxer for lossless joins and the concat filter for mismatched clips.
Audio
Extract audio from video
Copy losslessly or convert to MP3, AAC, or WAV, and rip just a time range.
Audio
Remove & mute audio
Strip sound with -an, mute a section with the volume filter, or replace the track.
Watermark
Add a watermark or logo
Overlay a PNG in any corner, control padding and opacity, or burn in a text watermark.
Frame rate
Change frame rate (FPS)
The fps filter, 60-to-30 conversion, constant frame rate, and minterpolate smoothing.
Loop
Loop video
-stream_loop to repeat clips, loop a still into video, loop to a duration, and boomerang.
AI
DNN Filters – AI-Powered Video Processing
Super‑resolution, denoising, object detection, and image classification—all inside FFmpeg. Master the dnn_processing, dnn_detect, and dnn_classify filters.

Developer & Product guides

Practical, walkthroughs for the FFmpegLab platform.

New
AI
Agent-First Setup – FFmpegLab Server with Supabase
Complete guide to setting up FFmpegLab Server using Supabase. Includes modular bash scripts for automated setup of PostgreSQL, pgmq, S3 storage, and API keys.
New
SQL
Render Videos Using SQL – A Deep Dive into FFmpegLab Server
Translate the SDK example into raw SQL. Learn how the database models work and how to render videos by directly manipulating PostgreSQL.
New
DevOps & Automation
Environment Variables & Scalable Runners – FFmpegLab Server Architecture
Configure PostgreSQL, pgmq, S3 storage, and distribute rendering across multiple runners. The complete guide to scaling FFmpegLab Server.
New
Self-Hosting & Storage
Setting Up Supabase Storage with FFmpegLab – Auth, Buckets, TUS Uploads & Per-User RLS
Configure user authentication with magic link login, create a storage bucket with per-user RLS policies, and set up the SUPABASE_STORAGE_BUCKET environment variable for FFmpegLab. Upload files Of any size.
Product
FFmpeg GUI Libraries Compared – FFmpegLab vs. The Competition
HandBrake, Shutter Encoder, StaxRip, and a dozen more—all compared. Plus, why FFmpegLab's IDE-first, collaborative approach is a game-changer for teams and developers.
Product
Mobile Web Video Editor – Edit Videos in Your Browser, No App Required
Trim, crop, add effects, and export videos directly from your phone. FFmpegLab is a free, privacy-first mobile web video editor that runs entirely in your browser using WebAssembly.
Product
Figma for Video – Collaborative Video Editing with Templates & Teams
Collaborate in real-time, share templates, and version your video projects like design teams do. FFmpegLab brings Figma-style collaboration to video production.
Privacy
The offline, private video editor
How OPFS + WebAssembly editing keeps footage on-device, with encrypted P2P sync and zero tracking.
Self-hosting GUI
Self-host with Docker
Bring your own backend for storage, rendering, and sync with a single Docker Compose file.
Business & Technology
Applications & Startups Powered by FFmpeg
From AI video editors to privacy-first converters, discover the startups and applications built on FFmpeg. Learn how FFmpegLab enables the next generation of media companies.
✦  Stock Media Built-in

Millions of free videos & photos,
one search away

FFmpegLab integrates directly with the Pexels API. Search stock footage and images from inside the editor, drop them onto your timeline, and start editing — no downloads, no uploads, no licensing headaches.

Find your content → Pexels.com

All media is free to use under the Pexels license. Photos courtesy of Pexels creators.

✦  Fresh from the render queue

Better FFmpeg workflows, delivered.

Get practical commands, new templates, and deep-dive guides for the edits that are usually hardest to get right.

✓  Copy-pasteable commands    ✓  Editor templates    ✓  No noise
One useful email at a time.

Ship faster than ever.

Open Source · API-First · Built for Scale