How to Perform Reverse Telecine on NTSC Video Using FFmpeg
This article provides a practical guide on how to perform a reverse telecine (also known as inverse telecine or IVTC) on a 29.97 fps NTSC video source using FFmpeg. You will learn how to reconstruct the original 23.976 fps progressive frames from telecined content using FFmpeg’s specialized video filters, ensuring a clean, jitter-free playback.
Understanding the Process
Telecine is a process used to convert film (originally shot at 24 frames per second) to NTSC video (which runs at 29.97 frames per second) by duplicating fields in a 3:2 pattern. Reverse telecine (IVTC) reverses this process by matching the split fields back into progressive frames and discarding the duplicate frames, restoring the video to its original progressive 23.976 fps format.
Method
1: Using the Modern fieldmatch and decimate
Filters (Recommended)
The most accurate and robust way to perform inverse telecine in
FFmpeg is by using the fieldmatch and decimate
filters together. This filter chain automatically detects field parity,
matches interlaced fields to reconstruct progressive frames, and deletes
the resulting duplicate frames.
Run the following command in your terminal:
ffmpeg -i input_telecined.mp4 -vf "fieldmatch=order=auto,decimate" -c:a copy output_progressive.mp4Command Breakdown:
-i input_telecined.mp4: Specifies your input NTSC video source.-vf: Introduces the video filtergraph.fieldmatch=order=auto: Analyzes the fields and reconstructs progressive frames. Theorder=autoparameter tells FFmpeg to automatically detect the field order (top field first or bottom field first).decimate: Removes one duplicate frame out of every five frames, reducing the frame rate from 29.97 fps to the standard film rate of 23.976 fps.-c:a copy: Copies the audio stream directly without re-encoding to preserve quality and speed up the process.
Method 2: Using the
pullup Filter
FFmpeg also includes a dedicated pullup filter designed
to handle telecine reversal. This filter is highly effective at handling
mixed-content sources (such as video containing both telecined film and
native 29.97 fps interlaced video), as it is less prone to breaking when
the telecine cadence changes.
Run the following command:
ffmpeg -i input_telecined.mp4 -vf "pullup,fps=24000/1001" -c:a copy output_progressive.mp4Command Breakdown:
pullup: Recombines fields to restore progressive frames. Unlikefieldmatch, thepullupfilter outputs a variable frame rate based on the detected cadence.fps=24000/1001: Forces the output frame rate to a constant 23.976 fps (represented mathematically as 24000/1001), conforming the variable frame rate output by thepullupfilter to standard NTSC film speed.
Tips for Best Results
- Determine Field Order: If
fieldmatch=order=autoproduces stuttering, manually specify the field order. Useorder=bfffor bottom field first ororder=tfffor top field first. - Container Compatibility: When outputting to
containers like MKV or MP4, using the
-vsync cfrflag (or-fps_mode cfrin newer FFmpeg versions) can help ensure constant frame rate compliance if your playback hardware requires it.