Early access · free while we build

Learn how video actually works.

Courses and labs where every diagram is a real, runnable tool. Build an FFmpeg pipeline as a graph, watch the command write itself, then run it in your browser — no install, nothing uploaded.

Free account to tryRuns on ffmpeg.wasmBring your own binary
5 courses
FFMPEG to pipelines
8 tools
one workspace
In-browser
real ffmpeg runs
Free
while in early access
Try it here

A graph is a command. A command is a graph.

Click a node to change it, click a flag to jump to its node, or type in the command and watch the graph follow.

FFMPEG StudioLIVE · edit either side
Click a node on the canvas to change what it does — the command updates as you go.
The command
ffmpeg
Or type it — the graph follows
Showing the command the graph produces. Type in it and the nodes above follow.
01

Tools

Build, measure, inspect and repair. Every one runs in the browser, and they hand files to each other.

Open the workspace
Build it as a graph

Drop a filter in. The command writes itself.

No more guessing at -filter_complex syntax. Add the steps you want, reorder them, and read the exact command you would have had to write by hand.

Add a step
Your pipeline
Sourcebunny.mp4
Scalescale=1280:720
Outputout.mp4 · H.264
Generated command
ffmpeg -i bunny.mp4 -vf "scale=1280:720" -c:v libx264 -crf 23 -c:a copy out.mp4
3
nodes on canvas
1
filter chains
1
inputs
Open this in the Studio
Adaptive streaming, felt

Drag the bandwidth. Watch ABR decide.

A ladder is just a list of rungs and a rule for choosing between them. Pull the network down and see which rung the player picks, how the buffer reacts, and where a viewer notices.

3.2 Mbps
Comfortable at the top
ABR is on 540p (960×540) with 2.3× headroom, so segments arrive faster than they play.
Bitrate laddermaster.m3u8
1080p5200k
720p2800k
540p1400kplaying
360p800k
234p400k
12 s
buffer
0.9 s
startup
0
stalls / min
Run the real thing in the DASH Lab
See what a setting costs

CRF 23 or CRF 40? Drag and decide.

Every encoding choice trades size against quality. Instead of reading about it, move the handle: the same frame, two settings, with the file size each one produced.

ffmpeg -i bunny.mp4 -c:v libx264 -crf 40 -preset medium out.mp4
CRF 23 · referenceCRF 40
4.8 MB · visually clean1.2 MB · blocking in the gradients
Illustration of compression artifacts. Run your own file in the Studio for the real numbers.
Real-time, step by step

Watch a WebRTC call actually connect.

Offer, answer, ICE candidates, then media. Every article draws this as four arrows; here you step through it and read what each side is really sending.

createOffer()The caller describes what it can send: codecs, resolutions, and its media lines.
setRemoteDescription()The callee reads the offer and answers with the subset it agrees to.
ICE gatheringBoth sides collect host, reflexive and relay candidates and trickle them across.
Connectivity checksSTUN pings run over every pair; the first pair that answers both ways wins.
ConnectedDTLS handshake completes, SRTP starts, and frames flow directly between the peers.
Camera idle — start the call to capture
pc1 · sender720p30
signalingStatenew
No media until the peers connect
pc2 · receiver
signalingStatenew
sent
received
round trip
path
On the wire
Nothing exchanged yet — start the call.
Do it with real peer connections
Corruption Check

A file that will not play, explained in plain words

Drop the file in and it reads the container itself: a truncated moov, a broken index, timestamps that run backwards. Each finding says what it means, how bad it is, and the command that repairs it — one click sends that command to the Studio.

broken-export.mkv3 findings
moov atom is truncatedfatalThe index that tells a player where every frame lives was cut off mid-write. Most players refuse the file outright.ffmpeg -i broken-export.mkv -c copy -movflags +faststart fixed.mp4
Non-monotonic DTS on stream 1warningAudio timestamps step backwards at 00:01:12. Playback drifts, and remuxing silently drops packets.ffmpeg -fflags +genpts -i broken-export.mkv -c copy fixed.mkv
Last 0.4 s of video is missinginfoThe final GOP never finished encoding. Trimming to the last keyframe gives a clean end.ffmpeg -i broken-export.mkv -t 00:03:06.6 -c copy trimmed.mkv
02

Learning

Five courses, study sessions and certificates — all pointed at the same tools you just used.

Browse the courses
Five courses

Lessons that end in a tool, not a quiz you forget

FFMPEG, HLS, MPEG-DASH, WebRTC and Media Pipelines. Read the idea, open the graph it describes, change it, break it, run it. Here is a real question from the FFMPEG course.

FFMPEG · Video processing · Lesson 4
You want to scale a video to 720p without re-encoding the audio. Which command does it?
Pricing

Free to learn. Free to install.

Every course, every lab, every browser tool and the desktop app are free with a free account. Pro is for keeping your work: 30 GB of cloud storage, unlimited saved pipelines and certificates.

Free
$0forever
All five courses and both labsEvery browser tool, unlimited useDesktop app with hardware encoding10 files in your library
Start free
ProEarly access price
$12.99per month
30 GB Media Library cloud storageUnlimited saved pipelines and recipesCertificates and course completionCloud sync across your machines
Go Pro
Compare everything
Questions

Before you open it

Open a lesson. Change one flag. See what happens.

That is the whole idea, and it costs nothing to try.