Linux

ffmpeg

Complete, cross-platform solution to record, convert and stream audio and video.

#multimedia #video #audio #conversion

Basic Conversion

Convert video to another format.

ffmpeg -i [input_file] [output_file]

Extract Audio

Extract audio from video.

ffmpeg -i [input_file] -vn -acodec copy audio.mp3

Convert Video Format

To MP4

ffmpeg -i [input_file] -codec copy [output_file].mp4

To WebM

ffmpeg -i [input_file] -c:v libvpx-vp9 -c:a libopus [output_file].webm

Video Quality

Set Bitrate

ffmpeg -i [input_file] -b:v 1M [output_file]

Constant Rate Factor (CRF)

Lower values = better quality (0-51, default 23).

ffmpeg -i [input_file] -crf 18 [output_file]

Resize Video

Scale to specific width (height auto).

ffmpeg -i [input_file] -vf scale=1280:-1 [output_file]

Scale to 720p.

ffmpeg -i [input_file] -vf scale=-1:720 [output_file]

Trim/Cut Video

Cut from start time for duration.

ffmpeg -i [input_file] -ss 00:00:30 -t 00:00:10 -c copy [output_file]

Cut from start to end time.

ffmpeg -i [input_file] -ss 00:00:30 -to 00:01:00 -c copy [output_file]

Concatenate Videos

Create a file list.txt:

file 'video1.mp4'
file 'video2.mp4'

Then:

ffmpeg -f concat -safe 0 -i list.txt -c copy [output_file]

Extract Frames

Extract one frame per second.

ffmpeg -i [input_file] -vf fps=1 frame_%04d.png

Extract specific frame at timestamp.

ffmpeg -i [input_file] -ss 00:00:10 -vframes 1 frame.png

Create GIF

ffmpeg -i [input_file] -vf "fps=10,scale=320:-1:flags=lanczos" [output_file].gif

Add Audio to Video

ffmpeg -i [input_file] -i audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 [output_file]

Remove Audio

ffmpeg -i [input_file] -an [output_file]

Change Frame Rate

ffmpeg -i [input_file] -r 30 [output_file]

Change Audio Codec

To AAC

ffmpeg -i [input_file] -c:v copy -c:a aac -b:a 192k [output_file]

To MP3

ffmpeg -i [input_file] -c:v copy -c:a libmp3lame -b:a 192k [output_file]

Speed Up/Slow Down

Speed up 2x (video)

ffmpeg -i [input_file] -vf "setpts=0.5*PTS" [output_file]

Slow down 0.5x (video)

ffmpeg -i [input_file] -vf "setpts=2.0*PTS" [output_file]

Speed up audio

ffmpeg -i [input_file] -filter:a "atempo=2.0" [output_file]

Rotate Video

Rotate 90 degrees clockwise.

ffmpeg -i [input_file] -vf "transpose=1" [output_file]

Options:

  • 0 - 90 counter-clockwise
  • 1 - 90 clockwise
  • 2 - 90 counter-clockwise and flip
  • 3 - 90 clockwise and flip

Add Watermark

ffmpeg -i [input_file] -i watermark.png -filter_complex "overlay=10:10" [output_file]

Stream Copy

Copy without re-encoding (fast).

ffmpeg -i [input_file] -c copy [output_file]

Get Video Info

ffmpeg -i [input_file]

Or use ffprobe:

ffprobe -i [input_file]

Convert Audio

To MP3

ffmpeg -i audio.wav -codec:a libmp3lame -qscale:a 2 audio.mp3

To AAC

ffmpeg -i audio.wav -c:a aac -b:a 192k audio.m4a

Common Options

OptionDescription
-iInput file
-c or -codecCodec selection
-c copyStream copy (no re-encoding)
-vnDisable video
-anDisable audio
-b:vVideo bitrate
-b:aAudio bitrate
-rFrame rate
-sVideo size (resolution)
-ssStart time
-tDuration
-toEnd time