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.