| Crates.io | ffrs |
| lib.rs | ffrs |
| version | 0.1.0 |
| created_at | 2025-12-27 19:34:15.071693+00 |
| updated_at | 2025-12-27 19:34:15.071693+00 |
| description | A CLI tool that translates plain English commands into ffmpeg commands |
| homepage | https://github.com/darkterminal/ffrs |
| repository | https://github.com/darkterminal/ffrs |
| max_upload_size | |
| id | 2007708 |
| size | 252,691 |
ffrs is a CLI tool that translates plain English commands into ffmpeg commands. It provides both a library API and a command-line interface for media conversion tasks.
I’m a simple guy.
I watch a YouTube livestream about vibe coding. That curiosity pulls me into a search. I look up spec-kit—and there it is. Found.
Then I drift. I scroll my Facebook timeline. Scroll. Scroll again. Refresh.
Suddenly, nixCraft posts about the ffrs CLI tool. Yeah, it’s written in JavaScript—and the comment section is exactly what you’d expect.
Then someone drops the line that changes everything:
“This is my only complaint. It’s a great idea—just rewrite it in Rust or Go and ship it as a single binary.”
Me? Why not.
No overthinking. No debate. Just momentum.
Vibe it. Build it. Ship it.
You can install ffrs using Cargo:
cargo install ffrs
git clone https://github.com/darkterminal/ffrs.git
cd ffrs
cargo install --path .
# Convert a video file
ffrs "convert video.mp4 to video.avi"
# Interactive mode
ffrs --interactive
# Dry run (shows command without executing)
ffrs --dry-run "convert video.mp4 to video.avi"
# Specify output directory
ffrs --output /path/to/output "convert video.mp4 to video.avi"
Add to your Cargo.toml:
[dependencies]
ffrs = "0.1.0"
Use in your code:
use ffrs::{Tokenizer, Parser, CommandBuilder};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Tokenize the command
let mut tokenizer = Tokenizer::new("convert video.mp4 to video.avi");
let tokens = tokenizer.tokenize();
// Parse the tokens into an intent
let mut parser = Parser::new(tokens);
let intent = parser.parse()?;
// Build the ffmpeg command
let cmd_builder = CommandBuilder::new();
let ffmpeg_cmd = cmd_builder.build_command(&intent)?;
println!("Generated command: {}", ffmpeg_cmd);
Ok(())
}
This project is licensed under the MIT License - see the LICENSE file for details.