View Full Version : 24p in 30i -> 24p -> 30i Workflow
bartrobinson
8th December 2006, 21:01
I have source material that was shot on a DVX100A. It was shot at 24p and essentially telecined to 30i. It's a single continuous shot, no edits. I have found that using AVISynth I can reliably inverse telecine back to the original 24p material using...
QTInput("video.mov")
#IVTC
AssumeFPS(30000,1001)
AssumeFrameBased()
AssumeBFF()
DoubleWeave()
Pulldown(1,4) #or Pulldown(0,3)
What I want to do is do some compositing work on the 24p frames, then using AVISynth telecine it back to 30i. Now that in itself isn't hard. Here is the important part: I want to put the fields and interlacing back in EXACTLY the same place and order. Ok, what code and numbers do I use to do that?
I have tried these examples I found on the forum...
#Telecine
AssumeFrameBased()
SelectEvery(2,0,0,0,1,1) #Generate 3:2 Pattern 2->5
AssumeBFF() #Set field order (TFF / BFF)
SeparateFields()
SelectEvery(4,0,3)
Weave() #Interlace
and...
#Telecine
AssumeFrameBased()
AssumeBFF() #Set field order(TFF / BFF)
SeparateFields()
SelectEvery(8,0,1,2,3,2,5,4,7,6,7)
Weave()
These telecine fine, however both produce a different order from the original. In other words, they aren't exactly the same at the original. So.. how can I do something like this, but get it in the right order? Also, please explain and comment any code you offer. Much thanks in advance!
actionman133
10th December 2006, 01:59
That will require more investigation on your part, bart. Telecine has 5 different offsets, depending on where the pattern begins. And for two of those five offsets, restoring them exactly will be impossible, because DoubleWeave () will remove the first field (which would be a stray field with no corresponding match), thus losing the ability to put that field back later.
May I ask why it is so important that the telecine order is perfectly preserved?
bartrobinson
11th December 2006, 03:51
Thanks, for some of the info so far. Especially about the part with DoubleWeave dropping the first field in some cases. Didn't know that. If I know which first field is dropped by DoubleWeave could always slice it off and keep it to be added back on later?
Is there another way to do inverse telecine besides DoubleWeave that won't trash the first field for some patterns?
Yes, I understand there are five possible patterns. I just don't know how they specifically affect Telecine/Inverse Telecine. Is it true that if you inverse telecine using one pattern like AA or BB, that you would get the same the exact same 30i back when you retelecine the sequence using the same pattern?
Here's my main problem. In the first code example above, my IVTC works perfectly with pulldown(1,4) and (0,3). I got that. BUT.... In the second and third examples, I don't know how to change the code or numbers to basically do the exact opposite (telecine) of the pulldown(1,4) or pulldown(0,3) to get my 30i back the way it was. If you could explain the parts or provide some clearer examples similar to what I wrote for Telecine code above, that would be great! Thank you so much for responding.
It's very important for me to have the telecine order perfectly preserved because of a few factors. First, this is work for me, it needs to be done right. Second, it's not my footage, I've been asked only to add elements to the footage, but I can't change the original footage. Three, when I'm done with the footage, it needs to cut back into the entire composition as exactly as it was originally edited.
Thanks so much,
actionman133
12th December 2006, 04:59
I think I know where you're getting confused... I will show you how it works with these 5 telecine examples. For 24p frames ABCD, here are the five possible telecine options (shown in fields):
1
ABBCD
ABCDD
2
AABCD
ABCCD
3
ABCDA
BCCDA
4
ABCDD
BBCDA
5
ABCCD
ABCDA
Note that 3 & 4 have the stray field at the beginning of the sequence. To get the 24p sequence back we apply the DoubleWeave () and these would be the results
1
ABBBB CCDDA
AABBC CDDDD
2
AAABB CCDD
AABBC CCCDD
3
ABBCC DDAA
BBCCC CDDAA
4
ABBCC DDDD
BBBBC CDDAA
5
ABBCC CCDD
AABBC CDDAA
Now there are several pulldowns that we can apply to each offset:
1: pulldown can be either 0,2 or 0,3
2: pulldown can be either 0,3 or 1,3
3: pulldown can be either 1,3 or 1,4
4: pulldown can be either 1,4 or 2,4
5: pulldown is 0,2
You see how any given pulldown option can work with several different offsets? So you can't work out how to restore the telecine based on the pulldown settings.
I think your best bet would be to build two script functions where you can specify the offset to remove and re-apply the telecine (including the stray fields at the beginning and end when necessary). If you want, I can try and tackle it tomorrow (too busy today) if you're unsure about how to do it.
Guest
12th December 2006, 05:49
Hey, Bart, your last post seems a bit redundant. Are you paying attention? :)
bartrobinson
12th December 2006, 18:00
You see how any given pulldown option can work with several different offsets? So you can't work out how to restore the telecine based on the pulldown settings.
I think your best bet would be to build two script functions where you can specify the offset to remove and re-apply the telecine (including the stray fields at the beginning and end when necessary). If you want, I can try and tackle it tomorrow (too busy today) if you're unsure about how to do it.
Thanks for laying out the telecine process like that. It makes everything a little clearer. It appears that Case #3 is the one that applies to the footage I currently have. You are right, I'm mostly having trouble figuring out how to reapply the telecine to so that the output will be exactly the same as the input. I'm guessing that I need to get back to the basic order of:
ABCDA
BCCDA
Is that right? And if it were one of the "normal" patterns that didn't have a stray field I would use something like:
#Telecine
AssumeFrameBased()
AssumeBFF() #Set field order(TFF / BFF)
# starting with ABCD
SeparateFields() # gives AABBCCDD
SelectEvery(8,0,3,2,5,4,5,6,7,x,x+1) # or would it be SelectEvery(8,3,0,5,2,5,4,7,6,x+1,x) because of it being BFF?
Weave() #Gives:
# ABCDA
# BCCDA
But in that case, I'm guessing that the x's are A's from the next set of 8 fields, but I don't know how to get ahold of them in the sequence. Sooooo... if you don't mind explaining if I did that right and how I would get a hold of the stray field, that would be great! Thank a lot for your help so far!
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.