No-cost PAL to NTSC conversion

This is a simple formula for low-cost conversion from PAL to NTSC material or, more accurately, 576/25i to 480/30i (or 30000/1001 fps to be exact). It uses field-blending, and there is no motion interpolation. Therefore, the method is quick to use on ordinary computers, but will not meet broadcast standards if you use it for a sustained length of time, or for a large part of your footage in a completed programme.

Prerequisties are AviSynth and FFmpeg with the AviSynth front end compiled in. You can get this, compiled for Windows 64-bit, from my website (see earlier blogs).

First, get your material into 25fps form. My source for this test was a DVD of a film, so the pictures are PsF (progressively scanned in an interlaced frame).

Use an AviSynth script like this, which I’ve called 25to2997.avs. I’ve used the FFmpegSource2 plugin to import the footage, but you can use anything else for input if you have it.


# Import the video. Disregard the sound for now.
FFmpegSource2("C:\Users\john_000\Videos\billsfilm\film-stereo.mp4")
# If this is a DV source, you'll want to switch the fields because PAL DV tapes
# record the fields the wrong way around i.e. Bottom Field First instead of
# Top Field First
# ComplementParity()
# Now deinterlace the pictures, producing a whole new frame for each field
Bob()
# ConvertFPS is AviSynth's function to convert frame rate by blending frames
# to achieve an illusion of continuous motion.
# The first number is the numerator, and the second the denominator, for fractional
# frame rates such as 29.97
ConvertFPS(60000, 1001)
# Now blend the frames back into interlaced fields
SeparateFields.SelectEvery(4,0,3)
Weave()

You now have interlaced, field-blended video at 29.97fps. If this is a PAL to NTSC standard-definition conversion, you’ll also need to change the size of the frames from 720×576 to 720×480.

This is where FFmpeg can perform the scaling and the encoding in one pass. Some other problems with the incoming video are corrected also. FFmpeg additionally brings in the audio from the original file, disregarding the video using the -map option. Here’s my command line for converting this widescreen PAL film into a widescreen NTSC file suitable for burning to a DVD.

So, what you have here is an FFmpeg command line that:

  • uses AviSynth to create a field-blended input,
  • sends this to FFmpeg,
  • sends the audio track of the original film to FFmpeg,
  • scales it using the highest-quality algorithm ensuring that it is interlaced-aware scaling that is used,
  • sharpens it a little because 480i pictures are awfully soft to my eyes,
  • makes the colour standard clear,
  • sets the aspect ratio explicitly,
  • sets the correct field labelling, because it came in incorrectly,
  • sets certain MPEG-2 video coding parameters for higher quality,
  • sets a bit-rate that will allow this particular movie to fit on a single-layer DVD,
  • brings in the audio track and wraps it up into a convenient container for DVD burning.


$ ffmpeg -i C:\Users\john_000\Documents\25to2997.avs -i C:\Users\john_000\Videos\billsfilm\film-stereo.mp4 -map 0:0 -map 1:1 -vf scale=720:480:lanczos:interl=1:out_color_matrix=bt601,smartblur=1.0:-0.6,setdar=16/9,setfield=tff -target ntsc-dvd -flags +ilme+ildct -bufsize 1835008 -b:v 5.5M -aspect 16:9 -g 15 -bf 2 -trellis 2 -cmp 3 -subcmp 3 -mbd 2 -me_method epzs -intra_vlc 1 -acodec ac3 -b:a 256k film-stereo-30fps.vob