Basic Conversion
Convert to MP4 (H.264)
1# High quality
2ffmpeg -i input.avi -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 192k output.mp4
3
4# Medium quality (default)
5ffmpeg -i input.avi -c:v libx264 -crf 23 output.mp4
6
7# Fast encoding
8ffmpeg -i input.avi -c:v libx264 -preset ultrafast -crf 23 output.mp4
Convert to WebM (VP9)
1# High quality
2ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
3
4# Two-pass encoding (better quality)
5ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1M -pass 1 -f null /dev/null
6ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1M -pass 2 -c:a libopus output.webm
Convert to H.265/HEVC
1# Better compression than H.264
2ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac -b:a 128k output.mp4
3
4# Hardware acceleration (NVIDIA)
5ffmpeg -i input.mp4 -c:v hevc_nvenc -preset slow -crf 23 output.mp4
Quality Settings
CRF (Constant Rate Factor)
Lower = better quality, larger file
| CRF | Quality | Use Case |
|---|
| 18-22 | Very high | Archival, professional |
| 23-28 | Good | General use, streaming |
| 29-35 | Lower | Small files, previews |
1# Set CRF
2ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
Bitrate Control
1# Constant bitrate
2ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -maxrate 2M -bufsize 4M output.mp4
3
4# Variable bitrate with target
5ffmpeg -i input.mp4 -c:v libx264 -b:v 2M output.mp4
6
7# Two-pass encoding (best quality for target bitrate)
8ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 1 -f null /dev/null
9ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 2 output.mp4
Codec Options
H.264 (libx264)
1# Presets: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow
2ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 23 output.mp4
3
4# Profile (for compatibility)
5ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline -level 3.0 output.mp4
6# Profiles: baseline, main, high
7
8# Tune (optional optimization)
9ffmpeg -i input.mp4 -c:v libx264 -tune film output.mp4
10# Tunes: film, animation, grain, stillimage, fastdecode, zerolatency
H.265/HEVC (libx265)
1# Basic
2ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
3
4# With preset
5ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 28 output.mp4
6
7# 10-bit encoding (better quality)
8ffmpeg -i input.mp4 -c:v libx265 -pix_fmt yuv420p10le -crf 28 output.mp4
VP9 (libvpx-vp9)
1# Single pass
2ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm
3
4# Two-pass (recommended)
5ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1M -pass 1 -f null /dev/null && \
6ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1M -pass 2 output.webm
Resolution & Frame Rate
Change Resolution
1# Scale to width (maintain aspect ratio)
2ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4
3
4# Scale to height
5ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4
6
7# Specific resolution
8ffmpeg -i input.mp4 -vf scale=1920:1080 output.mp4
9
10# Scale with high-quality algorithm
11ffmpeg -i input.mp4 -vf scale=1280:720:flags=lanczos output.mp4
Change Frame Rate
1# Set frame rate
2ffmpeg -i input.mp4 -r 30 output.mp4
3
4# Convert to 60fps (interpolation)
5ffmpeg -i input.mp4 -filter:v "minterpolate='fps=60'" output.mp4
6
7# Reduce frame rate (drop frames)
8ffmpeg -i input.mp4 -r 24 output.mp4
Audio Codecs
AAC
1# Default quality
2ffmpeg -i input.mp4 -c:a aac -b:a 192k output.mp4
3
4# High quality
5ffmpeg -i input.mp4 -c:a aac -b:a 256k output.mp4
Opus (best for WebM)
1ffmpeg -i input.mp4 -c:a libopus -b:a 128k output.webm
MP3
1ffmpeg -i input.mp4 -c:a libmp3lame -b:a 192k output.mp4
Copy audio (no re-encoding)
1ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a copy output.mp4
MP4
1# Standard MP4
2ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
3
4# MP4 with faststart (web streaming)
5ffmpeg -i input.avi -c:v libx264 -c:a aac -movflags +faststart output.mp4
MKV
1# Matroska (supports multiple audio/subtitle tracks)
2ffmpeg -i input.mp4 -c copy output.mkv
WebM
1# For web (VP9 + Opus)
2ffmpeg -i input.mp4 -c:v libvpx-vp9 -c:a libopus output.webm
AVI
1ffmpeg -i input.mp4 -c:v mpeg4 -q:v 5 -c:a libmp3lame output.avi
Hardware Acceleration
NVIDIA (NVENC)
1# H.264
2ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -preset slow output.mp4
3
4# H.265
5ffmpeg -hwaccel cuda -i input.mp4 -c:v hevc_nvenc -preset slow output.mp4
Intel Quick Sync (QSV)
1ffmpeg -hwaccel qsv -i input.mp4 -c:v h264_qsv -preset slow output.mp4
AMD (AMF)
1ffmpeg -i input.mp4 -c:v h264_amf -quality quality output.mp4
Copy Streams (No Re-encoding)
1# Copy both video and audio
2ffmpeg -i input.mp4 -c copy output.mkv
3
4# Copy video, re-encode audio
5ffmpeg -i input.mp4 -c:v copy -c:a aac -b:a 192k output.mp4
6
7# Copy audio, re-encode video
8ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a copy output.mp4
Useful Flags
1# Overwrite output without asking
2-y
3
4# Don't overwrite
5-n
6
7# Limit output file size (approximate)
8-fs 100M
9
10# Set metadata
11-metadata title="My Video" -metadata author="Name"
12
13# Verbose output
14-v verbose
15
16# Quiet (only errors)
17-v quiet
18
19# Show progress
20-progress pipe:1
Quick Reference
| Task | Command |
|---|
| Convert to MP4 | ffmpeg -i input.avi -c:v libx264 -crf 23 output.mp4 |
| High quality | ffmpeg -i input.avi -c:v libx264 -crf 18 output.mp4 |
| Small file | ffmpeg -i input.avi -c:v libx264 -crf 28 output.mp4 |
| WebM | ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 output.webm |
| H.265 | ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4 |
| Scale to 720p | ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4 |
| Copy streams | ffmpeg -i input.mp4 -c copy output.mkv |
Tips
- Use
-crf for variable bitrate (recommended) - Use
-b:v for constant bitrate (streaming) - Use
-preset slow for better compression (slower encoding) - Use
-preset ultrafast for quick encoding (larger files) - Add
-movflags +faststart for MP4 web streaming - Use hardware acceleration for faster encoding on supported hardware
Related Snippets