Complete FFmpeg command syntax reference covering option ordering, input vs output options, stream specifiers, and position-sensitive options. PROACTIVELY activate for: (1) Command syntax questions, (2) Option placement issues, (3) Input vs output option confusion, (4) Stream specifier syntax, (5) -ss/-t/-to position questions, (6) Global vs per-file options, (7) Multiple input/output handling, (8) Option order errors. Provides: Correct option placement rules, input-only vs output-only options, position-sensitive option behavior, stream specifier syntax, common mistakes and fixes.
View on GitHubJosiahSiegel/claude-plugin-marketplace
ffmpeg-master
plugins/ffmpeg-master/skills/ffmpeg-command-syntax/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/JosiahSiegel/claude-plugin-marketplace/blob/main/plugins/ffmpeg-master/skills/ffmpeg-command-syntax/SKILL.md -a claude-code --skill ffmpeg-command-syntaxInstallation paths:
.claude/skills/ffmpeg-command-syntax/## CRITICAL: FFmpeg Option Ordering Rules
**The most common FFmpeg mistake is putting options in the wrong place.** Options in FFmpeg are position-sensitive and apply to the NEXT file specified after them.
### The Golden Rule
```
ffmpeg [global_options] {[input_options] -i input}... {[output_options] output}...
```
**Key principle**: Options are applied to the **next** file. They are **reset between files**.
---
## Option Categories
### 1. Global Options (First, Before Everything)
Global options affect the entire FFmpeg process and must come **first**, before any inputs:
| Option | Description | Example |
|--------|-------------|---------|
| `-y` | Overwrite output without asking | `ffmpeg -y -i in.mp4 out.mp4` |
| `-n` | Never overwrite output | `ffmpeg -n -i in.mp4 out.mp4` |
| `-v` / `-loglevel` | Set logging verbosity | `ffmpeg -v error -i in.mp4 out.mp4` |
| `-stats` | Print encoding progress | `ffmpeg -stats -i in.mp4 out.mp4` |
| `-progress` | Send progress to file/URL | `ffmpeg -progress - -i in.mp4 out.mp4` |
| `-report` | Generate ffmpeg-*.log file | `ffmpeg -report -i in.mp4 out.mp4` |
| `-hide_banner` | Suppress copyright banner | `ffmpeg -hide_banner -i in.mp4 out.mp4` |
| `-filter_complex` | Complex filtergraph (global) | `ffmpeg -i a.mp4 -i b.mp4 -filter_complex "[0][1]overlay" out.mp4` |
| `-filter_complex_threads` | Filtergraph thread count | `ffmpeg -filter_complex_threads 4 ...` |
```bash
# Correct: Global options first
ffmpeg -y -hide_banner -v warning -i input.mp4 output.mp4
# Wrong: Global option after -i
ffmpeg -i input.mp4 -y output.mp4 # -y works but is not idiomatic
```
### 2. Input Options (Before `-i`)
Input options affect how a file is **read/decoded**. They must be placed **immediately before** the `-i` for the file they apply to.
#### Input-Only Options
| Option | Description | Placement |
|--------|-------------|-----------|
| `-ss` (as input) | Seek position (fast, may be imprecise) | Before `-i` |
| `-t` (as input) |