The 250-line build() god-function is split into: - resolve_timeline(): collapse Trim ops into a Timeline. - Plan: the mutable arg/filter accumulator, with one method per phase — translate() (per-op dispatch), translate_format()/start_audio_only() (format handling), drop_inapplicable_video_filters(), resolve_stream_copy(), resolve_target_size() (two-pass planning), filter_args() (vf/af vs gif palette graph), assemble_passes(). - build() now just orchestrates these in order. Pure refactor: argument output is byte-for-byte identical, guarded by the existing 23-test suite (all green). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
lazyff
A friendly terminal UI for FFmpeg. Trim, resize, crop, compress, convert and apply effects to video and audio — without memorizing a single flag.
lazyff always shows the exact ffmpeg command it is about to run, so you can
learn FFmpeg as you use it (and copy-paste the command anywhere).
Requirements
ffmpegandffprobeon your PATH- A terminal
Install / run
cargo run --release
# or
cargo install --path .
lazyff # browse the current directory
lazyff video.mp4 # open a file straight in the editor
lazyff opens a file browser in the current directory. Pick a video or audio
file, then stack up edits and press r. Mark several files with Space to
edit them all at once (batch mode).
What it can do
| Edit | Examples |
|---|---|
| Trim / Cut | keep 0:30 → 1:45, instant lossless stream copy |
| Resize | 1080p/720p/480p presets, half size, custom |
| Crop | centered square / 16:9 / 9:16 / 4:3, custom rectangle |
| Rotate / Flip | 90°, 180°, mirror |
| Speed | 0.25x – 4x, audio pitch preserved |
| Color adjust | brightness, contrast, saturation |
| Visual effects | grayscale, sepia, blur, sharpen, vignette, denoise, fades |
| Frame rate | 12 – 60 fps |
| Compress | H.264/H.265 with plain-English quality presets |
| Fit to size | "make it 25 MB" — two-pass encode to a target size |
| Convert format | MP4, MKV, WebM, MOV, GIF (with palette pass), MP3, M4A, WAV |
| Audio | remove track, volume, loudness normalization |
Edits combine: add a trim, a resize and a compress, and lazyff builds one ffmpeg command that does all three in a single pass.
Audio files (MP3, FLAC, WAV, ...) only offer the edits that make sense for them — trim, speed, volume/fades, and conversion between audio formats (MP3, M4A, FLAC, WAV, OGG).
Keys
File browser — ↑↓ move, Enter open, Backspace parent folder, q quit
Editor — a add edit, Enter change, d delete, J/K reorder,
s save recipe, l load recipe, o output name, r run, Esc back to
files, q quit
Recipes save your current stack of edits under a name
(~/.config/lazyff/recipes.json) so you can re-apply it to any file or
batch with two keys.
Forms — ↑↓ field, ←→ change choice, type into text fields,
Enter save, Esc cancel
While encoding you get a progress bar with speed readout; Esc cancels and
removes the partial output. Output files are written next to the input as
<name>_lazyff.<ext> (rename with o); lazyff refuses to overwrite the
input file.