Preface - Teasers - Enhanced Terminology - Reference - Encoding of DVD & Bluray Content - About Audio - Recovering The Camera Shots
Basic Primitives - Pulldown Primitives - Advanced Interpolations - Seen In The Wild, Repairing Video
encode, examples:
NOTATION: [#pps]#fps ...encode #pps at #fps -- #pps is picture rate, #fps is frame rate [note 1]
NOTATION: [24pps]24fps ...encode 24pps at 24fps -- never found on commercial DVDs or Blurays
NOTATION: [24pps]24'fps & 48KHz[x1.001]48KHz ...encode 24pps at 24'fps -- found on commercial DVDs & Blurays -- x/1.001 slowdown
NOTATION: [24pps]25fps & 48KHz[x0.96]48KHz ...encode 24pps at 25fps -- found on commercial DVDs & Blurays -- x/0.96 speedup
NOTATION: [25pps]25fps ...encode 24pps at 25fps -- found on commercial DVDs & Blurays
NOTATION: [30pps]30fps ...encode 30pps at 30fps -- never found on commercial DVDs or Blurays
NOTATION: [30pps]30'fps & 48KHz[x1.001]48KHz ...encode 30pps at 30'fps -- found on commercial DVDs & Blurays -- x/1.001 slowdown
NOTATION: [30'pps]30'fps ...encode 30'pps at 30'fps -- found on commercial DVDs & Blurays
References: "Enhanced Terminology": "24'" "30'" "slowdown" "speedup", and "Encoding of DVD & Bluray Content" and "About Audio".
[note 1] If #pps is less then #fps, playback of pictures is sped up to the frame rate. If #pps is greater then #fps, playback of pictures is slowed down to the frame rate.
decode, examples:
NOTATION: #fps[#pps] ...decode #pps from #fps -- #fps is frame rate, #pps is picture rate
NOTATION: 24'fps[24pps] & 48KHz[x/1.001]48KHz ...decode 24pps from 24'fps -- reverses x/1.001 slowdown
NOTATION: 25fps[24pps] & 48KHz[x/0.96]48KHz ...decode 25fps from 24pps -- reverses x/0.96 speedup
NOTATION: 25fps[25pps] ...decode 25fps from 24pps
NOTATION: 30'fps[30pps] & 48KHz[x/1.001]48KHz ...decode 30'fps from 30pps -- reverses x/1.001 slowdown
NOTATION: 30'fps[30'pps] ...decode 30'fps from 30'pps
interlace decodes scan fields at rate: #sps, then weaves to make quasi pictures at rate: (# / 2)pps.
NOTATION: #sps[(#/2)pps] ...decode an sps stream (at rate #sps) to make a quasi pps stream (at rate (#/2)pps)
NOTATION: 50sps[25pps] ...decode 50sps to make 25pps
NOTATION: 60'sps[30'pps] ...decode 60'sps to make 30'pps
References: "Encoding of DVD & Bluray Content": "ersatz-PAL" "ersatz-NTSC", and "About Audio".
Tip: Scans are never found on commercial DVDs & Blurays but quasi pictures are often found.
weave converts halfpics at rate: #hps, into pictures at rate: (#/2)pps.
NOTATION: #hps__(#/2)pps
unweave converts pictures at rate: #pps, into halfpics at rate: #x2hps.
NOTATION: #pps__#x2hps
halfpic swap is the simplest notation possible. It corrects the pictures corrupted by 'top_field_first' metadata errors.
+--1st stride-->+--2nd stride-->+--3rd stride-->
import halfpics: (a_____)(A_____)(b_____)(B_____)(c_____)(C_____)
NOTATION: (aA)(Aa)
export halfpics: (A_____)(a_____)(B_____)(b_____)(C_____)(c_____)
bob converts combed pictures at rate: #pps, to uncombed pictures at rate: #x2pps, but provokes a frame-to-frame line bobbing effect.
+------1st stride------>+------2nd stride------>
import pictures: (A+b___________________)(C+d___________________) ...#pps
NOTATION: #pps__#x2hps__(Ab)(AAbb)=#x4hps__#x2pps
\ \ \ \ \____________\___ weave
\ \ \________\___ double halfpics
\__________\___ unweave
unweave: (A_________)(b_________)(C_________)(d_________) ...#x2hps
double halfpics: (A___)(A___)(b___)(b___)(C___)(C___)(d___)(d___) ...#x4hps
weave: (A+A_______)(b+b_______)(C+C_______)(d+d_______) ...#x2pps
halfbob 1: Halves the bobbing effect, or 2: Is a trial-&-error method for improving videos that have seriously flawed pictures -- try it both without and with cosmetic filters such as yadif.
+------1st stride------>+------2nd stride------>
import pictures: (A+b___________________)(C+d___________________).. ...#pps
NOTATION: #pps__#x2hps__(Ab)(A A§b b)=#x3hps__(123)(1223)=#x4hps__#x2pps
\ \ \ \ \ \ \____________\___ weave
\ \ \ \ \_________\___ repeat middle halfpic
\ \ \___________\___ synthesize middle halfpic
\__________\___ unweave
unweave: (A_________)(b_________)(C_________)(d_________) ...#x2hps
synthesize middle halfpic: (A_____)(A§b___)(b_____)(C_____)(C§d___)(d_____) ...#x3hps
duplicate middle halfpic: (A___)(A§b_)(A§b_)(b___)(C___)(C§d_)(C§d_)(d___) ...#x4hps
weave: (A+A§b_____)(A§b+b_____)(C+C§d_____)(C§d+d_____) ...#x2pps
interpolate-by-twos are interpolations that, with each pass, produce new pictures or halfpics that contain images that are midway between the images contained by the existing pictures or halfpics. Interpolate-by-twos is distinguished by x-factors that are integer powers of 2. What follows is the 1st 3 sets of a family of primitives that, in theory, is infinite. The most impactful way to depict them is as tables.
interpolate-x2 is 1-pass interpolation.
+------1st stride------>+------2nd stride------>
import pictures: (A_____________________)(B_____________________) ...#pps
: . :
___NOTATIONS____ . :
(A)(A§$) (1=A§B_________________)(___________ ...#pps [note 1]
(A)(A A§$) (A_________)(1_________)(__________)(__________) ...#x2pps
[note 1] Picture 1 depicts the interpolated image (and its moving image objects) midway between pictures A & B (as though the camera had been shooting at 2x).
interpolate-x4 is 2-pass interpolation that can produce smoother picture sequences (or lower judder when PTSs are forced).
+------1st stride------>+------2nd stride------>
import pictures: (A_____________________)(B_____________________) ...#pps
: . . . :
___NOTATIONS____ . (1=A§B_________________)(___________ ...pass 1, #pps
(A)(A§..$) (2=A§1_________________)(_________________ ...pass 2, #pps [note 2]
(A)(A..§$) . . (3=1§B_________________)(_____ ...pass 2, #pps
(A)(A§.§$) (2_________)(3_________)(__________)(_____ ...pass 2, #x2pps
(A)(A A§§§$) (A___)(2___)(1___)(3___)(____)(____)(____)(____) ...pass 2, #x4pps [note 3]
[note 2] Picture 2, for example, depicts the interpolated image (and its moving image objects) midway between pictures A & 1 (as though the camera had been shooting at 4x).
[note 3] There are 2 more 2-pass export notations: A.§§$ & A§§.$ but their utility is limited to conversions that force PTSs.
interpolate-x8 is 3-pass interpolation that can produce even smoother picture sequences or even (or lower judder when PTSs are forced).
+------1st stride------>+------2nd stride------>
import pictures: (A_____________________)(B_____________________) ...#pps
: . . . . . . . :
___NOTATIONS____ . . . (1=A§B_________________)(___________ ...pass 1, #pps
. (2=A§1_____)(3=1§B_____)(__________)(_____ ...pass 2, #pps
(A)(A§......$) (4=A§2_________________)(____________________ ...pass 3, #pps [note 4]
(A)(A..§....$) . . (5=2§1_________________)(______________ ...pass 3, #pps
(A)(A....§..$) . . . . (6=1§3_________________)(________ ...pass 3, #pps
(A)(A......§$) . . . . . . (7=3§B_________________)(__ ...pass 3, #pps
(A)(A§...§..$) (4_________)(6_________)(__________)(________ ...pass 3, #x2pps
(A)(A..§...§$) . . (5_________)(7_________)(__________)(__ ...pass 3, #x2pps
(A)(A§.§.§.§$) (4___)(5___)(6___)(7___)(____)(____)(____)(__ ...pass 3, #x4pps
(A)(A A§§§§§§§$) (A)(4)(2)(5)(1)(6)(3)(7)(_)(_)(_)(_)(_)(_)(_)(_) ...pass 3, #x8pps [note 5]
[note 4] Picture 4, for example, depicts the interpolated image (and its moving image objects) midway between pictures A & 2 (as though the camera had been shooting at 8x).
[note 5] There are 112 more 3-pass export notations but their utility is limited to conversions that force PTSs.
A.....§§$ A....§.§$ A....§§.$ A....§§§$ A...§..§$ A...§.§§$ A...§§..$ A...§§.§$ A...§§§.$ A...§§§§$ A..§..§.$ A..§..§§$ A..§.§..$ A..§.§.§$ A..§.§§.$ A..§.§§§$ A..§§...$ A..§§..§$ A..§§.§.$ A..§§.§§$ A..§§§..$ A..§§§.§$ A..§§§§.$ A..§§§§§$ A.§....§$ A.§...§§$ A.§..§..$ A.§..§.§$ A.§..§§.$ A.§..§§§$ A.§.§..§$ A.§.§.§§$ A.§.§§..$ A.§.§§.§$ A.§.§§§.$ A.§.§§§§$ A.§§....$ A.§§...§$ A.§§..§.$ A.§§..§§$ A.§§.§..$ A.§§.§.§$ A.§§.§§.$ A.§§.§§§$ A.§§§...$ A.§§§..§$ A.§§§.§.$ A.§§§.§§$ A.§§§§..$ A.§§§§.§$ A.§§§§§.$ A.§§§§§§$ A§.....§$ A§....§.$ A§....§§$ A§...§.§$ A§...§§.$ A§...§§§$ A§..§...$ A§..§..§$ A§..§.§.$ A§..§.§§$ A§..§§..$ A§..§§.§$ A§..§§§.$ A§..§§§§$ A§.§....$ A§.§...§$ A§.§..§.$ A§.§..§§$ A§.§.§..$ A§.§.§§.$ A§.§.§§§$ A§.§§...$ A§.§§..§$ A§.§§.§.$ A§.§§.§§$ A§.§§§..$ A§.§§§.§$ A§.§§§§.$ A§.§§§§§$ A§§.....$ A§§....§$ A§§...§.$ A§§...§§$ A§§..§..$ A§§..§.§$ A§§..§§.$ A§§..§§§$ A§§.§...$ A§§.§..§$ A§§.§.§.$ A§§.§.§§$ A§§.§§..$ A§§.§§.§$ A§§.§§§.$ A§§.§§§§$ A§§§....$ A§§§...§$ A§§§..§.$ A§§§..§§$ A§§§.§..$ A§§§.§.§$ A§§§.§§.$ A§§§.§§§$ A§§§§...$ A§§§§..§$ A§§§§.§.$ A§§§§.§§$ A§§§§§..$ A§§§§§.§$ A§§§§§§.$
4-5 interpolate-x2 converts strides of 4 pictures at rate: #pps, to strides of 5 pictures at rate: (#x5/4)pps, that are suitable, for example, for cinema-at-30'fps interpolate-x2.
import pictures: (A_____________________)(B_____________________)(C_____________________)(D_____________________) ...#pps
: . : . : . : .
NOTATION: #pps__#x2hps__(A-D)(A B B§C C§D D)=(#x10/4)hps__(#x5/4)pps
\__________\___ unweave \_____________________\___ weave
. . . .
pass #1: . (1=B§C_____) (2=C§D_____) .
export pictures: (A_____________________)(B_________)(1_____________________)(2_________)(D_____________________) ...(#x5/4)pps (variable picture rate)
Extra burden: 2 picture interpolations per stride of 4 imported pictures -- Note that of 4 potential picture interpolations, only 2 are actually done.
4-5 interpolate-x8 converts strides of 4 pictures at rate: #pps, to strides of 5 pictures at rate: (#x5/4)pps, that are suitable, for example, for cinema-at-30'fps interpolate-x8.
import pictures: (A_____________________)(B_____________________)(C_____________________)(D_____________________) ...#pps
: . . . . . . . : . . . . . . . : . . . . . . . : . . . . . . .
NOTATION: #pps__(A-D)(A A.....§.B B....§..C C..§....D D.§.....$)=(#x5/4)pps
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
pass #1: . . . (0=A§B_____) . . . (1=B§C_____) . . . (2=C§D_____) . . . (3=D§$_____)
pass #2: . . . . . (4___) . . . . . (5___) . (6___). . . . . (7___). . . . ...4=0§B; 5=1§C; 6=C§2; 7=D§3
pass #3: . . . . . . . . . . . (8). . . . (9). . . . . . . . . . . ...8=1§5; 9=6§2
(A_______________)(4=A.....§.B________)(8=B....§..C_____)(9=C..§....D________)(7=D.§.....$_____) ...[note 1]
export pictures: (A_______________)(4__________________)(8_______________)(9__________________)(7_______________) ...(#x5/4)pps [note 2]
Extra burden: 10 picture interpolations per stride of 4 imported pictures -- Note that of 20 potential picture interpolations, only 10 are actually done.
[note 1] Author comment: Showing (below) is better than explaining.
A <= 1st export picture
A.....§.B <= 2nd export picture -- note the dot intervals
B....§..C <= 3rd export picture -- note the dot intervals
C..§....D <= 4th export picture -- note the dot intervals
D.§.....$ <= 5th export picture -- note the dot intervals
[note 2] Variable picture rate! When encoded with constant frame rate, there will be some judder.
interpolate-x16 converts an import stride of 1 picture at rate: #pps, to an export stride of 5 pictures at rate: #x5pps, that is suitable, for example, for cinema-to-120fps interpolate-x16.
import pictures: (A_____________________________________________________________________________________________________________) ...#pps
: . . . . . . . . . . . . . . .
NOTATION: #pps__(A)(A A..§..§...§..§..$)=(#x5/4)pps ...compact notation [note 1]
#pps__(A)(A A..§............$ A.....§.........$ A.........§.....$ A............§..$)=#x5pps ...long format notation [note 1]
: . . . . . . . . . . . . . . .
pass #1: . . . . . . . (1=A§$_________________________________________________)
pass #2: . . . (2=A§1_____________________). . . . (3=1§$_____________________)
pass #3: . (4=A§2_______). . (5=2§1_______). . (6=1§3_______). . (7=3§$_______)
pass #4: . . (8=4§2). . . . . . . . . (9=3§7). .
(A__________________)(8=A..§............$)(5=A.....§.........$_______)(6=A.........§.....$)(9=A............§..$) ...[note 1]
export pictures: (A__________________)(8__________________)(5_________________________)(6__________________)(9__________________) ...#x5pps [note 2]
Extra burden: 9 picture interpolations per imported picture -- Note that of 26 potential picture interpolations, only 9 are actually done.
[note 1] Author comment: Showing (below) is better than explaining.
A A..§..§...§..§..$ <= all 5 export pictures, compact notation -- note the dot intervals
A <= 1st export picture
A..§............$ <= 2nd export picture, long format notation -- note the dot intervals
A.....§.........$ <= 3rd export picture, long format notation -- note the dot intervals
A.........§.....$ <= 4th export picture, long format notation -- note the dot intervals
A............§..$ <= 5th export picture, long format notation -- note the dot intervals
[note 2] Variable picture rate! When encoded with constant frame rate, there will be some judder.
interpolate-by-any [note 1] are interpolations that produce new pictures or halfpics in a single pass at any desired x-factor (i.e. with any desired PTSs). Interpolate-by-any is distinguished by x-factors that are not integer powers of 2. Interpolate-by-any would be computationally expensive and probably would be very slow. What follows is the 1st 4 sets of a family of primitives that, in theory, is infinite. The most impactful way to depict them is as tables.
[note 1] It is unknown whether interpolate-by-any is implemented in any existing video tool.
interpolate-x3.
+---------------------1st stride--------------------->+---------------------2nd stride--------------------->
import pictures: (A___________________________________________________)(B_________________________________________________ ...#pps
: . . :
____NOTATIONS____ . . :
(A)(A§.$) (1=A§.B______________________________________________)(________________________________ ...#pps
(A)(A.§$) . (2=A.§B______________________________________________)(______________ ...#pps
(A)(A A§§$) (A_______________)(1_______________)(2_______________)(________________)(________________)(______________ ...#x3pps
interpolate-x5.
+---------------------1st stride--------------------->+---------------------2nd stride--------------------->
import pictures: (A___________________________________________________)(B_________________________________________________ ...#pps
: . . . . :
____NOTATIONS____ . . . . :
(A)(A§...$) (1=A§...B____________________________________________)(_______________________________________ ...#pps
(A)(A.§..$) . (2=A.§..B____________________________________________)(_____________________________ ...#pps
(A)(A..§.$) . . (3=A..§.B____________________________________________)(__________________ ...#pps
(A)(A...§$) . . . (4=A...§B____________________________________________)(_______ ...#pps
(A)(A A§§§§$) (A________)(1_______)(2________)(3________)(4________)(_________)(________)(_________)(_________)(_______ ...#x5pps
interpolate-x6.
+---------------------1st stride--------------------->+---------------------2nd stride--------------------->
import pictures: (A___________________________________________________)(B_________________________________________________ ...#pps
: . . . . . :
____NOTATIONS____ . . . . . :
(A)(A§....$) (1=A§....B___________________________________________)(_________________________________________ ...#pps
(A)(A.§...$) . (2=A.§...B___________________________________________)(________________________________ ...#pps
(A)(A..§..$) . . (3=A..§..B___________________________________________)(_______________________ ...#pps
(A)(A...§.$) . . . (4=A...§.B___________________________________________)(______________ ...#pps
(A)(A....§$) . . . . (5=A....§B___________________________________________)(_____ ...#pps
(A)(A A§§§§§$) (A______)(1______)(2______)(3______)(4______)(5______)(_______)(_______)(_______)(_______)(_______)(_____ ...#x6pps
interpolate-x7.
+---------------------1st stride--------------------->+---------------------2nd stride--------------------->
import pictures: (A___________________________________________________)(B_________________________________________________ ...#pps
: . . . . . . :
____NOTATIONS____ . . . . . . :
(A)(A§.....$) (1=A§.....B__________________________________________)(__________________________________________ ...#pps
(A)(A.§....$) . (2=A.§....B__________________________________________)(___________________________________ ...#pps
(A)(A..§...$) . . (3=A..§...B__________________________________________)(___________________________ ...#pps
(A)(A...§..$) . . . (4=A...§..B__________________________________________)(___________________ ...#pps
(A)(A....§.$) . . . . (5=A....§.B__________________________________________)(___________ ...#pps
(A)(A.....§$) . . . . . (6=A.....§B__________________________________________)(____ ...#pps
(A)(A A§§§§§§$) (A_____)(1____)(2_____)(3_____)(4_____)(5____)(6_____)(______)(_____)(______)(______)(______)(_____)(____ ...#x7pps
4-5 interpolate-x5 is an example of applying interpolate-x5 to 4-to-5 picture conversion.
import pictures: (A_________________)(B_________________)(C_________________)(D_________________) ...#pps
: . . . . : . . . . : . . . . : . . . .
NOTATION: #pps__(A-D)(A A...§B B..§.C C.§..D D§...$)=(#x5/4)pps
. . . . . . . . . . . . . . . .
interpolations: (A_____________)(1=A...§B______)(2=B..§.C______)(3=C.§..D______)(4=D§...E______) ...(#x5/4)pps
export pictures: (A_____________)(1_____________)(2_____________)(3_____________)(4_____________) ...(#x5/4)pps
Extra burden: 4 picture interpolations per stride of 4 imported pictures.