View Full Version : Converting 24p to 60i
Blue_MiSfit
16th March 2007, 02:48
Hey everyone,
So a friend of mine was doing a multicam shoot with 3 Canon XL2 cameras, at standard NTSC 60i settings. Halfway through, he realized that the one of the cameras was in 24p mode!
So, we need to convert this 24p DV into 60i DV. 3:2 pulldown comes to mind, though it might be ugly intercutting with true 60i.
What do you guys think would be a good method?
I've got this so far, which seems to be clean 3:2. But how will it look with true 60i? :)
AssumeFrameBased
SeparateFields
SelectEvery(8, 0,1, 2,3,2, 5,4, 7,6,7)
Weave
Thanks
~MiSfit
Mug Funky
16th March 2007, 04:10
an easier way to do clean 3:2 is:
changefps(60000,1001)
assumetff()
separatefields().selectevery(4,0,3).weave()
it's about the same length, but it has the advantage of being able to take any frame rate as input.
when intercut with 60i, it'll just look jerkier. that's not too bad a thing IMHO, but you may not like the look (remember to sit a little further back from the TV when deciding, as interlace can be visible from close up).
if you want it bumped up to 60i, you'll have to use one of the motion compensated framerate conversion scripts. i'm not sure which is current, but check the "alchemist" thread for some options.
just bear in mind when motion gets too high or complex, it'll go jerky no matter what (when it passes 24p through), but it should give a very nice effect, and any obvious problems you can probably cut around.
actionman133
16th March 2007, 06:04
Blue_Misfit, you method is just regular 3:2 pulldown which doesn't change the motion qualities... the most seamless conversion would be to use high quality settings on mvtools, but they are very slow.
If I may suggest an alternative... convert your 60i to 24p. 24p is generally regarded as more filmic, and therefore imitates a higher production value. Also in my experience, converting 60i to 24p is generally higher technical quality (fewer visual errors/mistakes) than 24p to 60i. I think this is for 2 reasoons:
1) there is more data to play with in 60i-24p. Half of the frames in the resulting clip are directly copied from the source and the other half have good reference frames for interpolation (because they are quite close together, due to the higher framerate).
2) 24p - especially with film - has a time delay between frames, typically 1/48th second. That means there is lost information and creates a greater disparity between adjacent frames. This makes it harder for mvtools to correctly determine motion for the framerate conversion. It can be done, but requires a lot of extra processing.
This is how I use mvtools for framerate conversions for 60i-24p. It is quite slow but very high quality... even on jerky handheld footage (test footage was the shaky 'Tom Cruise as a FedEx man' footage on the Collateral DVD) it manages very well.
LoadPlugin ("mvtools.dll")
Bob () # Use a better deinterlacer here...
num = 24000
den = 1001
blksize = 8
pel = 2
search = 3
searchparam = 8
overlap = 4
sharp = 1
cropped = Crop (4, 4, -4, -4)
backward1 = last.MVAnalyse (blksize, pel, 0, search, searchparam, true\
, overlap = overlap, sharp = sharp, idx = 1)
forward1 = last.MVAnalyse (blksize, pel, 0, search, searchparam, false\
, overlap = overlap, sharp = sharp, idx = 1)
backward2 = cropped.MVAnalyse (blksize, pel, 0, search, searchparam, true\
, overlap = overlap, sharp = sharp, idx = 2)
forward2 = cropped.MVAnalyse (blksize, pel, 0, search, searchparam, false\
, overlap = overlap, sharp = sharp, idx = 2)
last.MVFlowFPS2 (backward1, forward1, backward2, forward2, num, den, idx = 1, idx2 = 2)
If you still want to convert 24p to 60p, then use num = 60000 instead.
Blue_MiSfit
16th March 2007, 06:05
Thanks Mug Funky!
I was definitely thinking of using a motion compensated script, but what would the general idea be?
From your example it looks like frame rate convert to 60p (59.94), then interlace. I assume I could insert some motion compensated converter in place of changefps to improve quality?
@Actionman:
Thanks for the suggestions! I have to do everything in 60i, it's an exercise show, and the target is NTSC TVs, so we want to preserve as much motion fluidity as possible. Your MVTools script looks along the lines of what I will end up using (if my friend is very concerned about quality, which he may or may not be ;))
Thanks Again!
~MiSfit
Mug Funky
17th March 2007, 01:53
convert your 60i to 24p. 24p is generally regarded as more filmic, and therefore imitates a higher production value.
imho, there's more to a film look than being at the same framerate :). dynamic range is bucketloads higher, and unfortunately video can't imitate that (yet - look up the Arri D20 or the RED cameras).
@ Blue_MiSfit:
yep, put anything you want in place of changefps, just so long as it returns 59.94 fps :)
Blue_MiSfit
17th March 2007, 02:14
Dude, I'm having really unclean thoughts about the RED, and also it's wavelet codec. Who knows, it might suck but oh MAN that camera looks boss.
Thanks again to you both. Here's the script I decided on:
Source is QuickTime MOV containing NTSC DV (pulldown from 24p, as that's how the camera records it).
LoadPlugin ("x:\plugins\mvtools.dll")
LoadPlugin ("x:\plugins\tivtc.dll")
# Remove pulldown
TFM()
TDecimate
#Variables for target frame rate (60000/1001 = 59.94)
num = 60000
den = 1001
#Motion Vector Analysis
blksize = 8
pel = 2
search = 3
searchparam = 8
overlap = 4
sharp = 1
cropped = Crop (4, 4, -4, -4)
backward1 = last.MVAnalyse (blksize, pel, 0, search, searchparam, true\
, overlap = overlap, sharp = sharp, idx = 1)
forward1 = last.MVAnalyse (blksize, pel, 0, search, searchparam, false\
, overlap = overlap, sharp = sharp, idx = 1)
backward2 = cropped.MVAnalyse (blksize, pel, 0, search, searchparam, true\
, overlap = overlap, sharp = sharp, idx = 2)
forward2 = cropped.MVAnalyse (blksize, pel, 0, search, searchparam, false\
, overlap = overlap, sharp = sharp, idx = 2)
# Frame-rate conversion (video is 59.94p now)
last.MVFlowFPS2 (backward1, forward1, backward2, forward2, num, den, idx = 1, idx2 = 2)
#Reinterlace
assumetff()
separatefields().selectevery(4,0,3).weave()
I just kind of threw it together, sort of a combination of the suggestions from you both. I think it will work nicely!
One last note, SelectEvery(4,0,3) and the rest of that line will produce BFF interlacing, right?
~MiSfit
davidhorman
17th March 2007, 11:52
One last note, SelectEvery(4,0,3) and the rest of that line will produce BFF interlacing, right?
Nope - you assumed tff before you separatedfields, so the "0" of SelectEvery (the first in every group of four) will be a top field. Either assumebff or selectevery(4,1,2).
The easiest way to check your final parity is to do a temporary assumebff and a bob.
David
vBulletin® v3.8.5, Copyright ©2000-2012, Jelsoft Enterprises Ltd.