View Single Post
Old 15th October 2011, 00:11   #1  |  Link
johnmeyer
Registered User
 
Join Date: Feb 2002
Location: California
Posts: 2,691
Recover image from shutterless 16mm projector capture

I have posted here before about the unique way that I capture film from a shutterless 24 fps 16mm projector. I have transferred hundreds of reels of film, but have never been 100% happy with the software I have been using (based on TFM and TDecimate) to recover the film frames from the video capture.

I would like to improve my software and would be grateful if anyone has some hints or ideas of other software or scripts that I might use to improve the accuracy of the process. For anyone interested in the challenge, here is a short clip of the raw capture. It is DV format, so it is BFF. If you separate it into fields and then walk through it, I think you will very quickly understand how the capture works and what the challenge is:

NTSC DV capture of 16mm film from a shutterless projector

I want to thank in advance anyone who provides even a small hint or idea. I think that ExBlend & SRestore might be better for this job, but I haven't been able to get them to work.

I don't want to make this post too long, but so you can understand how the system works, let me give you a short description:

I remove the shutter from the projector; I then point an NTSC interlaced camcorder (it HAS to be NTSC, and it has to be able to capture interlaced video -- 60p would also probably work) at the projector and set the shutter speed to 1/1000 of a second. It turns out that doing this absolutely guarantees that the camera will capture two successive fields from each frame of film. The video camera and the projector are not synchronized, so as the capture proceeds, sometimes you get two good fields in a row, with the next field all blurred because the film is captured during the moment the projector is moving the film to the next frame (remember, the shutter has been removed). Sometimes you can get three fields in a row that are all good and all from the same frame of film. All that is needed is to identify two fields in a row that are pristine and from the same frame of film.

Put another way, you always get two fields in a row that are from the same frame of film, and sometimes the next frame after those two is identical to the first of the two, and other times it is garbage.

There is a huge amount of movement from frame-to-frame when capturing film due to gate jitter and dirt, even if the film camera was pointing at a static scene, so it is usually pretty easy to identify one frame from the other.

So, what I need to do is to decimate the third good field, or the garbage field (captured during the film pulldown), and then recombine the two good, matching fields into a frame. I need to make sure that the two fields are from the same frame of film.

Now, here's the twist that may not be obvious: it turns out that it doesn't matter what order the fields happen to be captured, because once the frame of film is in the projector gate, it doesn't move until the projector pulls down the next frame. Thus, you can combine an upper field with the following lower field, and then at a later time combine a lower field with the following upper field. Again, this can be done because the film doesn't move once pulldown has stopped, so there is no temporal difference between upper and lower field.

Anyway, the software I've been using is based in TFM and TDecimate and never has worked 100%. I would like to create a better way to do this field matching and decimation.

Any ideas you have would be appreciated. FWIW, the following is the basic script I currently use.

Code:
# Script to recover film frames from film projected on shutterless 16mm projector.
# Copyright 2010 John H. Meyer
# Written February 16, 2010
#-----------------------------

loadPlugin("c:\Program Files\AviSynth 2.5\plugins\TIVTC.dll")
loadplugin("C:\Program Files\AviSynth 2.5\plugins\MVTools\mvtools2.dll")

AVISource("e:\frameserver.avi")

AssumeBFF()
source=ConvertToYV12(interlaced=true)

tfm(display=false,mode=2,pp=1,cthresh=25,micmatching=3,scthresh=2,mmsco=false)
tdecimate(mode=7,display=false, dupThresh=3.5,vidThresh=0.3,rate=23.976, hint=true,debug=false)

FlipVertical()
assumefps(23.976)

Last edited by johnmeyer; 15th October 2011 at 01:16. Reason: Moved the link to the clip from the bottom to the top of the post
johnmeyer is offline   Reply With Quote