Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion.

Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules.

 

Go Back   Doom9's Forum > Capturing and Editing Video > Avisynth Usage

Reply
 
Thread Tools Search this Thread Display Modes
Old 4th December 2018, 15:07   #1  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
Issue with "morph" + questions about frame interpolation and other subjects

Hi,

I'm trying to improve a movie I made about my deceased grandmother; I want this to be finished by the end of December. I shot the AVCHD 1280x720 source footage with two Panasonic compact cameras : a ZS3 shooting in 25 FPS in dec. 2013, with a strong backlight issue (mostly shot in front of a large window) ; a ZS7 shooting in 29.97 FPS in dec. 2015, that camera had a malfunctioning optical stabilization system, causing spontaneous intermittent vertical jerkiness (with the picture shaking up and down by about 5 pixels, 5 times per second, at random intervals...).

I tried to improve the picture as much as possible, using :
– the stabilization feature from Magix Video Deluxe (NLE software used to edit this movie), followed by a combination of FrameSurgeon and Morph (Avisynth functions) to interpolate the remaining blurry frames caused by the jerkiness on the 2015 videos (see this thread – Sawbones was a huge help, considering that I had to manually check about 35min. of footage, amounting to about 50.000 frames) ;
– a combination of AutoAdjust and HDRAGC to get something watchable out of the dark shadows on the 2013 videos (see this thread).

The first thing I want to do is interpolate the bad frames on the source footage rather than the edited / rendered movie, since some of those bad / blurry frames are located at crossfade points and I couldn't correct them satisfyingly when I finalized the first version.
But when examining the scripts I made a few months ago, I found out that the Morph() function no longer works as expected : now if I use the command "Morph(137,139)" for instance, I get a blend of frame 137 and the last frame of the input movie, instead of a blend of 137 and 139. What could be the explanation ? I tried copying the Morph function inside a script, changing its name to Morph2 and calling Morph2(x,y), same result.
I haven't voluntarily changed anything in my Avisynth configuration since then, but I noticed that the modified date of most subdirectories in my Avisynth+ directory, 2018/10/26 22:52, is very close to the date of StaxRip subdirectories, so apparently something was changed in Avisynth when I first ran StaxRip. I couldn't say which changes were made though, but I could check the differences with a backup made before that date, if needed.

Another issue is that, previously, I ran the frame interpolation script on the already stabilized footage, at the final encoding stage. It would have been even more difficult and painstaking to spot damaged frames among the original jerky mess, and probably much less efficient too (potentially interpolating from misaligned frames). So now I have to stabilize the footage before interpolating. Are there Avisynth function(s)/plugin(s) that would be at least as good as the NLE feature, and produce a reliable result ? I have briefly tried Deshaker in VirtualDub, it seemed quite efficient, but quite complicated, I had already many complications to deal with and, since the Magix stabilizer was performing mostly fine (better in my experience than the third-party proDAD Mercalli plugin that it now also includes, and which is supposed to be a professional level tool), I figured that I wouldn't need anything else... The alternative would be to treat the whole source files with MVD's stabilizer, export them as lossless intermediates, then process them with Avisynth to interpolate the bad frames, then re-import them into MVD, but I'd prefer not to...

Then, would it be possible, and wise, to load the scripts (probably 5-6) to the NLE using AVFS (Avisynth Virtual File System), with my machine based on an Intel i7 6700K CPU with 16GB of RAM, or would it be better to first export the processed footage as intermediate lossless files ? The first option would be more convenient of course, but may be slower, and potentially less reliable (if there's an out-of-memory issue for instance the results can start to get wonky, and some Avisynth functions apparently don't produce the same output when processing footage in a linear way or when previewing a particular frame at a random spot). With the second option, I know what the processed footage will look like, there are less moving parts, but if I need to make a slight adjustement I have to start all over again and re-export the whole bunch of big files, instead of just reloading the virtual AVI files.

Apparently this depends partly on the source loading plugin used : for instance I've had very unreliable results in the past when using DirectShowSource. In this case the source files are .m2ts : which plugin is generally recommanded with that format, and why ? ffms2 / FFVideoSource, or LSMASH / LWLibavVideoSource ? or something else ?

On frame interpolation, again : with FrameSurgeon, I get ugly artifacts in case of fast motion (that's why I used Morph for some frames, as it usually performs better in those cases, even though it's much less convenient and gets unstable if called more than a few dozen times in the same script, whereas FrameSurgeon doesn't choke with more than 4800 frames to process). I have read (see here – it's in french but the screenshots alone illustrate the issue very well – and here) that this kind of artifacts were produced by MVTools2 when processing "HD" footage, and not at lower resolutions. Is it a known issue, and is it still the case ? (Those two threads are 5-6 years old...)

Then, with regards to the backlit footage, is there anything better than HDRAGC that I could try this time ? Apparently this plugin is quite old; yet this kind of function should be high in demand as this is a very common issue, but I found nothing equivalent for Avisynth. I have also tried the Gamma HDR function in Magix Video Deluxe, I have tried various processing methods in DaVinci Resolve (possibly not to the best of their abilities as I was just discovering this seemingly highly capable software), both of which produced worse results than HDRAGC.

And what is the wisest way of combining 29.97 FPS footage with 25 FPS footage in the same movie ? (In two distinct parts, not mixed together.) At first I tried exporting in 25 FPS, but it caused the Magix stabilizer to malfunction ; then (using the 2010 version of that software) I exported in 29.97 FPS and I had a desynchronization issue, solved by updating to the 2016 version. On VideoHelp I've been told that exporting in 59.94 FPS would result in a smoother playback, but Magix Video Deluxe doesn't allow that framerate, 29.97 or 30 are the maximum values available. Would it be worth anything to convert the framerate to 59.94 with an Avisynth function at the final x264 encoding stage ?

Thanks !

Last edited by abolibibelot; 5th December 2018 at 16:20.
abolibibelot is offline   Reply With Quote
Old 6th December 2018, 14:48   #2  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 6,820
Quote:
And what is the wisest way of combining 29.97 FPS footage with 25 FPS footage in the same movie ? (In two distinct parts, not mixed together.)
If you just asking about converting the 25.0 fps to 29.97, might try the stuff in below link, I'de love to hear if it works ok for you.

Quote:
Originally Posted by StainlessS View Post
It may be possible to up framerate to a non multiple of source whilst keeping all source frames verbatim, where eg source
is 24 FPS and required = 25 FPS, and using,
Src24.ChangeFPS(25) to produce a new clip at 25 FPS with an exact duplicate every 24 source frames and save new source as eg Src25.avi.
Process new source with eg src25.Duplicity2(ThG=0.1,DBase="D:\Src25_Det.DB"), to produce a DBase (perhaps with MaxDupLen=1, perhaps not).
Then use Src25.DropDeadGorgeous("D:\Src25_Det.DB",ScanAhead=12) to interpolate dupe frames achieving 25.0 and with all original
source frames. With a ScanAhead of eg 12, will locate dupes and then backwards scan up to 12 frames before the dupes looking for
frame of greatest movement, insert an interpolated frame prior to that greatest movement frame and shove all following frames along one
to remove the dupe. Might be worth someone experimenting.
Or, you could just use eg Duplicity2(Mode=2,ThG=0.1) to interpolate the exact dupes directly and without DropDeadGorgeous but that might
produce a more rhythmic stutter every 25 frames.
Quote:
Originally Posted by StainlessS View Post
I tried above converting [EDIT: true] 25.0 FPS to 30.0FPS, using ChangeFPS(30.0), and Duplicity2(ThG=0.1,MaxDuplen=1),
Then, used DropDeadGorgeous(ScanAhead=5), result produced is 30FPS with all original source frames, and with good fluid motion throughout.
ChangeFPS(30.0) inserts duplicate after every five source frames, and DropDeadGorgeous(ScanAhead=5) introduces
an interpolated frame within 5 frames prior to the duplicate (between frames of greatest motion) and pushes the following frames one position
along to squeeze out the duplicate.
Works pretty good.
EDIT: If source clip was badly decimated from eg 30FPS to 25 and with jerky motion due to decimation, above should produce pretty much the best possible result and repair/tween the jerk frames produced by the decimation.
EDIT: Should also perform well in cases where cadence changes, eg where source was decimated from 29.97 FPS to 25 FPS,
or where source was edited after decimation, neither one should be any problem.
EDIT: Where above ThG=0.1, use ThG=0.0.
For ChangeFPS(30.0) use ChangeFPS(30000,1001), ie 29.97
EDIT: Should be no change in duration or [EDIT: perceptible] audio sync.

https://forum.doom9.org/showthread.p...65#post1857865
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 6th December 2018 at 18:39.
StainlessS is offline   Reply With Quote
Old 6th December 2018, 23:21   #3  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
So I solved the Morph issue by re-installing Avisynth+ r1576 (replacing AviSynthPlus-MT-r2728.exe included in StaxRip). Does it help to pinpoint what was causing it ?

Doing further testing, I find it surprising and puzzling that applying Morph after FrameSurgeon on the same frame (which is problematic for FrameSurgeon because of fast motion and produces those weird fuzzy edges) gives a slightly better result than applying Morph alone (and much better than FrameSurgeon alone for that particular frame). Normally, interpolating, say, frame 138 from the adjacent frames with Morph(137,139) should totally cancel the interpolation of the same (single) frame with FrameSurgeon(I1 138), right ? Or does Morph somehow include the actual frame that is being replaced in its calculations to create the interpolated frame ? Strangely, this happens only if “show=true” is used in the FrameSurgeon command, without it there is no difference (therefore it's moot since that switch is only useful for previewing and has to be set to “false” or removed for the actual rendering).
With Morpheus I don't see the same effect as described above, i.e., applying Morpheus after FrameSurgeon(show=true) produces the same result as Morpheus alone.
You can download PNG screenshots showing those findings on this thread where I asked roughly the same questions (over here, even if they get approved, the pictures will apparently be converted to heavily compressed JPG, as the limit for PNG is 200KB – which is really tiny nowadays...).

Quote:
If you just asking about converting the 25.0 fps to 29.97, might try the stuff in below link, I'de love to hear if it works ok for you.
Thus far, I just imported the source files as-is into the NLE, and exported as 29.97 FPS, which automatically converts the 25 FPS part, most likely by duplicating one frame every 5 (minus one every 1000, I suppose, to account for the 0.03 discrepancy ?). There's not much motion in the 25 FPS part, so it works like that (there are far more severe issues with levels / crushed shadows and blown highlights) ; but since I have to pre-process that footage anyway, if that aspect could be improved with a relatively simple Avisynth command (nothing is quite “simple” when it comes to Avisynth ! ), that would be welcome. Do you think that the above method (which I haven't tested yet) would significantly slow down the processing ?

Last edited by abolibibelot; 9th December 2018 at 00:36.
abolibibelot is offline   Reply With Quote
Old 6th December 2018, 23:47   #4  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 6,820
Using anything else before hand should make no difference unless Morph is doing something wrong.
(Or FrameSurgen is affecting frames it should not, I dont think so).
Substituting a random frame for the frame to be interpolated (or maybe from a few frames away) should similarly make no difference to output.

Quote:
significantly slow down the processing ?
Would require frame accurate lossless file, scan complete clip to create a DBase (Using Duplicity2), and then a further pass
to change the framerate. I think you said 35 mins clip somewhere, so I would not consider that to provide much of a time overhead.
I once spend 3 days rendering a movie, and another time did 2000+ single frame hand edits, using something similar to Morph(start,end).

EDIT:
Quote:
“show=true” is used in the FrameSurgeon command, without it there is no difference
Yeh well that is one difference and could affect vectors (although why it might make it better, ???).
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 7th December 2018 at 00:36.
StainlessS is offline   Reply With Quote
Old 9th December 2018, 00:22   #5  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
Quote:
Yeh well that is one difference and could affect vectors (although why it might make it better, ???).
Well, I couldn't say for sure that it's indeed better (I would need a perfect shot as a comparison !), but, if you saw the screenshots, the front of the bike seems “more straight”, and the letters on the box are better shaped ; but there are extra artifacts on the bike's left handle ; hard to say with just one frame.

Quote:
I think you said 35 mins clip somewhere, so I would not consider that to provide much of a time overhead.
Indeed, but I'd like this to be completed by the 25th, and I'm progressing really slowly ! My main issue right now is to get the stabilization right before applying the interpolation filtering (most of the interpolation hard work is done, but I'll have to start all over again for about 2 min. worth of footage which were slowed down in the final rendered movie, which I used before as a source for Sawbones / FrameSurgeon, therefore the frame numbers are off for that part).
I've tried using Deshaker within an Avisynth script : it works, the problem is that it works only in RGB colorspace, and if I add a ConvertToRGB command before, then the interpolation commands no longer work.
“MSuper: Clip must be YUV or YUY2 or planar RGB/RGBA” (for the Morph function)
“FrameSurgeon: Id Interpolation commands Planar and YUY2 ONLY”
(In the first case I don't understand why it doesn't work, since RGB is apparently allowed. Or is “planar RGB” something else entirely ?)
Another problem is that Deshaker runs the second pass each time the script is reloaded, which takes way too long and is not practical at all.
So, is there a way to avoid a triple colorspace conversion (since I will have to export the pre-processed files as RGB to avoid color discrepancies once the lossless intermediates are imported into the NLE), and to avoid having to first export the stabilized footage before applying the interpolation treatment ?
I've tried DePanStabilize, which is a native Avisynth filter and works in YUV, but I have a hard time finding a comprehensive documentation.
- Can I get it to zoom in to remove the “dancing” black borders ?
- Can it store the stabilizing parameters in a log file, to speed up further processing and playback once the calculations have been done ?
- Another issue is that when a frame n is blurred, the stabilizer sometimes aligns the frame n+1 with the upper or lower edges of the blurred frame, whereas it should align it with the frame n-1 to avoid an unwanted sudden jerkiness. I managed to improve that behaviour with Deshaker by increasing the “Motion smoothness” values, so is there an equivalent parameter with DePanStabilize ? Or would it be better to apply the interpolation filters before stabilizing, so that the stabilizer can deal with “clean” frames ? But in this case, won't that make the interpolations worse, in those cases where the adjacent frames are misaligned ?

Last edited by abolibibelot; 9th December 2018 at 00:43.
abolibibelot is offline   Reply With Quote
Old 9th December 2018, 03:17   #6  |  Link
johnmeyer
Registered User
 
Join Date: Feb 2002
Location: California
Posts: 2,148
If Deshaker works, and if you happen to own Vegas, I wrote a complete automation suite that does batch conversion of video within Vegas. You can choose to use lossless codec for feeding to Deshaker and for saving the result, thus eliminating any "roundtrip" conversion loss when deshaking.
johnmeyer is offline   Reply With Quote
Old 9th December 2018, 04:53   #7  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
Quote:
If Deshaker works, and if you happen to own Vegas, I wrote a complete automation suite that does batch conversion of video within Vegas. You can choose to use lossless codec for feeding to Deshaker and for saving the result, thus eliminating any "roundtrip" conversion loss when deshaking.
Thanks for the suggestion, but in this case I already made all the editing work with another software, namely Magix Video Deluxe. As much as I'd like to try Vegas, which seems to get a lot of praise, it would be a chore to start all over again for this particular movie. But I'd still be interested, if you have a link.
The stabilizer included with Magix VD did a fine job as I said in the first post (and it does save the parameters, so once the actual processing is done the playback is fluid, even on my former machine based on a Dual Core E5200 from 2009 I could play stabilized 1280x720p AVCHD footage in real time). If you felt the need to make Vegas work with Deshaker, does that mean that it doesn't include a good stabilizer of its own ?
abolibibelot is offline   Reply With Quote
Old 9th December 2018, 06:54   #8  |  Link
johnmeyer
Registered User
 
Join Date: Feb 2002
Location: California
Posts: 2,148
Vegas includes a limited version of the Mercalli stabilizer. If you want the best stabilization software, get the full version of Mercalli. It runs rings around everything else, but it is $$$ (€€€).

Here is a link to the post I made in the Vegas forum over a decade ago where I developed my scripts to automate deshaking from within Vegas. It ended up being a bit of a three-corner billiard shot because it involved both a script within Vegas that "talked" to a script inside of VirtualDub, with parameters being passed back and forth.

https://www.vegascreativesoftware.in...render--57366/
johnmeyer is offline   Reply With Quote
Old 14th December 2018, 04:45   #9  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
As I said, the default stabilizer in Magix VD performed better than the included Mercalli module – which is probably a limited version as well.

I managed to get a correct result with DePanStabilize for the most part, but there are a few sections with steady shakiness where it seems to completely ignore it. Some parameters seem to have no effect at all, some of them I don't even understand what they're supposed to do. Another thing I don't understand : if I try to set custom values for dxmax/dymax, it performs very poorly, at least with method=1 (and according to my tests, the other methods are either inefficient or unstable), only when I set them to “-1” (which according to the documentation is the default value and corresponds to a quarter of the width or heigth) does is perform (mostly) satisfyingly, yet the extent of the shakiness is generally very limited on the footage I want to process, when the aforementioned issue kicks in (caused by a defective optical stabilizer), the picture moves steadily by approximately 5 pixels up and down (sometimes laterally but it's vertical for the most part), so analyzing within a range of 10 or even 20 pixels (if that's actually what those parameters mean) should be more than enough.
It's been asked before, here for instance, but I couldn't find satifying replies. So could anyone provide clear(er) explanations regarding those settings, or explain why they seem to do nothing ?
[DePenEstimate]
– range (doesn't change anything)
– trust (doesn't change anything)
– stab (doesn't change anything)
– show (doesn't show anything)
[DePanStabilize]
– cutoff (doesn't change anything as far as I can see)
– damping (doesn't change anything as far as I can see)
– blur (it's supposed to blur the borders but I don't see any effect)
– dxmax / dymax : it's said that these parameters work only with method=0, why is that ? How is the threshold defined with method=1 ?
– method : how does each one function ? What are “inertial”, “two-way average”, “unlimited (static) stabilization”, “tracking of the base (first) frame instead of stabilization” ?
– fitlast

Here is my current command :
Code:
mdata=DePanEstimate(range=20,trust=4.0,stab=1.00,dxmax=-1,dymax=-1,pixaspect=1)
DePanStabilize(data=mdata,cutoff=1.0,damping=1,initzoom=1.025,dxmax=8,dymax=8,method=1,mirror=15,prev=0,next=0,blur=30,info=false)
Is there any way I could improve over this ?


Quote:
Here is a link to the post I made in the Vegas forum over a decade ago where I developed my scripts to automate deshaking from within Vegas. It ended up being a bit of a three-corner billiard shot because it involved both a script within Vegas that "talked" to a script inside of VirtualDub, with parameters being passed back and forth.
And so, was it worth it, compared with the included stabilizer, if it included such a feature at the time ? Perhaps there was none back then ?

Last edited by abolibibelot; 14th December 2018 at 04:48.
abolibibelot is offline   Reply With Quote
Old 14th December 2018, 05:04   #10  |  Link
johnmeyer
Registered User
 
Join Date: Feb 2002
Location: California
Posts: 2,148
Quote:
Originally Posted by abolibibelot View Post
Here is my current command :
Code:
mdata=DePanEstimate(range=20,trust=4.0,stab=1.00,dxmax=-1,dymax=-1,pixaspect=1)
DePanStabilize(data=mdata,cutoff=1.0,damping=1,initzoom=1.025,dxmax=8,dymax=8,method=1,mirror=15,prev=0,next=0,blur=30,info=false)
Is there any way I could improve over this ?
I can't provide detailed answers to your questions about what each parameter does, but I can provide you with the settings I use in my film restoration script. If I use small values (<8) for dxmax and dymax for removing just gate weave (i.e., small quick jumps, somewhat similar to your situation), it works really well.

Code:
mdata=DePanEstimate(stab_reference,trust=1.0,dxmax=maxstabH,dymax=maxstabV)
stab=DePanStabilize(cropped_source,data=mdata,cutoff=0.5,dxmax=maxstabH,dymax=maxstabV,method=1,mirror=15)
Quote:
Originally Posted by abolibibelot View Post
And so, was it worth it, compared with the included stabilizer, if it included such a feature at the time ? Perhaps there was none back then ?
I created those Vegas Deshaker automation scripts prior to Sony adding Mercalli. However, even after they did, many users continued to use them because, with certain videos, Deshaker can still outperform other stabilization methods.
johnmeyer is offline   Reply With Quote
Old 14th December 2018, 18:51   #11  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
Quote:
I can't provide detailed answers to your questions about what each parameter does, but I can provide you with the settings I use in my film restoration script. If I use small values (<8) for dxmax and dymax for removing just gate weave (i.e., small quick jumps, somewhat similar to your situation), it works really well.
Should I try lower values in the first part (DePanEstimate) or the second part (DePanStabilize) or both ?
The other option would be to remove stabilizing from Avisynth altogether and only use it to interpolate the really bad frames, then stabilize in the NLE, but there's the concern that interpolation might be inferior on non stabilized footage, i.e. FrameSurgeon or Morph will have to correlate misaligned adjacent frames, which sometimes generates ugly artifacts when it happens because of actual camera motion...
It's so huge and there are so many moving parts that I can't possibly thoroughly try each possible option to decide what works best. _ (I should have finished that film about two years ago... which would have been one year after the most recent event depicted in it... I'll be in a coffin myself before I complete it to my obsessive-compulsive satisfaction ! _)
abolibibelot is offline   Reply With Quote
Old 16th December 2018, 05:19   #12  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
Quote:
If I use small values (<8) for dxmax and dymax for removing just gate weave (i.e., small quick jumps, somewhat similar to your situation), it works really well.
What “method” do you use ? With “method=1”, whether I set dxmax and dymax to 2 or 60, it changes absolutely nothing. With “method=0” it has an effect, but I have to use much higher values than I would like to obtain a satisfying steadiness.
I figured that I would use a dxmax value of 16 and a dymax value of 9, that way a zoom factor of 1.025 or 2.5% would exactly compensate for the added borders (I suppose that using a factor that results in integer upscaling values, in this case 1280 => 1248 and 720 => 702, should slightly reduce the loss in quality / sharpness, but I may be completely wrong). Normally it should be enough, but I can't get it quite right. Also, “damping” has an effect with “method=0”, but so far I couldn't say what it is, it doesn't seem consistent. And “method=0” gives worse results so far, in many cases it negatively affects the quality of interpolation of bad frames by FrameSurgeon. I can see that DePanEstimate can take a file as input, with the same format as Deshaker, so what happens when an actual Deshaker log file is used as input ?
It feels like trying to find a switch in the dark in a room full of rats and snakes and spiders...
So even here noone has any clue about how exactly this thing is supposed to work ?
abolibibelot is offline   Reply With Quote
Old 19th December 2018, 17:38   #13  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
So I tried my best with DePanStabilize, and exported the stabilized / interpolated footage : when watched in motion, the result of stabilization sucks, plain and simple. I used method=1 since method=0 produced unreliable results (and in many cases caused FrameSurgeon's interpolation of a bad frame to be blurrier than the original frame, even though the adjacent frames were seemingly well aligned, very puzzling), while method=2 was extremely slow and produced a wonky result. Problem is, with method=1 there seems to be no way of controlling the maximum level of vertical / horizontal correction. The only parameter which seems to have a significant effect is “cutoff” : apparently, setting it high (2 or more) restricts the correction to rapid shaking (high frequency), setting it low (0.5 or less) extends the correction to slower motion (low frequency). But the result is not consistent : with a value that seems to be enough to correct the (mostly vertical) shakiness caused by the camera defect (which is steady but not very fast : about 3 up-and-down bumps per second) it attempts to correct regular camera motion and hand-held induced shakiness way too much, adding huge borders which have a sort of “liquid” aspect (with the “mirror” option and “blur=30”). What's strange is that I don't see that effect when previewing in AVSPMod.
I also found out that it produces weird artifacts in some places : in particular, a small brilliant object, part of a bigger object that is not moving at all in the original footage, appears randomly split in half, like... the head of the Terminator T1000 when he gets shot in the face... (sorry, first image that comes to mind !), for a split second but repeatedly. Normally a stabilizer function should only shift position vectors, not change the actual content of the picture.
I tried using MDepan instead of DePanEstimate : much slower and not better, same kind of artifacts, just on different frames.

Running the interpolation filters with no prior stabilization produces an ugly result on some frames.
My only alternative, it seems, would be to use Deshaker, which has an excellent reputation of efficiency and reliability. But Deshaker only accepts RGB as input, while the interpolation filters (FrameSurgeon, Morph) only accept YUV, so I would have to 1) convert to RGB and run Deshaker 2) convert back to YUV and run the interpolation filters 3) convert to RGB again, render, import into the NLE software 4) render, convert to YUV for the final encoding. That means 4 YUV<=>RGB conversions... Surely the quality will suffer.
Is there really no other way of doing that ?
abolibibelot is offline   Reply With Quote
Old 19th December 2018, 17:49   #14  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 6,820
Be aware that MvTools interpolation is quite bad at interpolating where there are even small variation in overall brightness,
dont know how one might prefilter for that, using any kind of temporal brightness stabilising on prefilter clip would screw up interpolaton, I think.
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???
StainlessS is offline   Reply With Quote
Old 20th December 2018, 02:09   #15  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
Quote:
Be aware that MvTools interpolation is quite bad at interpolating where there are even small variation in overall brightness,
dont know how one might prefilter for that, using any kind of temporal brightness stabilising on prefilter clip would screw up interpolaton, I think.
You mean, for FrameSurgeon interpolation ?

I found some interesting insight in this 10 years old thread :
https://forum.doom9.org/showthread.php?t=136025
“The 'trick' with [DePanStabilize] is: use a different (cropped) clip for DepanEstimate. What to crop? It depends on the scene... Focus on something that should not move... A house or something. I use tweak(bright=-100,cont=2.0) on this clip too... Somehow this helps, too.
Also, I nearly always set cutoff to 0.5 and trust between 1 and 1.5.
The same values for dxmax and dymax both in DepanEstimate() and in DepanStablize helps... (30 is a good value)
Sometimes I get better stabilizing with Depan then with Deshaker.. It realy depends on the source.”

If I understand this correctly, the idea is to enhance the contrast on the source clip for DePanEstimate, then run DePanStabilize on the original video.
The script proposed by “g-force” is quite effective at suppressing small vibrations, but alas it's confused by those damn blurry frames : if frame n is blurry, meaning that the edges are doubled, it will align frame n+1 with either the upper edge or the lower edge of n, instead of ignoring it and aligning it with n-1 instead.
This statement reflects my experience thus far :
“I've never been able to dial in the settings for DePanStabilize to be of any use. Doesn't fix quick jitter, and tracks slower pans too well.”
I haven't tried the cropping trick, I'm not sure where I should crop to improve the efficiency, in this particular case, most of the shots are, or should be static, so I don't see how cropping could improve the efficiency, while a few shots have motion everywhere, so cropping around a particular spot on a given frame would be pointless since 5 frames later the picture's content is completely different.
The last suggestion works only with method=0, which in my tests gives very poor results.

And actually, I get those artifacts with the combination of DePanStabilize + FrameSurgeon, not DePanStabilize alone, and not FrameSurgeon alone, it's really weird. Normally, stabilization should improve interpolation, right ?
Here are details cut at exactly the same spot of three untouched consecutive frames :
/ /
Then the same details cut from the same frames stabilized with DePanStabilize (this is one example where it fails to align the neat frames adjacent to a blurry frame) :
/ /
Then here is a detail from the middle frame interpolated by FrameSurgeon after DePanStabilize, with the kind of artifact I'm talking about :

And finally a detail from the middle frame interpolated by FrameSurgeon without the DePanStabilize processing, which is as flawless as can be :

The problem is that in other cases, interpolation by FrameSurgeon without prior stabilization produces an ugly result... So I really don't know what to do... _

EDIT : One possibility would be to run the interpolation script without any stabilization, and stabilize in Magix Video Deluxe (which proved to be efficient and reliable as I said earlier), but then I would have to check every interpolated frame again, and do a second interpolation pass for the bad and the ugly ones, at the encoding stage. For this to be practical, I would need to be able to review only the interpolated frames, rather than parsing the whole footage, which is excruciatingly tedious. So is there a convenient way to do that in Avisynth, with my lists of FrameSurgeon commands ?

Last edited by abolibibelot; 20th December 2018 at 02:22.
abolibibelot is offline   Reply With Quote
Old 20th December 2018, 03:51   #16  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 6,820
Quote:
You mean, for FrameSurgeon interpolation ?
Any.
Quote:
For this to be practical, I would need to be able to review only the interpolated frames
For Morpheus, yes.
Script function SelectRanges(), included with Prune plug:- https://forum.doom9.org/showthread.p...60#post1715260
Code:
Function SelectRanges(clip c,String "SCmd",String "Cmd",Bool "TrimAudio",Float "FadeMS",Bool "Ordered") {
    # SelectRanges() by StainlessS. Required:- FrameSel, Prune, RT_Stats
    # Wrapper to Select frames/ranges along with audio, can supply frames/ranges in SCmd string And/Or Cmd file.
    #   The wrapper makes for easier usage of Prune() which supports up to 256 input clips, but requires a clip index,
    #   eg '3, 100,200' would specify clip 3, range 100 to 200. The wrapper does away with the necessity for the clip index as we
    #   are only using a single clip here.
    #
    # SCmd: Frames/Ranges specified in String (Frames/Ranges either Chr(10) or ';' separated, infix ',' specifies range, eg 'start,end').
    # Cmd:  Frames/Ranges specified in file (one frame/range per line, comments allowed, see FrameSel for Further info).
    #  *** NOTE ***, If both Cmd and SCmd supplied AND Ordered == False, then will process Cmd file and then SCmd string afterwards, ie
    #    Will select ranges in Cmd file and in order specified (rather than auto ordering ranges) and then append ranges specified in
    #    SCmd string (and in order specified).
    # TrimAudio:
    #   True(default), selects audio belonging to selected frames/ranges
    #   False, returns original audio, probably out of sync (maybe totally out of whack if Ordered == false and selected ranges out of order).
    # FadeMS: (default 1.0 millisec). Linear Audio Fade duration at splices when TrimAudio==true, 0 = dont fade (might result in audio 'clicks/cracks').
    # Ordered:
    #   True(default), all frames/ranges are returned in sequencial order. Any frame specified more than once will return only 1 instance.
    #   False, All frames/Ranges are returned in specified order, Cmd processed first and then SCmd. Frames/ranges specified more than once
    #     will return multiple instances. Allows out-of-order trimming of clip, eg re-sequencing of scenes in movie.
    #
    # Does not make much sense to select individual frames with audio, best used with ranges.
    # Will coalesce individually selected adjacent frames/ranges before any Fade, ie only audio fade where sensible to do so.
    # TrimAudio==false with non Ordered selection will result in completely out of sync audio.
    c
    TrimAudio=Default(TrimAudio,True)   # default true trims audio, false returns original audio (audiodubbed, as Framesel returns no audio)
    FadeMS=Float(Default(FadeMS,1.0))   # 1 millisecond linear fadeout/fadein at splices
    Ordered=Default(Ordered,True)       # True (default) frames/ranges will be Ordered and selected only once even if specified more than once.
                                        # False, frames/ranges returned in specified order, Cmd processed 1st and then SCmd.
    PruneCmd = (TrimAudio) ? "~Prune_"+RT_LocalTimeString+".txt" : ""
    (!TrimAudio)
        \ ? FrameSel(scmd=SCmd,cmd=Cmd,Ordered=Ordered)
        \ : FrameSel_CmdReWrite(PruneCmd,scmd=SCmd,cmd=Cmd,Ordered=Ordered,Prune=True,range=true)
    (TrimAudio) ? Prune(Cmd=PruneCmd,FadeIn=True,FadeSplice=True,FadeOut=True,Fade=FadeMS) : NOP
    # If TrimAudio==true then delete Prune temp file, Else restore original Audio to the now audio-less clip
    (TrimAudio)
        \ ? RT_FileDelete(PruneCmd)
        \ : (c.HasAudio) ? AudioDub(c) : NOP
    Return Last
}
I guess I could knock up a script to show FrameSurgeon Interpolations, too. Give us a little time.
Is it just single frames, or ranges interpolated ?
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???
StainlessS is offline   Reply With Quote
Old 20th December 2018, 08:16   #17  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
Quote:
I guess I could knock up a script to show FrameSurgeon Interpolations, too. Give us a little time.
Is it just single frames, or ranges interpolated ?
In this case there are some ranges of frames. Looks like this typically :
Code:
...
I1 1030
I1 1037
I2 1043
I1 1050
I1 1055
I2 1069
I1 1109
I1 1129
I1 1141
I1 1146
I2 1149
I1 1153
I3 1155
I1 1159
I1 1169
I2 1179
I1 1182
...
I tried this dirty method : opened one of the command files in Calc, with spaces as separators, removed the “I” at the begining, added a column with a value calculated as [B] + [A] - 1, added columns with “Trim(” / “,” / “)”, then exported as .csv, edited that with WinHex to remove the x09 separator character and replace the new line symbols with “ ++ ”, exported that as .avs, added an AVISource command... It works but very slowly, AVSPMod (or Avisynth) seems to choke with so many Trim commands (1387). Is there a practical limit to the number of Trim segments, or the length of an Avisynth command in general ?
I found a function named AdvancedMultiTrim, which seems to be designed for that purpose, but right now I wouldn't know how to convert such a list into a list of individual frames (must be very simple to program such a thing, but I know next to nothing about programming).
abolibibelot is offline   Reply With Quote
Old 20th December 2018, 13:32   #18  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 6,820
The SelectRanges thing accepts single frame or ranges, ie

#######
27
43 44
52,53
79
99,100
121 122
#######
Will not choke (test long time ago parsed 40,000 single frames in about 1 second), lots of ranges/frames no more likely to choke than a single one.
If you give me till maybe midnight (got to leave in a little while), I'll knock up a script compatible to convert frame/ranges and extract those plus maybe
1 frame before and one after Interpolated frames.

Oh, the SelectRanges script may also require FrameSel.

EDIT: Memory not that great (below from Prune docs)
Quote:
I have tested the speed at which Prune() can do it's two pass parse on a command file of 30,000 frames, 42 of which were
omitted by the writefile script and the input of 30,000 single frame trims was coalesced to 8 trims overall
with an overhead of about 1.5 seconds on my less than powerful machine. In most cases, I think you are unlikely
to be wanting to feed in 30,000 or more trims to Prune, but the above example shows it can be done without effort.
Above timing was with dv=0, ie DebugView output off (a couple of seconds longer with full debug on).
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 21st December 2018 at 00:09.
StainlessS is offline   Reply With Quote
Old 20th December 2018, 23:29   #19  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 6,820
I had to update Prune() to x64 version, thought I had already done it.

Find below, some stuff.
Code:
Function FS_ExtractInterps(String InCmdFile,String OutCmdFile,Int "Extra") {
    #   Extra, 0=Interp only, 1=Interps + 1 before + 1 after, 2=Interps + 1 before + 1 after + Blank frame separator
    Function FSX_IsNul(String S)     {return RT_Ord(S)== 0}
    Function FSX_IsHash(String S)    {return RT_Ord(S)==35}
    Function FSX_IsComma(String S)   {return RT_Ord(S)==44}
    Function FSX_IsHyphen(String S)  {return RT_Ord(S)==45}
    Function FSX_IsDigit(String S)   {return (RT_Ord(S)>=48&&RT_Ord(S)<=57)}
    Function FSX_EatWhite(String S)  {pos=1 While(RT_Ord(S,pos=pos)==32||RT_Ord(S,pos=pos)==9){pos=pos+1} return(pos>1)?MidStr(S,pos):S}
    Function FSX_EatDigits(String S) {pos=1 While(RT_Ord(S,pos=pos)>=48&&RT_Ord(S,pos=pos)<=57){pos=pos+1} return(pos>1)?MidStr(S,pos):S}
    Function FSX_IsI(String S)       {return s.RT_Ord == 73 || s.RT_Ord==105}
    myName="FS_ExtractInterps: "
    IsAvsPlus=FindStr(UCase(versionString),"AVISYNTH+")!=0
    Assert(IsAvsPlus, RT_String("%sNeed AVS+",myName))
    Assert(RT_FunctionExist("Prune"), RT_String("%sNeed Prune",myName))
    Assert(InCmdFile!="", RT_String("%sInCmdFile Cannot be ''",myName))
    InCmdFile=RT_GetFullPathName(InCmdFile)
    Assert(InCmdFile.Exist, RT_String("%sInCmdFile Must Exist",myName))
    Assert(OutCmdFile!="", RT_String("%sOutCmdFile Cannot be ''",myName))
    OutCmdFile=RT_GetFullPathName(OutCmdFile)
    Extra = Default(Extra,0)
    Assert(0 <= Extra <= 2,RT_string("%s0 <= Extra <= 2",myName))
    RT_FileDelete(OutCmdFile)
    CMD=RT_ReadTxtFromFile(InCmdFile)
    Lines=RT_TxtQueryLines(CMD)
    CmdCnt=0
    For(n=0,Lines-1) {
        SSS=RT_TxtGetLine(Cmd,n).FSX_EatWhite
        if(!SSS.FSX_IsNul && !SSS.FSX_IsHash) {                                 # NOT Empty line or Hash (#) ALL Comment
            if(SSS.FSX_IsI) {
                S=SSS.MidStr(2)                                                 # Strip 'I'
                if(S.FSX_IsDigit) {
                    Cnt=S.RT_NumberValue
                    Assert(0 < Cnt <= 9,RT_String("%sLINE_%d 'In' Invalid Interp Command\n'%s'",myName,n+1,SSS))
                    S=S.FSX_EatDigits.FSX_EatWhite
                    Assert(S.FSX_IsDigit,RT_String("%sLINE_%d Expecting Interpolate Start frame\n'%s'",myName,n+1,SSS))
                    SFrm=S.RT_NumberValue
                    EFrm=SFrm+Cnt-1
                    S=S.FSX_EatDigits.FSX_EatWhite
                } else {
                    S=S.FSX_EatWhite
                    Assert(S.FSX_IsDigit,RT_String("%sLINE_%d Expecting Interpolate Start frame\n'%s'",myName,n+1,SSS))
                    SFrm=S.RT_NumberValue
                    EFrm=SFrm
                    S=S.FSX_EatDigits.FSX_EatWhite
                    if(S.FSX_IsComma)   { S=S.MidStr(2).FSX_EatWhite }      # Strip Comma and white
                    IsNeg = S.FSX_IsHyphen
                    if(IsNeg)               { S=S.MidStr(2).FSX_EatWhite }
                    if(S.FSX_IsDigit) {
                        EFrm=S.RT_NumberValue
                        S=S.FSX_EatDigits.FSX_EatWhite
                        EFrm = (IsNeg) ? SFrm+EFrm-1 : EFrm
                    } Else { Assert(!IsNeg,RT_String("%sLINE_%d Expecting End frame\n'%s'",myName,n+1,SSS)) }
                }
                if(!S.FSX_IsHash)   { Assert(S.FSX_IsNul,RT_String("%sLINE_%d UnExpect data\n'%s'",myName,n+1,SSS)) }
                ########
                if(Extra>=1)  { wr=RT_String("1 %d",SFrm-1).RT_StrPad(14) RT_WriteFile(OutCmdFile,"%s # BEFORE",wr,Append=True) } # Before
                wr=RT_String("0 %d %d",SFrm,EFrm).RT_StrPad(14)
                RT_WriteFile(OutCmdFile,"%s # INTERP <<<",wr,Append=True)                                                         # Interp
                if(Extra>=1)  { wr=RT_String("2 %d",EFrm+1).RT_StrPad(14)  RT_WriteFile(OutCmdFile,"%s # AFTER",wr,Append=True) } # After
                If(Extra==2) { wr="3 0".RT_StrPad(14)  RT_WriteFile(OutCmdFile,"%s # BLANK",wr,Append=True) }                     # Blank
                CmdCnt = CmdCnt + 1
            } Else {
                RT_DebugF("LINE_%d Skipping non Interp line\n    '%s'",n+1,SSS,name=myName)
            }
        }
    }
    Return CmdCnt
}

Function PullInterpFrames(clip c, String InCmdFile, String "OutCmdFile",Int "Extra",Bool "Show",Bool "AutoDelOutCmd",bool "Debug") {
    myName="PullInterpFrames: "
    OutCmdFile=Default(OutCmdFile,"Prune_Cmd.txt")
    Extra=Default(Extra,0)
    Show=Default(Show)
    AutoDelOutCmd=Default(AutoDelOutCmd,True) # If true, then delete OutCmdFile after use.
    Debug=Default(Debug,false)                # Prune Debugging output
    dv = Debug ? 5 : 0
    Assert(OutCmdFile!="", RT_String("%sOutCmdFile Cannot be ''",myName))
    OutCmdFile=RT_GetFullPathName(OutCmdFile)
    FS_ExtractInterps(InCmdFile,OutCmdFile,Extra)       # extract Interpolation commands into OutcmdFile
    blank=c.BlankClip(Length=1) # Single frame for blank separator when extra = 2
    NickName="""            # Names Shown on each frame
        Interpolated=0
        Before=1
        After=2
        Blank=3
    """
    Before=c After=c # Same as src, so we can show NickNames on frame.
    Prune(c,Before,After,blank,Cmd=OutCmdFile,NickName=NickName,show=Show,dv=dv)
    (AutoDelOutCmd) ? RT_FileDelete(OutCmdFile) : NOP
    Return Last
}

Colorbars         # Replace with your repaired clip returned via FrameSurgeon
InCmd="InCmd.txt" # Point to FrameSurgeon command file.
EXTRA=2           # 0=Interp only, 1=Interps + 1 before + 1 after, 2=Interps + 1 before + 1 after + Blank frame separator
SHOW=True
AutoDelOutCmd=False
PruneDebug=True
PullInterpFrames(InCmd,extra=EXTRA,show=SHOW,AutoDelOutCmd=AutoDelOutCmd,Debug=PruneDebug)
EDIT: Some Mods

InCmd.txt (ignore the comments, just testing working ok, Only extracts FrameSurgeon Interp commands (but tested with non interp commands in-situ).
Code:
        CP  8
        CN  12
        #
        I1  21         # Interpolate 1 frame n (using source frames n-1 and n+1 as Interpolation source frames, (Id commands Planar, YUY2 only).
        I2  31         # Interpolate 2 frames starting at frame n, (using source frames n-1 and n+2).
        I3  41         # Interpolate 3 frames starting at frame n, (using source frames n-1 and n+3).
        I4  51         # Interpolate 4 frames starting at frame n, (using source frames n-1 and n+4).
        I5  61         # Interpolate 5 frames starting at frame n, (using source frames n-1 and n+5).
        I6  71         # Interpolate 6 frames starting at frame n, (using source frames n-1 and n+6).
        I7  81         # Interpolate 7 frames starting at frame n, (using source frames n-1 and n+7).
        I8  91         # Interpolate 8 frames starting at frame n, (using source frames n-1 and n+8).
        I9  101        # Interpolate 9 frames starting at frame n, (using source frames n-1 and n+9).
        I   111        # Interpolate 1 frame n (using source frames n-1 and n+1 as Interpolation source frames.
        I   121,123    # Interpolate range s to e (max range 9 frames, using source frames s-1 and e+1 as source frames).
        I   131,-2     # Interpolate frame count i, range s to s+i-1, (i max 9 frames, using source frames s-1 and s+i as source frames).
        #
        FXd 200        # Replace frame n with same frame from FXd clip, eg FX3 100 replace source frame 100 with same frame from FX3 clip.
        FXd 210,212    # Replace range s to e with same range from FXd clip.
        FXd 220,0      # Replace range s to end of clip with same range from FXd clip.
        FXd 230,-i     # Replace frame count i, range s to s+i-1, with same range from FXd clip.
                       # (the hyphen '-' indicates that i is a count rather than the end frame of a range).
        #
        DEL 240        # Delete frame n (Deletes are processed AFTER ALL Interpolations/replacements)
        DEL 250,251    # Delete frames s to e
        DEL 260,0      # Delete frames s to end of clip.
        DEL 270,-2     # Delete frame count i, range s to s+i-1.
        -300           # Delete frame n
        -300,302       # Delete frames s to e
        -400,0         # Delete frames s to end of clip.
        -500,-2        # Delete frame count i, range s to s+i-1.
Generated Prune_Cmd.txt
Code:
1 20           # BEFORE
0 21 21        # INTERP <<<
2 22           # AFTER
3 0            # BLANK
1 30           # BEFORE
0 31 32        # INTERP <<<
2 33           # AFTER
3 0            # BLANK
1 40           # BEFORE
0 41 43        # INTERP <<<
2 44           # AFTER
3 0            # BLANK
1 50           # BEFORE
0 51 54        # INTERP <<<
2 55           # AFTER
3 0            # BLANK
1 60           # BEFORE
0 61 65        # INTERP <<<
2 66           # AFTER
3 0            # BLANK
1 70           # BEFORE
0 71 76        # INTERP <<<
2 77           # AFTER
3 0            # BLANK
1 80           # BEFORE
0 81 87        # INTERP <<<
2 88           # AFTER
3 0            # BLANK
1 90           # BEFORE
0 91 98        # INTERP <<<
2 99           # AFTER
3 0            # BLANK
1 100          # BEFORE
0 101 109      # INTERP <<<
2 110          # AFTER
3 0            # BLANK
1 110          # BEFORE
0 111 111      # INTERP <<<
2 112          # AFTER
3 0            # BLANK
1 120          # BEFORE
0 121 123      # INTERP <<<
2 124          # AFTER
3 0            # BLANK
1 130          # BEFORE
0 131 132      # INTERP <<<
2 133          # AFTER
3 0            # BLANK
Need Prune x64

EDIT: Non Interpolation commands that are skipped, are sent to the DebugView window (Google).
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 22nd December 2018 at 13:17.
StainlessS is offline   Reply With Quote
Old 25th December 2018, 09:32   #20  |  Link
abolibibelot
Registered User
 
Join Date: Jun 2015
Location: France
Posts: 38
Thanks a lot for this ! (I had yet another completely unexpected issue to solve in the mean time...)

Apparently the script works with Prune x86/32b. But I'm using it on lossless exports of already processed videos, so it's a much lighter workload, perhaps that's why.
To use it with Prune x64/64b, I would have to use AVSPMod in 64b too, right ? I had an issue when trying to export some of the files processed with FrameSurgeon / Morph + DePanStabilize, using VirtualDub2 32b, which was solved by enabling the “LAA” feature. Someone suggested using Avisynth+ in 64b and VirtualDub2 in 64b, but that would have required all the filters to work in 64b, and I found out that ClipClop and Prune were only available in 32b. I won't need it now (again, it worked with VD2 32b and “LAA” enabled, and anyway I removed DePanStabilize later on which significantly reduced the memory usage), but now that Prune is available in 64b, just adding ClipClop 64b would allow to use FrameSurgeon in 64b.

And thank you again because without those little wonders of yours I'd never have been able to complete this nightmare of a movie (I've started working on it in March 2016 !).
I have yet to decide if I want to try improving the part with the backlight issue... I have experimented many combinations of settings, with Levels / Autolevels / Autoadjust / SmoothAdjust / HDRAGC / SGradation... It certainly improved a lot compared with the raw footage, but I can't get it quite right, and it's especially difficult to find a combination which works well in all parts, while the exposure changes wildly in a matter of seconds, depending on where the camara was pointed relative to the window, and trying to adapt the settings to each change is atrociously tedious and mind-numbing. (Sometimes, when working on it for a while, it seemed quite fine with some particular settings, then I did something else and came back 20 minutes later... and it looked awful ! As Mark Twain wrote, “you can't depend on your eyes when your imagination is out of focus”.)
abolibibelot is offline   Reply With Quote
Reply

Tags
backlight, hdragc, interpolation, jerky video, stabilization

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 22:46.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, vBulletin Solutions Inc.