Trev's Articles

First Run of AVISynth Scripts

April 2009

There are so many example AVISynth scripts available to perform PAL to NTSC conversion, there was no way of determining which one provided the best results. In addition to the quality of the final video, there may also be some scripts that perform better, i.e. Take less time to convert..

 

PAL Video Clip of a beach scene with Seals, lots of Horizontal movement.

duration 1m 18s, size 286,889 KB

 

 

 

First run Results

 

Items highlighted in green were used for Second run testing.

 

Test Number

Quality

Overall Visual Rating

Conversion Time

1

Minor Combing

Smooth movement

1m 54s

2

Bad Combing

Jerky movement

1m 15s

3

Did not work

failed

4

Very Bad Combing

Jerky movement

1m 6s

5

Medium Combing

Very Jerky movement

47s

6

Medium Combing

Very Jerky movement

1m 49s

7

Medium Combing

Minor Jerky movement

1m 18s

8

Bad Combing

Minor Jerky movement

2m 5s

9

Bad Combing

Jerky movement

3m 40s

10

Medium Combing

Smooth movement

No Sound!

2m 42s

11

Minor Combing

Smooth movement

46s

12

No Combing

Smooth movement

3m 40s

13

Bad Combing

Jerky movement

2m 29s

14

Minor Combing

Jerky movement

51s

15

Minor Combing

Minor Jerky movement

1m 38s

16

Did not work

1m 10s

 

 

Quality Definitions

 

Jerky movement is where the picture 'stutters' on a horizontal PAN

Combing is an artifact of an Interlaced picture

 

A note on determining the output quality

Visual quality of these tests is based on an actual DVD output on a television. All output AVI files were burned to a DVD for viewing on a TV using a regular DVD player. Viewing interlaced AVI files on a PC can often look worse than a regular DVD, or in some cases the application will actually perform a deinterlace, so not showing a true representation of the video.

 

Combing examples:

This first image shows how the image should look (often shown as a deinterlaced picture)

 

This second image shows how the image looks with bad combing

 

 

 

Test scripts and details

 

Test #1

 

# PAL DV (50 fps) to NTSC DV (59.94 fps)
LoadPlugin("SmoothDeinterlacer.dll")
AVISource("PalDV2.avi")
ConvertToYUY2(interlaced=true)# Smoothdeinterlacer requires YUY2 
SmoothDeinterlace(tff=false, doublerate=true)
BilinearResize(720, 480)
ChangeFPS(59.94)
SeparateFields()
SelectEvery(4, 0, 3)
weave()

 

Test #2

 

v=AVIsource("PALDV2.avi") # source is 25 fps

return pal2ntsc(v)

function pal2ntsc(v)
{
last=v
#input TFF or BFF
assumeTFF
#assumeBFF
ConvertToYUY2(interlaced=true)# Smoothdeinterlacer requires YUY2
SmoothDeinterlace(tff=false, doublerate=false)
#LanczosResize(720,480)
BilinearResize(720,480)
#ChangeFPS(59.94) # crisp but slightly jerky
ConvertFPS(59.94) # smoother but slightly blurry
#SeparateFields()

#output TFF or BFF
#SelectEvery(4,1,2) # TFF
SelectEvery(4,0,3) # BFF
#Weave()

return last
}

 

 

Test #3

 

 

LoadPlugin("Convolution3d.dll") 
LoadPlugin("SmoothDeinterlacer.dll") 
avisource("paldv2.avi", false) 
ConvertToYUY2(interlaced=true)
Trim(40285,59711) 
crop(4,12,688,552) 
SeparateFields() 
odd=SelectOdd.Convolution3D (0, 6, 10, 6, 8, 2.8, 0) 
evn=SelectEven.Convolution3D (0, 6, 10, 6, 8, 2.8, 0) 
Interleave(evn,odd) 
Weave() 
AddBorders(16,12,16,12) 
SmoothDeinterlace(doublerate=true) 
LanczosResize(720,480) 
ChangeFPS(59.94) 
SeparateFields() 
SelectEvery(4,1,2) 
Weave() 
ConvertToYUY2(interlaced=true)

 

Test #4

 

# PAL DV (50 fps) to NTSC DV (59.94 fps)
LoadPlugin("LeakKernelDeint.dll") 
AVISource("Paldv2.avi")
ConvertToYUY2(interlaced=true)# Smoothdeinterlacer requires YUY2 
LeakKernelBob(Order=1,Threshold=4)
Lanczos4Resize(720,480)
ChangeFPS(59.94)
SeparateFields()
SelectEvery(4, 0, 3)
weave()

 

Test #5

 

#Load Video and Audio Sources
#Video = MPEG2Source("C:\Wherever\MyMpegFile.d2v")
AVISource("paldv2.avi")
#Split frames into fields
SeparateFields()
#Put frames in correct order, including duplicates
SelectEvery(10, 0,1,2,3,4,5,4,7,6,9,8,9)
#Slow down from 60fps to 59.94fps
AssumeFPS(60000,1001,sync_audio=true).SSRC(48000)
#Resize fields to NTSC-compatible size
Spline36Resize(720,240)
#Interlace video frames
Weave()

 

Test #6

 

v=AVIsource("PALDV2.avi") # source is 25 fps
return pal2ntsc(v)

function pal2ntsc(v)
{
last=v

#input TFF or BFF
assumeTFF
#assumeBFF
ConvertToYUY2(interlaced=true)# Smoothdeinterlacer requires YUY2
SmoothDeinterlace(doublerate=true)
#LanczosResize(720,480)
BilinearResize(720,480)
#ChangeFPS(59.94) # crisp but slightly jerky
ConvertFPS(59.94) # smoother but slightly blurry
#SeparateFields()

#output TFF or BFF
#SelectEvery(4,1,2) # TFF
SelectEvery(4,0,3) # BFF
#Weave()

return last
}

 

Test #7

 

v=AVIsource("PALDV2.avi") # source is 25 fps

return pal2ntsc(v)

function pal2ntsc(v)
{
last=v

#input TFF or BFF
assumeTFF
#assumeBFF
ConvertToYUY2(interlaced=true)# Smoothdeinterlacer requires YUY2
SmoothDeinterlace(tff=false, doublerate=false)
#LanczosResize(720,480)
BilinearResize(720,480)
#ChangeFPS(59.94) # crisp but slightly jerky
ConvertFPS(59.94) # smoother but slightly blurry
#SeparateFields()
#output TFF or BFF
#SelectEvery(4,1,2) # TFF
SelectEvery(4,0,3) # BFF
#Weave()

return last
}

 

Test #8

 

# PAL DV (50 fps) to NTSC DV (59.94 fps)
LoadPlugin("SmoothDeinterlacer.dll")
AVISource("PalDV2.avi")
ConvertToYUY2(interlaced=true)# Smoothdeinterlacer requires YUY2
SmoothDeinterlace(doublerate=true)
lanczosResize(720, 480)
ChangeFPS(59.94)
SeparateFields()
SelectEvery(4, 1, 2)
Weave()
ConvertToRGB()

 

Test #9

 

Import("kernelbob.avs")
AviSource("PALDV2.avi")
loadplugin("kerneldeint140.dll")
AssumeTFF() # optional in this case
kernelBob(1) # for TFF source, (0) for BFF
Lanczos4Resize(720,480) # or (352,480) for Half D1, (720,480) if you prefer
ConvertFPS(59.94) # or ChangeFPS if you prefer
SeparateFields()
SelectEvery(4,0,3)
Weave()

 

Test #10

 

LoadPlugin("Convolution3d.dll")
LoadPlugin("LeakKerneldeint.dll")
avisource("PALDV2.avi", false)
ConvertToYUY2(interlaced=true)# Smoothdeinterlacer requires YUY2
SeparateFields()
odd=SelectOdd.Convolution3D (1, 6, 10, 6, 8, 2.8, 0)
evn=SelectEven.Convolution3D (1, 6, 10, 6, 8, 2.8, 0)
Interleave(evn,odd)
Weave()
AssumeTFF()
LeakKernelBob(order=1,sharp=true)
Lanczos4Resize(720,480)
ConvertFPS(59.94)
SeparateFields()
SelectEvery(4,0,3)
Weave()
ConvertToYUY2(interlaced=true)

 

Test #11

 

#loadplugin("dgdecode.dll")
loadplugin("leakkerneldeint.dll")
AVIsource("PALDV2.avi")
ConvertToYUY2(interlaced=true)
LeakKernelDeint(order=1, threshold=10, sharp=true, twoway=false, map=false, linked=false, debug=false)
LanczosResize(720,480)
ChangeFPS(59.94) # or ConvertFPS(59.94)
SeparateFields()
#SelectEvery(4,1,2)
SelectEvery(4,0,3)
Weave()
ConvertToYUY2(interlaced=true)

 

Test #12

 

loadplugin("kerneldeint140.dll")
Import("kernelbob.avs")
AviSource("PALDV2.avi")
KernelBob(1) # for TFF source, order=0 for BFF (DV)
Lanczos4Resize(720,480)
ConvertFPS(59.94) # or ChangeFPS if you prefer
SeparateFields()
SelectEvery(4,0,3)
Weave()

 

Test #13

 

Import("kernelbob.avs")
LoadPlugin("kerneldeint140.dll")
AviSource("PALDV2.avi")
kernelbob()
LanczosResize(720,480)
ChangeFPS(59.94) #I would better use convertfps(59.94) here
SeparateFields()
SelectEvery(4,1,2)
Weave()
ConvertToRGB()

 

Test #14

Native VirtualDub was used for the conversion

 

Test #15

Windows Movie Maker was used for the conversion

 

Test #16

DVDate was used for the conversion

 

Close