Convert video format
ffmpeg -i input.mp4 output.avi
Change codec
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
Compress video
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 output.mp4
Extract audio
ffmpeg -i video.mp4 -vn -acodec copy audio.aac
Remove audio
ffmpeg -i input.mp4 -an output.mp4
Merge video and audio
ffmpeg -i video.mp4 -i audio.mp3 -c copy output.mp4
Trim video
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
Resize video
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
Maintain aspect ratio
ffmpeg -i input.mp4 -vf scale=1280:-1 output.mp4
Change frame rate
ffmpeg -i input.mp4 -r 30 output.mp4
Change bitrate
ffmpeg -i input.mp4 -b:v 1M output.mp4
Create GIF from video
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" output.gif
Extract frames
ffmpeg -i input.mp4 -vf fps=1 frame_%04d.png
Create video from images
ffmpeg -framerate 30 -pattern_type glob -i '*.jpg' -c:v libx264 output.mp4
Add watermark
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
Rotate video
# 90 degrees clockwise
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
# 180 degrees
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4
Flip video
# Horizontal flip
ffmpeg -i input.mp4 -vf hflip output.mp4
# Vertical flip
ffmpeg -i input.mp4 -vf vflip output.mp4
Concatenate videos
Create list.txt:
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
Convert to MP3
ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3
Normalize audio
ffmpeg -i input.mp3 -af loudnorm output.mp3
Remove silence
ffmpeg -i input.mp3 -af silenceremove=1:0:-50dB output.mp3
Speed up/slow down
# 2x speed
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4
# 0.5x speed
ffmpeg -i input.mp4 -filter:v "setpts=2*PTS" output.mp4
Record screen (Linux)
ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4
Record screen (macOS)
ffmpeg -f avfoundation -i "1" output.mp4
Stream to RTMP
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/stream
Get video info
ffmpeg -i input.mp4
Or use ffprobe:
ffprobe -v quiet -print_format json -show_format input.mp4
Take screenshot
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 screenshot.jpg
Create thumbnail
ffmpeg -i input.mp4 -vf "thumbnail" -frames:v 1 thumb.jpg
Add subtitles
ffmpeg -i input.mp4 -vf subtitles=subtitles.srt output.mp4
Burn subtitles permanently
ffmpeg -i input.mp4 -vf subtitles=subtitles.srt -c:a copy output.mp4
Two-pass encoding
# Pass 1
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 1 -f mp4 /dev/null
# Pass 2
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 2 output.mp4
Hardware acceleration (NVENC)
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
Quality presets
# Ultrafast (lowest quality)
ffmpeg -i input.mp4 -preset ultrafast output.mp4
# Medium (balanced)
ffmpeg -i input.mp4 -preset medium output.mp4
# Veryslow (best quality)
ffmpeg -i input.mp4 -preset veryslow output.mp4
CRF quality scale
# High quality (larger file)
ffmpeg -i input.mp4 -crf 18 output.mp4
# Balanced
ffmpeg -i input.mp4 -crf 23 output.mp4
# Lower quality (smaller file)
ffmpeg -i input.mp4 -crf 28 output.mp4
Common codecs
Video:
- libx264 (H.264)
- libx265 (H.265/HEVC)
- libvpx (VP8)
- libvpx-vp9 (VP9)
- libaom-av1 (AV1)
Audio:
- aac
- libmp3lame (MP3)
- libopus
- libvorbis