A comprehensive reference for common FFmpeg commands
Command | Description | Category |
---|---|---|
ffmpeg -i input.mp4 output.avi | Convert MP4 to AVI | Conversion |
ffmpeg -i input.mp4 output.mkv | Convert MP4 to MKV container | Conversion |
ffmpeg -i input.mp4 -c copy output.mkv | Copy streams without re-encoding (fast) | Streams |
ffmpeg -i input.avi -c:v libx264 -crf 23 output.mp4 | Convert to MP4 with H.264 codec and decent quality | Conversion |
ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4 | High quality H.264 encode (smaller CRF = higher quality) | Video |
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac -b:a 128k output.mp4 | Convert to H.265/HEVC (better compression) | Video |
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 0 -crf 30 -c:a libopus output.webm | Convert to WebM with VP9 codec | Conversion |
ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 192k output.mp3 | Extract audio to MP3 | Audio |
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.aac | Extract audio to AAC | Audio |
ffmpeg -i input.mp4 -vn -c:a copy output.m4a | Extract audio without re-encoding | Audio |
ffmpeg -i input.mp3 -af "volume=2" output.mp3 | Increase audio volume (2x) | Audio |
ffmpeg -i input.mp3 -af "equalizer=f=1000:width_type=o:width=2:g=6" output.mp3 | Apply EQ to boost 1kHz by 6dB | Audio |
ffmpeg -ss 00:00:30 -i input.mp4 -t 10 -c copy clip.mp4 | Trim a 10s segment starting at 30s | Trimming |
ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy clip.mp4 | Extract clip from 1min to 2min | Trimming |
ffmpeg -i input.mp4 -ss 00:00:10 -t 15 -an -c:v copy clip_no_audio.mp4 | Extract video only (no audio) from 10s for 15s | Trimming |
ffmpeg -i input.mp4 -vf "fps=1" frames_%04d.jpg | Extract 1 frame per second | Frames |
ffmpeg -i input.mp4 -vf "select=eq(n\,100)" -frames:v 1 frame_100.jpg | Extract exactly the 100th frame | Frames |
ffmpeg -i input.mp4 -vf thumbnail=100 -frames:v 1 thumbnail.jpg | Generate a thumbnail | Frames |
ffmpeg -f image2 -i frame_%04d.jpg output.mp4 | Create video from image sequence | Frames |
ffmpeg -i input.mp4 -vf "scale=1280:720" output_720p.mp4 | Scale video to 720p | Video |
ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4 | Scale width to 1280px, height auto | Video |
ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output_half.mp4 | Scale to half size | Video |
ffmpeg -i input.mp4 -vf "rotate=45*PI/180" output.mp4 | Rotate video by 45 degrees | Filters |
ffmpeg -i input.mp4 -vf "crop=640:480:0:0" output.mp4 | Crop video to 640x480 from top left | Filters |
ffmpeg -i input.mp4 -vf "hflip" output.mp4 | Flip video horizontally | Filters |
ffmpeg -i input.mp4 -vf "unsharp=5:5:1.0:5:5:0.0" output.mp4 | Apply unsharp mask (sharpen) | Filters |
ffmpeg -i input.mp4 -vf "colorbalance=rs=0.1:gs=0.1:bs=0.1" output.mp4 | Adjust color balance | Filters |
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1:a=0[outv]" -map "[outv]" -c:v libx264 out.mp4 | Concatenate two videos | Advanced |
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4 | Concatenate using a file list (list.txt contains: file 'input1.mp4', file 'input2.mp4') | Advanced |
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" -t 5 output.gif | Generate a 5s GIF at 10 fps, width 320 | Conversion |
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif | Generate a high-quality GIF with better colors | Conversion |
ffmpeg -f x11grab -r 25 -s 1366x768 -i :0.0 screen.mkv | Record screen on Linux | Capture |
ffmpeg -f gdigrab -framerate 30 -i desktop output.mp4 | Record screen on Windows | Capture |
ffmpeg -f avfoundation -i "1" -r 30 output.mp4 | Record screen on macOS | Capture |
ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -crf 22 -f flv rtmp://server/app/stream | Stream to RTMP server | Streaming |
ffmpeg -i input.mp4 -c:v libx264 -preset fast -c:a aac -f dash output.mpd | Create DASH stream | Streaming |
ffmpeg -i input.mp4 -c:v libx264 -preset fast -c:a aac -f hls -hls_time 4 -hls_playlist_type vod playlist.m3u8 | Create HLS stream | Streaming |
ffmpeg -i input.mp4 -vf subtitles=subs.srt out.mkv | Burn in subtitles | Subtitles |
ffmpeg -i input.mp4 -i subtitles.srt -c copy -c:s mov_text output.mp4 | Add subtitles without re-encoding | Subtitles |
ffmpeg -i input.mp4 -map 0 -c copy -c:s srt output.mkv | Extract subtitles to SRT | Subtitles |
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -preset slow output.mp4 | Hardware accelerated encode (NVIDIA) | Advanced |
ffmpeg -hwaccel qsv -i input.mp4 -c:v h264_qsv output.mp4 | Hardware accelerated encode (Intel QuickSync) | Advanced |
ffmpeg -hwaccel videotoolbox -i input.mp4 -c:v h264_videotoolbox output.mp4 | Hardware accelerated encode (macOS VideoToolbox) | Advanced |
ffmpeg -i input.mp4 -filter_complex "drawtext=text='Copyright':fontcolor=white:fontsize=24: box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" output.mp4 | Add text watermark | Advanced |
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4 | Add image overlay (logo in top left) | Advanced |
ffmpeg -i input.mp4 -filter_complex "split [a][b]; [a] palettegen [p]; [b][p] paletteuse" output.gif | Create optimized GIF using palette | Advanced |
ffmpeg -i input.mp4 -filter_complex "showwavespic=s=640x120" -frames:v 1 waveform.png | Generate audio waveform image | Audio |
ffmpeg -i input.mp4 -i audio.mp3 -c:v copy -map 0:v:0 -map 1:a:0 output.mp4 | Replace audio track | Audio |
ffmpeg -i input.mp4 -filter_complex "boxblur=5:1" output.mp4 | Apply blur filter | Filters |
ffmpeg -i video.mp4 -vf "eq=brightness=0.1:contrast=1.5:saturation=1.5" output.mp4 | Adjust brightness, contrast and saturation | Filters |
Optimize a video for web hosting with H.264 encoding and AAC audio:
ffmpeg -i input.mp4 -c:v libx264 -preset medium -crf 22 -c:a aac -b:a 128k -movflags +faststart output.mp4
The -movflags +faststart
option moves metadata to the beginning of the file allowing
playback to start before the whole file is downloaded.
Convert a sequence of images into a timelapse video:
ffmpeg -framerate 24 -pattern_type glob -i "*.jpg" -c:v libx264 -pix_fmt yuv420p output.mp4
Combine separately recorded video and audio:
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
Reduce file size while maintaining reasonable quality:
ffmpeg -i input.mp4 -vf "scale=1280:-1" -c:v libx264 -preset slow -crf 24 -c:a aac -b:a 128k compressed.mp4
Make a slideshow with 3-second transitions between images:
ffmpeg -framerate 1/3 -pattern_type glob -i "*.jpg" -c:v libx264 -r 30 -pix_fmt yuv420p slideshow.mp4