Claude-skill-registry ffmpeg-deinterlacing-telecine
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.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ffmpeg-deinterlacing-telecine" ~/.claude/skills/majiayu000-claude-skill-registry-ffmpeg-deinterlacing-telecine && rm -rf "$T"
skills/data/ffmpeg-deinterlacing-telecine/SKILL.mdCRITICAL GUIDELINES
Windows File Path Requirements
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 (/).
Quick Reference
| Task | Filter | Command Pattern |
|---|---|---|
| Basic deinterlace | | |
| High quality deinterlace | | |
| CUDA deinterlace | | |
| Inverse telecine | | |
| Field order | | |
| Detect interlace | | |
When to Use This Skill
Use for interlaced and telecined content:
- Converting broadcast/TV content to progressive
- DVD and Blu-ray processing
- Legacy video digitization
- Professional video production
- Field order correction
- Telecine removal (3:2 pulldown)
FFmpeg Deinterlacing & Telecine (2025)
Comprehensive guide to deinterlacing, field processing, and telecine removal.
Understanding Interlaced Video
What is Interlacing?
Interlaced video stores two half-resolution fields per frame:
- Top Field (TFF): Odd lines (1, 3, 5, ...)
- Bottom Field (BFF): Even lines (2, 4, 6, ...)
Common interlaced formats:
- 1080i (1920x1080, 50i or 60i)
- 576i (720x576, 50i - PAL)
- 480i (720x480, 60i - NTSC)
Detecting Interlaced Content
# 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
Deinterlacing Filters
yadif - Yet Another DeInterlacing Filter
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 |
|---|---|---|
| Output mode | 0=same fps, 1=double fps |
| Field parity | -1=auto, 0=TFF, 1=BFF |
| Frames to deinterlace | 0=all, 1=interlaced only |
Mode options:
/0
- Output one frame per input framesend_frame
/1
- Output one frame per field (double fps)send_field
/2
- Like 0, without spatial interlacing checksend_frame_nospatial
/3
- Like 1, without spatial interlacing checksend_field_nospatial
bwdif - Bob Weaver Deinterlacing Filter
Higher 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
w3fdif - Martin Weston 3-Field Deinterlacing
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 coefficients | simple, complex |
| Frames to deinterlace | all, interlaced |
kerndeint - Kernel Deinterlacing
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
Hardware-Accelerated Deinterlacing
yadif_cuda - NVIDIA CUDA
# 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
bwdif_cuda - NVIDIA CUDA (FFmpeg 7.0+)
# Higher quality CUDA deinterlacing ffmpeg -hwaccel cuda -hwaccel_output_format cuda \ -i interlaced.mp4 \ -vf "bwdif_cuda" \ -c:v h264_nvenc output.mp4
bwdif_vulkan - Vulkan (FFmpeg 8.0+)
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
deinterlace_vaapi - VAAPI (Linux)
# 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:
- Use driver defaultdefault
- Simple bob (double rate)bob
- Weave fields togetherweave
- Motion-adaptive (best quality)motion_adaptive
- Motion-compensated (highest quality)motion_compensated
deinterlace_qsv - Intel QSV
# 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:
- Off0
- Bob1
- Advanced (motion adaptive)2
Inverse Telecine (IVTC)
Understanding Telecine (3:2 Pulldown)
Telecine converts 24fps film to 30fps video by duplicating fields:
Film: A B C D Video: AA AB BB BC CC CD DD DA
pullup - Pullup Filter
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 |
|---|---|---|
, | Left/right junk pixels | 1-width |
, | Top/bottom junk pixels | 1-height |
| Strict breaks | 0 or 1 |
| Metric plane | y, u, v |
fieldmatch - Field Matching
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
decimate - Frame Decimation
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
Field Processing
fieldorder - Change Field Order
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
separatefields - Separate Fields
Splits each frame into two fields.
# Separate fields (doubles frame count, halves height) ffmpeg -i interlaced.mp4 -vf "separatefields" output.mp4
weave - Weave Fields Together
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
tinterlace - Temporal Interlacing
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 fields from consecutive frames |
/ | Drop even frames, interleave remaining |
/ | Drop odd frames, interleave remaining |
/ | Pad alternating lines with black |
/ | Interleave, TFF |
/ | Interleave, BFF |
/ | Double rate interlacing |
/ | Double rate field merge |
il - Interleave/Deinterleave Lines
Low-level line interleaving.
# Swap luma and chroma lines ffmpeg -i input.mp4 -vf "il=l=s:c=s" output.mp4
Common Workflows
DVD to Progressive 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
Broadcast 1080i to 1080p
# 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
Mixed Content Detection and Processing
#!/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
Quality Comparison
| Filter | Quality | Speed | Best For |
|---|---|---|---|
| Good | Fast | General use |
| Better | Medium | Quality-focused |
| Best | Slow | Critical work |
| Good | Very Fast | GPU systems |
| Better | Fast | GPU systems |
| Good | Very Fast | Linux/VAAPI |
Best Practices
- Always detect first - Use
to determine content typeidet - Preserve frame rate - Use mode 0 for same fps, mode 1 for double
- Match field order - Use auto-detection or specify correct parity
- Use GPU when available - CUDA/VAAPI filters are much faster
- IVTC for film content - Don't deinterlace telecined film, use pullup/fieldmatch
- Test on sample - Check a short segment before processing full video
This guide covers deinterlacing and telecine for 2025. For hardware acceleration details, see
ffmpeg-hardware-acceleration. For video analysis, see ffmpeg-video-analysis.