Command linehardBash

FFmpeg Media Conversion

Essential FFmpeg commands for video/audio conversion, editing, and processing.

01

The problem

You need to convert media formats, extract audio, resize videos, or create GIFs.

02

The solution

Bash
# Basic conversion
ffmpeg -i input.mp4 output.avi
ffmpeg -i input.mkv output.mp4

# Extract audio from video
ffmpeg -i video.mp4 -vn -acodec copy audio.aac
ffmpeg -i video.mp4 -q:a 0 -map a audio.mp3

# Convert video to audio
ffmpeg -i video.mp4 audio.mp3

# Extract video (no audio)
ffmpeg -i input.mp4 -an -vcodec copy video_only.mp4

# Resize video
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4  # Keep aspect ratio

# Change bitrate
ffmpeg -i input.mp4 -b:v 1M -b:a 128k output.mp4

# Extract portion of video
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:30 output.mp4
ffmpeg -i input.mp4 -ss 00:05:00 -to 00:07:30 output.mp4

# Convert to GIF
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" output.gif
ffmpeg -i input.mp4 -ss 00:00:05 -t 3 output.gif

# Combine audio and video
ffmpeg -i video.mp4 -i audio.mp3 -c copy output.mp4

# Concatenate videos
echo "file 'clip1.mp4'" > list.txt
echo "file 'clip2.mp4'" >> list.txt
ffmpeg -f concat -i list.txt -c copy output.mp4

# Add watermark
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

# Speed up/slow down video
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" fast.mp4
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" slow.mp4

# Extract frames
ffmpeg -i input.mp4 -r 1 frames/frame_%04d.jpg
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg

# Create video from images
ffmpeg -framerate 24 -i image_%04d.jpg -c:v libx264 output.mp4

# Convert to web-friendly format
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac output.mp4

# Stream copy (repackage without re-encoding)
ffmpeg -i input.mkv -c copy output.mp4

# Show media info
ffprobe input.mp4
ffmpeg -i input.mp4 2>&1 | grep Duration

# Adjust volume
ffmpeg -i input.mp3 -af "volume=2.0" loud.mp3
ffmpeg -i input.mp3 -af "volume=-10dB" quiet.mp3

# Crop video
ffmpeg -i input.mp4 -vf "crop=w=640:h=480:x=100:y=50" output.mp4

# Rotate video
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4  # 90° clockwise
ffmpeg -i input.mp4 -vf "transpose=2" output.mp4  # 90° counter-clockwise

# Add subtitles
ffmpeg -i video.mp4 -i subtitles.srt -c copy -c:s mov_text output.mp4

# Screen recording (Linux)
ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4
ffmpeg -f avfoundation -i "1:0" screen.mp4  # macOS

03

Put it to work

Example
# Convert MOV to MP4 (iPhone video)
ffmpeg -i video.mov -c:v libx264 -crf 23 -c:a aac output.mp4

# Extract 30-second clip
ffmpeg -i lecture.mp4 -ss 00:10:00 -t 30 clip.mp4

# Create thumbnail from video
ffmpeg -i movie.mp4 -ss 00:01:00 -vframes 1 -q:v 2 thumbnail.jpg

# Reduce video size for web
ffmpeg -i input.mp4 -vf scale=1280:-2 -c:v libx264 -crf 28 -preset fast output.mp4

# Combine multiple audio files
ffmpeg -i "concat:track1.mp3|track2.mp3|track3.mp3" -c copy album.mp3

# Convert video for PowerPoint
ffmpeg -i presentation.mov -c:v wmv2 -b:v 2000k -c:a wmav2 -b:a 128k presentation.wmv

# Make GIF from video segment
ffmpeg -i demo.mp4 -ss 00:00:10 -t 5 -vf "fps=15,scale=480:-1:flags=lanczos" demo.gif

Worth knowing

Use -c copy to avoid re-encoding when possible. -crf: lower=better quality (18-28 typical). Presets: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow. Check formats with ffmpeg -formats.