| name | ffmpeg |
| description | FFmpeg multimedia processing toolkit for video/audio format conversion, resolution changes, compression, trimming, merging, and more. Use when user wants to convert video formats, change resolution, compress videos, extract audio, trim clips, add watermarks, or any multimedia processing task. |
FFmpeg Multimedia Toolkit
You are an expert FFmpeg operator. When the user requests video or audio processing tasks, use this knowledge to construct and execute the appropriate FFmpeg commands.
Prerequisites Check
Before running any FFmpeg command, first verify FFmpeg is installed:
which ffmpeg || echo "FFmpeg not installed - run: brew install ffmpeg"
If not installed, prompt the user to install it:
brew install ffmpeg
Safety Rules
- ALWAYS confirm with user before overwriting existing files - use
-n flag to prevent accidental overwrites, or ask user explicitly
- Show file info before processing - use
ffprobe to display source file details
- Estimate output size when possible - especially for large files
- Preserve original files by default - output to new filename unless user explicitly wants to replace
Core Commands Reference
1. Get File Information
ffprobe -v quiet -print_format json -show_format -show_streams "input.mp4"
Quick summary:
ffprobe -v error -show_entries format=duration,size,bit_rate -of default=noprint_wrappers=1 "input.mp4"
2. Format Conversion
MP4 to other formats:
ffmpeg -i input.mp4 -c copy output.mkv
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
ffmpeg -i input.mp4 -c:v libxvid -q:v 5 -c:a libmp3lame -q:a 4 output.avi
ffmpeg -i input.mp4 -c copy output.mov
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
Other format conversions:
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
ffmpeg -i input.webm -c:v libx264 -c:a aac output.mp4
3. Resolution Changes
Common resolutions:
ffmpeg -i input.mp4 -vf "scale=3840:2160" -c:a copy output_4k.mp4
ffmpeg -i input.mp4 -vf "scale=1920:1080" -c:a copy output_1080p.mp4
ffmpeg -i input.mp4 -vf "scale=1280:720" -c:a copy output_720p.mp4
ffmpeg -i input.mp4 -vf "scale=854:480" -c:a copy output_480p.mp4
ffmpeg -i input.mp4 -vf "scale=640:360" -c:a copy output_360p.mp4
ffmpeg -i input.mp4 -vf "scale=1280:-1" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "scale=-1:720" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "scale='min(1920,iw)':'min(1080,ih)':force_original_aspect_ratio=decrease" output.mp4
4. Compression & Quality
CRF-based compression (recommended):
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset fast -c:a aac -b:a 96k output.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 32 -preset veryfast -c:a aac -b:a 64k output.mp4
HEVC/H.265 (better compression, slower):
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac output_h265.mp4
Target file size:
ffmpeg -i input.mp4 -c:v libx264 -b:v 6000k -c:a aac -b:a 128k output.mp4
5. Trimming & Cutting
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:45 -c copy output.mp4
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:01:15 -c copy output.mp4
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:45 -c:v libx264 -c:a aac output.mp4
ffmpeg -i input.mp4 -ss 10 -c copy output.mp4
ffmpeg -i input.mp4 -t 30 -c copy output.mp4
6. Audio Operations
Extract audio:
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.aac
ffmpeg -i input.mp4 -vn -c:a pcm_s16le output.wav
ffmpeg -i input.mp4 -vn -c:a flac output.flac
Modify audio:
ffmpeg -i input.mp4 -an -c:v copy output_silent.mp4
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
ffmpeg -i input.mp4 -af "volume=1.5" -c:v copy output.mp4
ffmpeg -i input.mp4 -af "volume=0.5" -c:v copy output.mp4
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:v copy output.mp4
7. Merging & Concatenation
Concatenate videos (same codec):
echo "file 'video1.mp4'" > list.txt
echo "file 'video2.mp4'" >> list.txt
echo "file 'video3.mp4'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
Concatenate with re-encoding (different codecs):
ffmpeg -f concat -safe 0 -i list.txt -c:v libx264 -c:a aac output.mp4
8. Watermark & Overlay
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
ffmpeg -i input.mp4 -vf "drawtext=text='My Watermark':fontsize=24:fontcolor=white:x=10:y=10" output.mp4
ffmpeg -i input.mp4 -vf "drawtext=text='%{pts\:hms}':fontsize=24:fontcolor=white:x=10:y=10" output.mp4
9. Frame Rate Changes
ffmpeg -i input.mp4 -r 30 -c:a copy output.mp4
ffmpeg -i input.mp4 -r 24 -c:a copy output.mp4
ffmpeg -i input.mp4 -r 60 -c:a copy output.mp4
ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" -filter:a "atempo=0.5" output.mp4
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -filter:a "atempo=2.0" output.mp4
10. Rotation & Flipping
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
ffmpeg -i input.mp4 -vf "transpose=2" output.mp4
ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" output.mp4
ffmpeg -i input.mp4 -vf "hflip" output.mp4
ffmpeg -i input.mp4 -vf "vflip" output.mp4
11. Extract Frames / Create Video from Images
ffmpeg -i input.mp4 frames/frame_%04d.png
ffmpeg -i input.mp4 -vf "fps=1" frames/frame_%04d.png
ffmpeg -i input.mp4 -ss 00:00:10 -frames:v 1 thumbnail.png
ffmpeg -framerate 30 -pattern_type glob -i 'frames/*.png' -c:v libx264 -pix_fmt yuv420p output.mp4
12. Screen Recording Formats
ffmpeg -i input.mp4 -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" output_vertical.mp4
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output_youtube.mp4
ffmpeg -i input.mp4 -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2" output_square.mp4
13. Batch Processing
for f in *.mp4; do ffmpeg -i "$f" -c copy "${f%.mp4}.mkv"; done
for f in *.mp4; do ffmpeg -i "$f" -c:v libx264 -crf 23 -c:a aac "compressed_$f"; done
for f in *.mp4; do ffmpeg -i "$f" -vf "scale=-1:720" -c:a copy "720p_$f"; done
14. Hardware Acceleration (macOS)
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 5000k -c:a aac output.mp4
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -b:v 3000k -c:a aac output.mp4
Workflow Guidelines
-
First, analyze the input file:
ffprobe -v error -show_entries stream=codec_name,width,height,duration,bit_rate -of default=noprint_wrappers=1 "INPUT_FILE"
-
Confirm the operation with the user, showing:
- Input file details
- Output filename
- Expected changes
-
Execute the FFmpeg command
-
Verify the output:
ffprobe -v error -show_entries format=duration,size,bit_rate -of default=noprint_wrappers=1 "OUTPUT_FILE"
-
Report results to user including:
- Original vs new file size
- Original vs new duration (if trimming)
- Original vs new resolution (if scaling)
Common Quality Presets
| Use Case | CRF | Preset | Resolution | Bitrate |
|---|
| Archive (best quality) | 18 | slow | Original | N/A |
| General use | 23 | medium | Original | N/A |
| Web/streaming | 26 | fast | 1080p | 4-6 Mbps |
| Mobile | 28 | fast | 720p | 2-3 Mbps |
| Preview/draft | 32 | veryfast | 480p | 1 Mbps |
Error Handling
Common errors and solutions:
- "Avi encoder not found" - Install FFmpeg with full codecs:
brew install ffmpeg
- "Permission denied" - Check file permissions
- "Invalid data found" - File might be corrupted, try
-err_detect ignore_err
- "Output file exists" - Use
-y to overwrite or change output name