Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FFmpeg Command Line Utility

This README documents the most useful FFmpeg command line commands and settings for processing video and images. It includes recommended parameters for different formats, resolutions, and compression options.

Table of Contents

Video Processing

MP4 Compression

MP4 (H.264) is widely supported and offers good quality/size balance.

# Basic MP4 compression with reasonable quality
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

# High-quality MP4 compression
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow -profile:v high -level 4.0 -c:a aac -b:a 192k output-hq.mp4

# Lower file size MP4 compression
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset faster -c:a aac -b:a 96k output-compressed.mp4

# Compress video with 2-pass encoding for better quality at specific bitrate
ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 1 -f mp4 /dev/null && \
ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 2 -c:a aac -b:a 128k output.mp4

MP4 Settings Explained:

  • -c:v libx264: Uses H.264 video codec
  • -crf: Constant Rate Factor (quality setting, range 0-51)
    • 18-23: High quality
    • 23-28: Standard quality
    • 28-35: Lower quality
  • -preset: Encoding speed (slower = better compression)
    • Options: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow
  • -profile:v: H.264 profile (baseline, main, high)
  • -c:a aac: Audio codec
  • -b:a: Audio bitrate

WebM Compression

WebM (VP9) offers better compression than MP4 but with slightly less support.

# Standard WebM compression
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -deadline good -c:a libopus -b:a 128k output.webm

# High quality WebM
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 24 -b:v 0 -deadline best -row-mt 1 -c:a libopus -b:a 192k output-hq.webm

# Smaller file size WebM
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 36 -b:v 0 -deadline good -c:a libopus -b:a 96k -cpu-used 4 output-compressed.webm

# Two-pass encoding for WebM (better quality at target size)
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1M -pass 1 -deadline good -row-mt 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1M -pass 2 -deadline good -row-mt 1 -c:a libopus -b:a 128k output.webm

WebM Settings Explained:

  • -c:v libvpx-vp9: Uses VP9 video codec
  • -crf: Quality control (0-63, lower is better)
  • -b:v 0: Allows CRF to control the quality
  • -deadline: Encoding speed/quality balance (realtime, good, best)
  • -row-mt 1: Enables row-based multithreading
  • -cpu-used: Speed setting (0-5, higher is faster)
  • -c:a libopus: Opus audio codec (better than Vorbis)

Video Resizing

# Resize to specific dimensions (maintaining aspect ratio)
ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output.mp4

# Resize to specific width, maintain aspect ratio
ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4

# Resize to specific height, maintain aspect ratio
ffmpeg -i input.mp4 -vf "scale=-1:720" output.mp4

# Resize to 50% of original dimensions
ffmpeg -i input.mp4 -vf "scale=iw*0.5:ih*0.5" output.mp4

# Resize for common resolutions
ffmpeg -i input.mp4 -vf "scale=1920:1080" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output-1080p.mp4
ffmpeg -i input.mp4 -vf "scale=1280:720" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output-720p.mp4
ffmpeg -i input.mp4 -vf "scale=854:480" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output-480p.mp4

Format Conversion

# Convert MOV to MP4
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

# Convert MKV to MP4
ffmpeg -i input.mkv -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

# Convert MP4 to WebM
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm

# Convert AVI to MP4
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

# Extract audio from video
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.aac
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 4 output.mp3

Frame Rate Adjustment

# Change frame rate
ffmpeg -i input.mp4 -filter:v fps=fps=30 -c:v libx264 -crf 23 -preset medium -c:a copy output.mp4

# Slow motion (half speed)
ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" -c:v libx264 -crf 23 -preset medium -c:a aac -af "atempo=0.5" output.mp4

# Fast motion (double speed)
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -c:v libx264 -crf 23 -preset medium -c:a aac -af "atempo=2.0" output.mp4

Image Processing

Image Conversion

# Convert JPG to PNG
ffmpeg -i input.jpg output.png

# Convert PNG to JPG
ffmpeg -i input.png -q:v 2 output.jpg

# Convert to WebP
ffmpeg -i input.jpg -q:v 70 output.webp

# Convert multiple images (with sequence number)
ffmpeg -i image%d.jpg output%d.png

# Create animated GIF from images
ffmpeg -framerate 10 -pattern_type glob -i "*.jpg" -vf "scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

Image Resizing

# Resize image to specific dimensions
ffmpeg -i input.jpg -vf scale=800:600 output.jpg

# Resize image maintaining aspect ratio (width fixed)
ffmpeg -i input.jpg -vf scale=800:-1 output.jpg

# Resize image maintaining aspect ratio (height fixed)
ffmpeg -i input.jpg -vf scale=-1:600 output.jpg

# Resize to percentage of original
ffmpeg -i input.jpg -vf "scale=iw*0.5:ih*0.5" output.jpg

Image Compression

# Compress JPEG with quality control
ffmpeg -i input.jpg -q:v 2 output.jpg  # High quality (scale 2-31, lower is better)
ffmpeg -i input.jpg -q:v 5 output.jpg  # Medium quality
ffmpeg -i input.jpg -q:v 10 output.jpg # Lower quality

# Compress PNG
ffmpeg -i input.png -compression_level 9 output.png  # Maximum compression

# Compress WebP
ffmpeg -i input.jpg -q:v 75 output.webp  # Quality scale 0-100
ffmpeg -i input.jpg -q:v 50 output.webp  # More compression, less quality

# Create AVIF image (high compression, good quality)
ffmpeg -i input.jpg -c:v libaom-av1 -crf 30 -still-picture 1 output.avif

Advanced Settings

Video Cropping

# Crop video (format: width:height:x_offset:y_offset)
ffmpeg -i input.mp4 -vf "crop=1280:720:0:0" output.mp4

Video Stabilization

# Two-pass video stabilization
ffmpeg -i input.mp4 -vf vidstabdetect=shakiness=10:accuracy=15 -f null -
ffmpeg -i input.mp4 -vf vidstabtransform=smoothing=30:input="transforms.trf" output.mp4

Creating Thumbnails

# Extract single frame as thumbnail
ffmpeg -i input.mp4 -ss 00:00:15 -frames:v 1 thumbnail.jpg

# Create thumbnails at intervals
ffmpeg -i input.mp4 -vf "fps=1/10" thumb%04d.jpg  # One frame every 10 seconds

Adding Watermark

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

# Add text watermark
ffmpeg -i input.mp4 -vf "drawtext=text='Copyright 2025':fontcolor=white:fontsize=24:x=10:y=10" output.mp4

Video Trimming

# Cut video clip (from 00:01:30 to 00:02:30)
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:30 -c:v copy -c:a copy output.mp4

# Fast seeking (less accurate but quicker)
ffmpeg -ss 00:01:30 -i input.mp4 -to 00:02:30 -c:v copy -c:a copy output.mp4

Concatenating Files

# Create a list file (list.txt)
# file 'input1.mp4'
# file 'input2.mp4'
# file 'input3.mp4'

# Concatenate video files
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

Extracting Audio

# Extract audio from video
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.aac

Adding Audio to Video

# Replace audio in video
ffmpeg -i input.mp4 -i audio.mp3 -c:v copy -map 0:v:0 -map 1:a:0 -shortest output.mp4

# Merge audio and video
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages