ffflow (Foss Flow)
ffflow is a powerful, open-source terminal user interface (TUI) for FFmpeg. It is designed to streamline professional media workflows by providing a clean, interactive surface for running complex encoding, probing, and filtering jobs.
Built with Rust, it emphasizes reliability, observability, and ease of use for both casual users and media engineers.
✨ Key Features
- Interactive TUI: Real-time progress monitoring with speed, frame count, and time estimates.
- Batch Processing: Run sequential jobs defined in simple
.flwtext files. - smart Wrappers: Simplified commands (
encode,probe) for common tasks with preset support. - FFmpeg Passthrough: Full support for raw
ffmpegcommands, including complex filtergraphs and multiline commands. - Interactive Prompts: Handles FFmpeg interactive queries (like "Overwrite? [y/N]") directly in the UI.
- Session History: Scrollable history of all commands and outputs within the session.
🚀 Installation
Ensure you have Rust and ffmpeg installed.
📖 Usage
Start the TUI:
Basic Commands
Inside the TUI, you can type commands just like in a shell:
- Encode Wrapper:
- Probe Wrapper:
- Raw FFmpeg:
Batch Processing (.flw files)
Create a workflow file (e.g., jobs.flw) to run multiple commands in sequence.
Example jobs.flw:
# Convert to simple MP4
# Extract Audio
# Complex Filtergraph (Multiline supported with \)
Run it: From the terminal:
Or interactively inside ffflow:
⚡ Interactive Input
ffflow intelligently detects when FFmpeg asks for confirmation (e.g., file overwrite) and allows you to respond with y or n directly from the TUI, preventing jobs from hanging in the background.
⚠️ Known Limitations
- Shell Features: Piping (
|), redirection (>), and globbing (*.mp4) are not supported. - Complex Prompts: Only standard overwrite prompts are currently interactive. Password prompts may hang.
🤝 Contributing
We welcome contributions! This project is FOSS and we believe in community-driven development.
- Fork the repo.
- Create feature branch (
git checkout -b feature/amazing-feature). - Commit changes (
git commit -m 'Add amazing feature'). - Push to branch (
git push origin feature/amazing-feature). - Open a Pull Request.
📜 License
Distributed under the MIT License. See LICENSE for more information.