Complete FFmpeg deinterlacing, field processing, and telecine removal for broadcast and professional video. PROACTIVELY activate for: (1) Deinterlacing interlaced video (yadif, bwdif, w3fdif), (2) Hardware-accelerated deinterlacing (yadif_cuda, bwdif_cuda, bwdif_vulkan), (3) Inverse telecine/pulldown removal (pullup, fieldmatch), (4) Field order correction (fieldorder), (5) Field separation/weaving (separatefields, weave, tinterlace), (6) Interlace detection (idet), (7) DVD/Blu-ray processing, (8) Broadcast content conversion. Provides: Deinterlacing filters, telecine removal, field processing, hardware acceleration options.
Deinterlaces interlaced video and removes telecine/pulldown artifacts for broadcast content.
npx claudepluginhub josiahsiegel/claude-plugin-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).
| Task | Filter | Command Pattern |
|---|---|---|
| Basic deinterlace | yadif | -vf yadif |
| High quality deinterlace | bwdif | -vf bwdif |
| CUDA deinterlace | yadif_cuda | -vf yadif_cuda |
| Inverse telecine | pullup | -vf pullup |
| Field order | fieldorder | -vf fieldorder=tff |
| Detect interlace | idet | -vf idet |
Use for interlaced and telecined content:
Comprehensive guide to deinterlacing, field processing, and telecine removal.
Interlaced video stores two half-resolution fields per frame:
Common interlaced formats:
# Use idet filter to detect interlacing
ffmpeg -i input.mp4 -vf "idet" -frames:v 500 -f null -
# Output shows field types:
# TFF = Top Field First
# BFF = Bottom Field First
# Progressive = Not interlaced
# Undetermined = Mixed or uncertain
The most widely used deinterlacing filter. Good balance of speed and quality.
# Basic deinterlacing (output same frame rate)
ffmpeg -i interlaced.mp4 -vf "yadif" output.mp4
# Double frame rate (output both fields as frames)
ffmpeg -i interlaced.mp4 -vf "yadif=1" output.mp4
# Specify field parity (auto-detect by default)
ffmpeg -i interlaced.mp4 -vf "yadif=0:0:0" output.mp4 # TFF
ffmpeg -i interlaced.mp4 -vf "yadif=0:1:0" output.mp4 # BFF
# Only deinterlace if detected as interlaced
ffmpeg -i input.mp4 -vf "yadif=deint=interlaced" output.mp4
Parameters:
| Parameter | Description | Values |
|---|---|---|
mode | Output mode | 0=same fps, 1=double fps |
parity | Field parity | -1=auto, 0=TFF, 1=BFF |
deint | Frames to deinterlace | 0=all, 1=interlaced only |
Mode options:
0 / send_frame - Output one frame per input frame1 / send_field - Output one frame per field (double fps)2 / send_frame_nospatial - Like 0, without spatial interlacing check3 / send_field_nospatial - Like 1, without spatial interlacing checkHigher quality than yadif, uses more frames for interpolation.
# Basic bwdif
ffmpeg -i interlaced.mp4 -vf "bwdif" output.mp4
# Double frame rate
ffmpeg -i interlaced.mp4 -vf "bwdif=1" output.mp4
# Specify parity
ffmpeg -i interlaced.mp4 -vf "bwdif=0:-1:1" output.mp4
Parameters: Same as yadif
Uses three fields for even higher quality interpolation.
# Simple filter (faster)
ffmpeg -i interlaced.mp4 -vf "w3fdif=filter=simple" output.mp4
# Complex filter (better quality)
ffmpeg -i interlaced.mp4 -vf "w3fdif=filter=complex" output.mp4
Parameters:
| Parameter | Description | Values |
|---|---|---|
filter | Filter coefficients | simple, complex |
deint | Frames to deinterlace | all, interlaced |
Adaptive kernel-based deinterlacing.
# Basic kerndeint
ffmpeg -i interlaced.mp4 -vf "kerndeint" output.mp4
# With threshold adjustment
ffmpeg -i interlaced.mp4 -vf "kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0" output.mp4
# Full GPU pipeline with CUDA deinterlacing
ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
-i interlaced.mp4 \
-vf "yadif_cuda=0:-1:0" \
-c:v h264_nvenc output.mp4
# Double framerate with CUDA
ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
-i interlaced.mp4 \
-vf "yadif_cuda=1" \
-c:v h264_nvenc output.mp4
# Higher quality CUDA deinterlacing
ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
-i interlaced.mp4 \
-vf "bwdif_cuda" \
-c:v h264_nvenc output.mp4
Cross-platform GPU deinterlacing.
# Vulkan deinterlacing (works on AMD, Intel, NVIDIA)
ffmpeg -init_hw_device vulkan \
-hwaccel vulkan -hwaccel_output_format vulkan \
-i interlaced.mp4 \
-vf "bwdif_vulkan" \
-c:v h264_vulkan output.mp4
# VAAPI deinterlacing
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 \
-hwaccel_output_format vaapi \
-i interlaced.mp4 \
-vf "deinterlace_vaapi" \
-c:v h264_vaapi output.mp4
# Specify deinterlace mode
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 \
-hwaccel_output_format vaapi \
-i interlaced.mp4 \
-vf "deinterlace_vaapi=mode=motion_adaptive:rate=frame" \
-c:v h264_vaapi output.mp4
VAAPI deinterlace modes:
default - Use driver defaultbob - Simple bob (double rate)weave - Weave fields togethermotion_adaptive - Motion-adaptive (best quality)motion_compensated - Motion-compensated (highest quality)# QSV deinterlacing
ffmpeg -hwaccel qsv -hwaccel_output_format qsv \
-i interlaced.mp4 \
-vf "vpp_qsv=deinterlace=2" \
-c:v h264_qsv output.mp4
VPP_QSV deinterlace modes:
0 - Off1 - Bob2 - Advanced (motion adaptive)Telecine converts 24fps film to 30fps video by duplicating fields:
Film: A B C D
Video: AA AB BB BC CC CD DD DA
Removes 3:2 telecine by detecting and removing duplicate fields.
# Basic IVTC
ffmpeg -i telecined.mp4 -vf "pullup" -r 24000/1001 output.mp4
# With metric output
ffmpeg -i telecined.mp4 -vf "pullup=mp=y" -r 24000/1001 output.mp4
Parameters:
| Parameter | Description | Values |
|---|---|---|
jl, jr | Left/right junk pixels | 1-width |
jt, jb | Top/bottom junk pixels | 1-height |
sb | Strict breaks | 0 or 1 |
mp | Metric plane | y, u, v |
More advanced telecine removal with field matching.
# Basic field matching
ffmpeg -i telecined.mp4 -vf "fieldmatch" output.mp4
# Full IVTC pipeline with decimation
ffmpeg -i telecined.mp4 -vf "fieldmatch,decimate" output.mp4
# Specify field order
ffmpeg -i telecined.mp4 -vf "fieldmatch=order=tff,decimate" output.mp4
Combined IVTC workflow:
# Complete telecine removal pipeline
ffmpeg -i telecined.mp4 \
-vf "fieldmatch=order=auto:combmatch=full,decimate" \
-r 24000/1001 \
output.mp4
Removes duplicate frames (used after fieldmatch).
# Remove every 5th frame (30->24 fps)
ffmpeg -i input.mp4 -vf "decimate=cycle=5" output.mp4
# Detect duplicates
ffmpeg -i input.mp4 -vf "decimate=cycle=5:ppsrc=1" output.mp4
Transforms field order between TFF and BFF.
# Convert BFF to TFF
ffmpeg -i bff_input.mp4 -vf "fieldorder=tff" output.mp4
# Convert TFF to BFF
ffmpeg -i tff_input.mp4 -vf "fieldorder=bff" output.mp4
Splits each frame into two fields.
# Separate fields (doubles frame count, halves height)
ffmpeg -i interlaced.mp4 -vf "separatefields" output.mp4
Combines two consecutive frames into one interlaced frame.
# Weave fields (opposite of separatefields)
ffmpeg -i progressive.mp4 -vf "weave" interlaced.mp4
# Specify first field
ffmpeg -i progressive.mp4 -vf "weave=first_field=top" interlaced.mp4
Create interlaced output from progressive or modify interlaced content.
# Create interlaced from progressive (merge adjacent frames)
ffmpeg -i progressive.mp4 -vf "tinterlace=merge" interlaced.mp4
# Bob deinterlace (simple doubling)
ffmpeg -i interlaced.mp4 -vf "tinterlace=4" bobbed.mp4
# Create interlaced at half frame rate
ffmpeg -i progressive.mp4 -vf "tinterlace=interleave_top" interlaced.mp4
Modes:
| Mode | Description |
|---|---|
merge / 0 | Merge fields from consecutive frames |
drop_even / 1 | Drop even frames, interleave remaining |
drop_odd / 2 | Drop odd frames, interleave remaining |
pad / 3 | Pad alternating lines with black |
interleave_top / 4 | Interleave, TFF |
interleave_bottom / 5 | Interleave, BFF |
interlacex2 / 6 | Double rate interlacing |
mergex2 / 7 | Double rate field merge |
Low-level line interleaving.
# Swap luma and chroma lines
ffmpeg -i input.mp4 -vf "il=l=s:c=s" output.mp4
# Step 1: Detect interlacing
ffmpeg -i dvd_rip.vob -vf "idet" -frames:v 500 -f null -
# Step 2: Deinterlace (if interlaced)
ffmpeg -i dvd_rip.vob \
-vf "yadif=1:-1:1" \
-c:v libx264 -crf 18 \
-c:a aac -b:a 192k \
output.mp4
# For telecined content (film-based DVDs):
ffmpeg -i dvd_rip.vob \
-vf "fieldmatch,decimate" \
-r 24000/1001 \
-c:v libx264 -crf 18 \
output.mp4
# High quality deinterlacing
ffmpeg -i broadcast_1080i.ts \
-vf "bwdif=1:-1:0" \
-c:v libx264 -crf 18 -preset slow \
-c:a copy \
output_1080p.mp4
# With GPU acceleration
ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
-i broadcast_1080i.ts \
-vf "bwdif_cuda=1" \
-c:v h264_nvenc -preset p4 \
-c:a copy \
output_1080p.mp4
#!/bin/bash
# Detect and process based on content type
INPUT="$1"
# Detect interlacing type
result=$(ffmpeg -i "$INPUT" -vf "idet" -frames:v 1000 -f null - 2>&1)
if echo "$result" | grep -q "Multi.*[1-9]"; then
echo "Interlaced content detected - applying bwdif"
ffmpeg -i "$INPUT" -vf "bwdif" -c:v libx264 -crf 18 output.mp4
elif echo "$result" | grep -q "Repeated.*[1-9]"; then
echo "Telecined content detected - applying IVTC"
ffmpeg -i "$INPUT" -vf "fieldmatch,decimate" -c:v libx264 -crf 18 output.mp4
else
echo "Progressive content - no deinterlacing needed"
ffmpeg -i "$INPUT" -c:v libx264 -crf 18 output.mp4
fi
| Filter | Quality | Speed | Best For |
|---|---|---|---|
yadif | Good | Fast | General use |
bwdif | Better | Medium | Quality-focused |
w3fdif | Best | Slow | Critical work |
yadif_cuda | Good | Very Fast | GPU systems |
bwdif_cuda | Better | Fast | GPU systems |
deinterlace_vaapi | Good | Very Fast | Linux/VAAPI |
idet to determine content typeThis guide covers deinterlacing and telecine for 2025. For hardware acceleration details, see ffmpeg-hardware-acceleration. For video analysis, see ffmpeg-video-analysis.
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.