FFmpeg Processing

Professional video and audio processing - transcode, edit, stream, and analyze media files

$ 설치

git clone https://github.com/pacphi/sindri /tmp/sindri && cp -r /tmp/sindri/docker/lib/extensions/vf-ffmpeg-processing/resources ~/.claude/skills/sindri

// tip: Run this command in your terminal to install the skill


name: FFmpeg Processing description: Professional video and audio processing - transcode, edit, stream, and analyze media files

FFmpeg Processing Skill

Comprehensive media processing with FFmpeg 8.0 for video/audio transcoding, editing, streaming, and analysis.

Capabilities

  • Video/audio transcoding and format conversion
  • Stream extraction and muxing
  • Video editing (cut, concat, filters)
  • Resolution and codec conversion
  • Subtitle handling
  • Streaming protocols (HLS, DASH, RTMP)
  • Image sequence generation
  • Audio processing and normalization
  • Hardware acceleration (CUDA)

When to Use

  • Convert media formats
  • Extract audio from video
  • Create video thumbnails
  • Resize and crop videos
  • Merge or split media files
  • Generate streaming manifests
  • Apply filters and effects
  • Analyze media properties

Basic Commands

Info and Analysis

ffmpeg -i input.mp4                    # Show file info
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

Format Conversion

ffmpeg -i input.avi output.mp4         # Convert to MP4
ffmpeg -i input.mp4 -c copy output.mkv # Copy streams (fast)

Resolution and Quality

# Scale to 720p
ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4

# Set bitrate
ffmpeg -i input.mp4 -b:v 2M -b:a 192k output.mp4

# Set quality (CRF)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

Extract Audio

ffmpeg -i video.mp4 -vn -acodec libmp3lame -q:a 2 audio.mp3
ffmpeg -i video.mp4 -vn -c:a copy audio.aac

Extract Frames

# All frames as images
ffmpeg -i input.mp4 frame%04d.png

# One frame per second
ffmpeg -i input.mp4 -vf fps=1 frame%04d.png

# Single frame at timestamp
ffmpeg -ss 00:01:30 -i input.mp4 -frames:v 1 thumbnail.jpg

Advanced Operations

Cutting and Trimming

# Cut from 10s to 30s
ffmpeg -ss 00:00:10 -to 00:00:30 -i input.mp4 -c copy output.mp4

# First 60 seconds
ffmpeg -t 60 -i input.mp4 -c copy output.mp4

Concatenation

# Create file list (list.txt)
# file 'video1.mp4'
# file 'video2.mp4'

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

Filters

# Crop to 16:9
ffmpeg -i input.mp4 -vf "crop=1920:1080:0:0" output.mp4

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

# Speed up 2x
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4

# Blur face (coordinates x:y:w:h)
ffmpeg -i input.mp4 -vf "boxblur=10:5:x=100:y=100:w=200:h=200" output.mp4

Subtitles

# Burn subtitles into video
ffmpeg -i input.mp4 -vf subtitles=subs.srt output.mp4

# Add subtitle track
ffmpeg -i video.mp4 -i subs.srt -c copy -c:s mov_text output.mp4

Audio Processing

# Normalize audio
ffmpeg -i input.mp4 -af "loudnorm" output.mp4

# Extract specific channel
ffmpeg -i stereo.mp3 -map_channel 0.0.0 left.mp3

# Mix audio tracks
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -map 0:v:0 -map 1:a:0 output.mp4

Streaming

# HLS streaming
ffmpeg -i input.mp4 \
  -codec: copy \
  -start_number 0 \
  -hls_time 10 \
  -hls_list_size 0 \
  -f hls playlist.m3u8

# RTMP stream
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -maxrate 3000k \
  -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 \
  -f flv rtmp://server/live/streamkey

CUDA Hardware Acceleration

# List encoders
ffmpeg -encoders | grep nvenc

# H.264 encoding with CUDA
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -preset fast output.mp4

# Decode and encode with CUDA
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
  -c:v h264_nvenc -preset p4 output.mp4

Batch Processing

# Convert all MKV to MP4
for f in *.mkv; do
  ffmpeg -i "$f" -c copy "${f%.mkv}.mp4"
done

# Generate thumbnails
for f in *.mp4; do
  ffmpeg -ss 00:00:05 -i "$f" -frames:v 1 "${f%.mp4}.jpg"
done

Presets and Profiles

YouTube Upload

ffmpeg -i input.mp4 \
  -c:v libx264 -preset slow -crf 18 \
  -c:a aac -b:a 192k \
  -pix_fmt yuv420p \
  -movflags +faststart \
  youtube.mp4

Web Optimization

ffmpeg -i input.mp4 \
  -c:v libx264 -crf 23 -preset faster \
  -vf scale=-2:720 \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  web.mp4

GIF Creation

ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" \
  -c:v gif output.gif

# Better quality (two-pass with palette)
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png \
  -lavfi "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

Analysis Commands

# Get duration
ffprobe -v error -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 input.mp4

# Get resolution
ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height \
  -of csv=s=x:p=0 input.mp4

# Get bitrate
ffprobe -v error -show_entries format=bit_rate \
  -of default=noprint_wrappers=1:nokey=1 input.mp4

Common Codecs

Video

  • H.264 (libx264) - Universal compatibility
  • H.265 (libx265) - Better compression
  • VP9 (libvpx-vp9) - Open standard
  • AV1 (libaom-av1) - Modern codec

Audio

  • AAC (aac) - Universal
  • MP3 (libmp3lame) - Legacy
  • Opus (libopus) - Best quality/bitrate
  • FLAC (flac) - Lossless

Troubleshooting

Sync Issues

# Fix A/V sync
ffmpeg -i input.mp4 -itsoffset 0.5 -i input.mp4 \
  -map 0:v -map 1:a -c copy output.mp4

Corrupted Files

# Attempt repair
ffmpeg -err_detect ignore_err -i corrupted.mp4 -c copy repaired.mp4

Performance Tips

  1. Use -c copy when possible (no re-encoding)
  2. Enable hardware acceleration for batch jobs
  3. Use appropriate presets (faster/fast/medium/slow)
  4. Limit threads with -threads N if needed
  5. Monitor with -progress flag

Related Skills

  • jupyter-notebooks - Analyze with Python
  • docker-manager - Batch processing in containers

Notes

  • FFmpeg 8.0 with full codec support
  • CUDA acceleration available
  • Supports 100+ formats
  • Real-time processing capable
  • Pipe support for streaming workflows