| name | ffmpeg |
| description | FFmpeg commands for video/audio conversion, trimming, compression, and processing. Use when user mentions "ffmpeg", "convert video", "compress video", "extract audio", "trim video", "gif from video", "video codec", "transcode", "screen recording", "merge videos", "video to mp4", "reduce file size", or any media processing task. |
FFmpeg
Probe and Inspect
ffprobe -v error -show_format -show_streams input.mp4
ffprobe -v error -show_entries format=duration,size,bit_rate -of default=noprint_wrappers=1 input.mp4
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate,codec_name -of csv=p=0 input.mp4
ffmpeg -codecs
ffmpeg -formats
ffmpeg -encoders
Convert Between Formats
ffmpeg -i input.mp4 -c copy output.mkv
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.mov -c:v libx264 -c:a aac -movflags +faststart output.mp4
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
ffmpeg -i input.avi output.mp4
Compress Video
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 23 -preset fast -c:a copy output.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a aac output.mp4
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac output.mp4
ffmpeg -i input.mp4 -c:v libx264 -b:v 3285k -pass 1 -an -f null /dev/null && \
ffmpeg -i input.mp4 -c:v libx264 -b:v 3285k -pass 2 -c:a aac -b:a 128k output.mp4
Extract Audio
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
ffmpeg -i input.mp4 -vn -c:a copy output.aac
ffmpeg -i input.mp4 -vn -c:a pcm_s16le output.wav
ffmpeg -i input.mp4 -vn -c:a flac output.flac
Convert Audio Formats
ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3
ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a
ffmpeg -i input.flac -c:a libmp3lame -q:a 0 output.mp3
ffmpeg -i input.wav -c:a libvorbis -q:a 5 output.ogg
ffmpeg -i input.wav -c:a libopus -b:a 128k output.opus
ffmpeg -i input.mp3 -c:a pcm_s16le -ar 44100 output.wav
Trim and Cut
ffmpeg -ss 00:01:30 -to 00:03:00 -i input.mp4 -c copy output.mp4
ffmpeg -ss 00:01:30 -to 00:03:00 -i input.mp4 -c:v libx264 -c:a aac output.mp4
ffmpeg -ss 0 -t 30 -i input.mp4 -c copy output.mp4
ffmpeg -sseof -30 -i input.mp4 -c copy output.mp4
ffmpeg -ss 10 -i input.mp4 -c copy output.mp4
Create GIF
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1" output.gif
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,palettegen" palette.png && \
ffmpeg -i input.mp4 -i palette.png -lavfi "fps=15,scale=480:-1:flags=lanczos [x]; [x][1:v] paletteuse" output.gif
ffmpeg -ss 00:00:30 -t 5 -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,palettegen" palette.png && \
ffmpeg -ss 00:00:30 -t 5 -i input.mp4 -i palette.png -lavfi "fps=15,scale=480:-1:flags=lanczos [x]; [x][1:v] paletteuse" output.gif
Scale and Resize
ffmpeg -i input.mp4 -vf "scale=1280:720" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "scale=1280:-2" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "scale='min(1920,iw)':'min(1080,ih)':force_original_aspect_ratio=decrease" -c:a copy output.mp4
Subtitles
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" output.mp4
ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontSize=24,PrimaryColour=&HFFFFFF'" output.mp4
ffmpeg -i input.mp4 -i subs.srt -c copy -c:s mov_text output.mp4
ffmpeg -i input.mp4 -i subs.srt -c copy -c:s srt output.mkv
ffmpeg -i input.mkv -map 0:s:0 output.srt
Merge and Concatenate
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
for f in part*.mp4; do echo "file '$f'"; done > filelist.txt
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -c:a aac output.mp4
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4
ffmpeg -i video.mp4 -i newaudio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
Extract Frames
ffmpeg -ss 00:01:30 -i input.mp4 -frames:v 1 frame.png
ffmpeg -i input.mp4 -vf "fps=1" frames_%04d.png
ffmpeg -i input.mp4 -vf "fps=1/10" frames_%04d.png
ffmpeg -i input.mp4 frames_%06d.png
ffmpeg -i input.mp4 -vf "select='not(mod(n\,100))',scale=320:180,tile=4x4" -frames:v 1 thumbnails.png
Screen Recording
ffmpeg -f avfoundation -framerate 30 -i "1:0" -c:v libx264 -preset ultrafast -crf 18 output.mp4
ffmpeg -f avfoundation -list_devices true -i ""
ffmpeg -f avfoundation -framerate 30 -i "1:0" -c:v libx264 -preset ultrafast -c:a aac output.mp4
ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0 -c:v libx264 -preset ultrafast -crf 18 output.mp4
ffmpeg -f x11grab -framerate 30 -video_size 1280x720 -i :0.0+100,200 -c:v libx264 -preset ultrafast output.mp4
Speed Up and Slow Down
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -an output.mp4
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" output.mp4
ffmpeg -i input.mp4 -vf "setpts=0.25*PTS" -af "atempo=2.0,atempo=2.0" output.mp4
Remove Audio
ffmpeg -i input.mp4 -an -c:v copy output.mp4
Codec Reference
| Codec | Use Case | Encode Flag | Notes |
|---|
| H.264 | General purpose, widest compatibility | -c:v libx264 | Default choice. Works everywhere. |
| H.265 | Archival, streaming, 4K content | -c:v libx265 | ~50% smaller than H.264. Slower encode. |
| VP9 | Web delivery, YouTube-style hosting | -c:v libvpx-vp9 | Royalty-free. Good browser support. |
| AV1 | Next-gen web/streaming (emerging) | -c:v libaom-av1 | Best compression. Very slow to encode. |
| AAC | Audio in MP4 containers | -c:a aac | Good quality, universal support. |
| Opus | Voice, music, streaming at low bitrates | -c:a libopus | Best quality-per-bit. WebM/OGG container. |
| MP3 | Legacy audio compatibility | -c:a libmp3lame | Use when AAC/Opus not accepted. |
Quick decision guide:
- Sharing on the web or need broad playback? H.264 + AAC in MP4.
- Need smaller files and can wait longer to encode? H.265.
- Targeting browsers specifically? VP9 + Opus in WebM.
- Archiving and storage is a concern? H.265 or AV1.
Useful Flags
-y Overwrite output without asking
-n Never overwrite output
-hide_banner Suppress FFmpeg build info
-v error Only show errors (quieter output)
-movflags +faststart Move MP4 metadata to beginning (better for streaming)
-map 0 Copy all streams from input
-shortest Stop encoding when the shortest stream ends
-threads 0 Use all available CPU threads