View Full Version : Hybrid 30p/30i to 60fps?
kuchikirukia
19th October 2016, 12:52
I have a concert Bluray where some of the cameras were filming 30p, some 30i, and they left it that way. I'd like to keep the 60fps segments but not trash the 30p with unnecessary deinterlacing. Is there a way to detect the combed segments and bob them, then just double the 30p to match and make a a CFR 60fps video?
Sharc
19th October 2016, 13:39
From the Decomb plugin:
IsCombed(parameter_list)
This utility filter is designed for use within ConditionalFilter(). It returns a boolean to indicate whether a frame is combed (interlaced).
threshold (0-255, default 20) sets the amount of combing required to declare a frame combed. It is analogous to the threshold parameter of FieldDeinterlace(). You may have to tweak this for best performance with your specific material.
I didn't try it, but I think it should provide the decision for subsequent processing of a frame like bobbing or frame doubling.
kuchikirukia
19th October 2016, 14:51
Will it work on conditions which output two frames, or am I going to have to first double the frames and process both to be able to overwrite them individually with the deinterlaced even/odd fields?
And how do I double a frame?
AzraelNewtype
19th October 2016, 21:15
selectevery(1,0,0).
When I've done this, I've searched for ranges of interlaced bits in the fake bobbed version, replaced those spans with a real bobbed version via ClipClop, and then run dedup over the thing to delete the now irrelevant duplicates. Just keep the threshold as low as the plugin will accept. If you really want CFR you can just skip that.
kuchikirukia
19th October 2016, 21:40
selectevery(1,0,0).
When I've done this, I've searched for ranges of interlaced bits in the fake bobbed version, replaced those spans with a real bobbed version via ClipClop.
How?
Seems like there should be a way to double it, run a conditional filter on every other frame to replace with qtgmc().selecteven() if combed, and again on the the other set with qtgmc().selectodd().
But it throws an error when I try that relating to the selecteven() after qtgmc. I think I need another way to select the field.
StainlessS
20th October 2016, 02:44
Just knocked this up from script (much bigger) that I used some time ago, not much testing.
### DGIndex Template, HyBrid.avs
VideoFileName ="__vid__"
AudioFileName ="__aud__"
AudioDelay =Value("__del__")
###
MPEG2Source(VideoFileName,UpConv=1) # UpConv=1, YUY2, let DGIndex decide what parts encoded Intelaced/Progressive
Audio = NICAC3Source(AudioFileName,channels=2,DRC=0)
AudioDub(Audio).DelayAudio(AudioDelay)
ResampleAudio(44100)
Trim(0,0) # Trim/Pad audio to length
#
AssumeTFF # Whatever (check)
#
DBLRATE = True
EVEN = True
SHOW = True
COMBEDTHRESH = 20
RECYCLE_COMB = True # EDIT: re-use existing combed file
RootName = RT_GetFullPathName(RT_FilenameSplit(VideoFileName,4)) # Just name node, no Dir\Path\Ext [EDIT: but in current dir]
Fn = RT_String("%s_%s_%d_Clop.txt",RootName,(DBLRATE)?"DOUBLE":"SINGLE",COMBEDTHRESH)
myName = "HyBrid: "
###
ORateC = (DBLRATE) ? SelectEvery(1,0,0) : Last
#
Ex=Exist(Fn)
(!RECYCLE_COMB) ? Assert(!Ex,"Combing file already exists "+Fn) : NOP # Force user to delete if necessary
Scan = (!Ex||!RECYCLE_COMB)
(Scan) ? RT_DebugF("Scanning for %s Rate Combing @ CombThresh=%d",DBLRATE?"Double":"Single",COMBEDTHRESH,name=myName) : NOP
(Scan) ? ORateC.qCombed(FileName=FN,COMBEDTHRESH,Range=True) : NOP # Get combed frame numbers at OUTPUT Single/Double rate
#
### Whatever Deinterlacing
RT_DebugF("Nnedi3",name=myName)
NED = NNedi3(Field=-2, nns=2) # Field -2 = double rate, internal parity value to start (set by AssumeT/BFF)
YAD = YadifMod(Order=-1,Mode=1,edeint=NED) # Order -1 = Internal Parity. Mode 1=double rate do spactial check (3=no spatial check).
MC = YAD.MCDegrainSharp(2) # MC on double rate (temporal radius two frames)
MC = (DBLRATE) ? MC :((EVEN) ? MC.SelectEven : MC.SelectOdd) # Deinterlaced at output rate
###
UNLACED = (SHOW) ? MC.Subtitle("COMBED",align=5,size=48) : MC
#
ClipClop(oRateC,UNLACED,Cmd=Fn).ConvertToYV12 # Fast access to non decombed frames (non combed frames untouched)
### Additional Processing
### End
Return Last
Good luck
EDIT: qCombed:- http://forum.doom9.org/showthread.php?p=1776495#post1776495
EDIT: Say if it worked well for you or give any mods that you found necessary, and maybe I'll add script to qCombed thread (or you add if you like).
StainlessS
20th October 2016, 05:11
Mod of above, left original in-place in case you prefer.
Allows view simple BOB mode (Default) to check field order/quality etc quickly (plays well even on low grade machine).
### DGIndex Template, HyBrid.avs
VideoFileName ="__vid__"
AudioFileName ="__aud__"
AudioDelay =Value("__del__")
###
MPEG2Source(VideoFileName,UpConv=1) # UpConv=1, YUY2, let DGIndex decide what parts encoded Intelaced/Progressive
Audio = NICAC3Source(AudioFileName,channels=2,DRC=0)
AudioDub(Audio).DelayAudio(AudioDelay)
ResampleAudio(44100)
Trim(0,0) # Trim/Pad audio to length
#
AssumeTFF # Whatever (check)
#
DBLRATE = True
EVEN = True
SHOW = True
COMBEDTHRESH = 20
RECYCLE_COMB = True # re-use existing combed file
SIMPLE = True # True = Simple Bob(), False=YadIfMod (Or set your own deinterlacer)
MCD = 0 # 0 (off)->2, Uses MCDegrain(MCD)
SHARP = False # Use MCDegrainSharp instead of MCDegrain
STACK = True # Return StackVertical(Orig,Last)
###################
RootName = RT_FilenameSplit(VideoFileName,4) # Just name node, no Dir\Path\Ext
RootName = RT_GetFullPathName(RootName) # But in current directory (not in source directory, if different)
Fn = RT_String("%s_%s_%d_Clop.txt",RootName,(DBLRATE)?"DOUBLE":"SINGLE",COMBEDTHRESH)
myName = "HyBrid: "
###
ORateC = (DBLRATE) ? SelectEvery(1,0,0) : Last
#
Ex=Exist(Fn)
(!RECYCLE_COMB) ? Assert(!Ex,"Combing file already exists "+Fn) : NOP # Force user to delete if necessary
Scan = (!Ex||!RECYCLE_COMB)
(Scan) ? RT_DebugF("Scanning for %s Rate Combing @ CombThresh=%d",DBLRATE?"Double":"Single",COMBEDTHRESH,name=myName) : NOP
(Scan) ? ORateC.qCombed(FileName=FN,COMBEDTHRESH,Range=True) : NOP # Get combed frame numbers at OUTPUT Single/Double rate
#
RT_DebugF("De-Bob/interlace",name=myName)
### Whatever Bobbing/Deinterlacing @ Double rate output
NED = NNedi3(Field=-2, nns=2) # Field -2 = double rate, internal parity value to start (set by AssumeT/BFF)
DEINT = YadifMod(Order=-1,Mode=1,edeint=NED) # Order -1 = Internal Parity. Mode 1=double rate do spactial check (3=no spatial check).
###
DEINT = (SIMPLE) ? Bob : DEINT # If SIMPLE then use simple Bob() (quick view, eg check field order)
###
DEINT = (MCD>0)?(((SHARP)?DEINT.MCDegrainSharp(MCD):DEINT.MCDegrain(MCD))):DEINT # MCDegrain on double rate (temporal radius MCD)
DEINT = (DBLRATE)?DEINT:((EVEN)?DEINT.SelectEven:DEINT.SelectOdd) # Deinterlaced at output rate
###
UNCOMBED = (SHOW) ? DEINT.Subtitle("DE-COMBED",align=5,size=48) : DEINT
#
ClipClop(oRateC,UNCOMBED,Cmd=Fn).ConvertToYV12 # Fast access to non decombed frames (non decombed untouched)
### Additional Processing
### End
Return (STACK) ? (StackVertical(OrateC.ConvertToYV12.SubTitle("ORIG"),Last)) : Last
EDIT: ADDED STACK mode (default).
EDIT: The series of episodes I more or less created above for looked better as single rate, the odd interlaced fields were quite nasty
and blurred, especially at scene changes, hopefully the simple BOB mode (default) will allow you to detect similarly lousy
clips too, and make decision as to whether single rate would actually be preferred over double.
If you keep RECYCLE_COMB=True, you can try scan at different COMBEDTHRESH, to view results, and when you decide that you
like one of them best, you can just change back to that COMBEDTHRESH and avoid another scan, will use original combed file
as combed file names are as so:- "bab59_DOUBLE_20_Clop.txt" for double rate CombedThresh=20.
Keeping RECYCLE_COMB=True, and changing from eg SHOW=true to SHOW=false will likewise avoid another qCombed scan.
amayra
20th October 2016, 14:36
do you mean something like InterFrame 2.8.2 (http://forum.doom9.org/showthread.php?t=160226) ?
StainlessS
20th October 2016, 14:47
amayra,
I dont know who you are addressing, but read the opening post.
This thread is about hybrid interlaced and progressive video in the same clip, not about interpolating frames to give the impression of a higher frame rate.
thecoreyburton
21st October 2016, 19:12
I encounter this a lot, I find the simplest way is to use the following bit of script:
DeInt=QTGMC(preset="Very Slow")
A=ConditionalFilter(last,DeInt.SelectEven,last,"IsCombedTIVTC","=","true")
B=ConditionalFilter(last,DeInt.SelectOdd,last,"IsCombedTIVTC","=","true")
Interleave(A,B)
It will double the frame rate of the video from 30fps to 60fps, duplicating progressive frames and deinterlacing interlaced frames using QTGMC. Change the preset in QTGMC to suit your needs - I use "Very Slow" for DVD footage and "Faster" for blu ray, but it's a subjective matter of time vs. quality.
If you want to go even further and make a VFR clip (where the 30fps portions play at 30fps, and the interlaced portions play at 60fps), you can do two passes with ExactDedup, which will remove the duplicates and generate timecodes for muxing later.
kuchikirukia
22nd October 2016, 13:54
I encounter this a lot, I find the simplest way is to use the following bit of script:
DeInt=QTGMC(preset="Very Slow")
A=ConditionalFilter(last,DeInt.SelectEven,last,"IsCombedTIVTC","=","true")
B=ConditionalFilter(last,DeInt.SelectOdd,last,"IsCombedTIVTC","=","true")
Interleave(A,B)
It will double the frame rate of the video from 30fps to 60fps, duplicating progressive frames and deinterlacing interlaced frames using QTGMC.
That's exactly what I was looking for. Thanks.
StainlessS
6th November 2016, 05:15
Here mod of snippit posted by TheCoreyBurton, [cant find his post, TheCoreyBurton account deleted]
Function DoubleRate(clip c,Bool "Blend") {
c
Blend=Default(Blend,False) # Avoid blends at scene change (copy previous frame)
prefilt = DeGrainMedian() # some smoothing
superfilt = MSuper(prefilt, hpad=16, vpad=16, rfilter = 4) # all levels for MAnalyse
super = MSuper(pel=2, hpad=16, vpad=16,rfilter=4,levels=1) # one level is enough for MRecalculate
bw_1 = MAnalyse(superfilt, chroma = false, isb = true, blksize = 16, OverLap=2, searchparam = 3, plevel = 0, search = 3, badrange = (-24))
fw_1 = MAnalyse(superfilt, chroma = false, isb = false, blksize = 16, OverLap=2, searchparam = 3, plevel = 0, search = 3, badrange = (-24))
bw_2 = MRecalculate(super, chroma = false, bw_1, blksize = 8, searchparam = 1, search = 3) # No Overlap (currently broken for final vectors)
fw_2 = MRecalculate(super, chroma = false, fw_1, blksize = 8, searchparam = 1, search = 3) # No Overlap
MBlockFps(super, bw_2, fw_2, num=FramerateNumerator(c) * 2, den=FramerateDenominator(c), mode=0, Blend=Blend)
Return Last
}
Function HybridDoubleRate_QTGMC(clip c,String "Preset",Bool "Blend",Bool "Show") {
c
Preset=Default(Preset,"Very Slow")
Blend=Default(Blend,False) # for DoubleRate. False dont blend scene change, copy previous frame, true blend.
Show=Default(Show,False)
DeInt=QTGMC(preset=Preset) Deint=(Show) ? Deint.AddBorders(0,0,0,20,$FF0000).Subtitle("QTGMC "+Preset+" Deinterlaced",Align=1) : Deint
Dbl=DoubleRate(c,Blend) Dbl =(Show) ? Dbl.AddBorders(0,0,0,20,$000000).Subtitle("DoubleRate",Align=1) : Dbl
A=ConditionalFilter(last,DeInt.SelectEven,Dbl.SelectEven,"IsCombedTIVTC","=","true")
B=ConditionalFilter(last,DeInt.SelectOdd, Dbl.SelectOdd, "IsCombedTIVTC","=","true")
Interleave(A,B)
Return Last
}
Function HybridDoubleRate_NedYad(clip c,Bool "Blend",Bool "Show") {
c
Blend=Default(Blend,False) # for DoubleRate. False dont blend scene change, copy previous frame, true blend.
Show=Default(Show,False)
NED = NNedi3(Field=-2, nns=2) # Field -2 = double rate, internal parity value to start (set by AssumeT/BFF)
DeInt= YadifMod(Order=-1,Mode=1,edeint=NED) # Order -1 = Internal Parity. Mode 1=double rate do spactial
Deint=(Show) ? Deint.AddBorders(0,0,0,20,$FF0000).Subtitle("Ned/Yad Deinterlaced",Align=1) : Deint
Dbl=DoubleRate(c,Blend) Dbl =(Show) ? Dbl.AddBorders(0,0,0,20,$000000).Subtitle("DoubleRate",Align=1) : Dbl
A=ConditionalFilter(last,DeInt.SelectEven,Dbl.SelectEven,"IsCombedTIVTC","=","true")
B=ConditionalFilter(last,DeInt.SelectOdd, Dbl.SelectOdd, "IsCombedTIVTC","=","true")
Interleave(A,B)
Return Last
}
VideoFileName ="D:\BAB-59\VIDEO_TS\bab59.d2v"
MPEG2Source(VideoFileName)
AssumeTFF
#HybridDoubleRate_QTGMC(Preset="Slow",Show=True)
HybridDoubleRate_NedYad(Show=True) # Deinterlaced scene changes NOT blended (I hate that, no idea how to stop QTGMC doing it)
Deinterlace interlaced sections, and MC doubled framerate for progressive sections.
Current version of MVTools has a problem when OverLap used to produce final vectors used by MBlockFps, reported here:- http://forum.doom9.org/showthread.php?p=1785086#post1785086
But above snippit currently immune from the problem.
EDIT: Perhaps change YdifMod to YadifMod2
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.