1 2 3
8 9
Editor, Player (69)
Joined: 6/22/2005
Posts: 1050
I didn't notice too much of a difference between 20fps and 24fps. Like Lex said, 20fps seems to blink faster, which made the blinking of the purple stars/galaxies in the background of the terminal cutscene more regular. I also found the faster blinking at the end more annoying, though.
Current Projects: TAS: Wizards & Warriors III.
GabCM
He/Him
Joined: 5/5/2009
Posts: 901
Location: QC, Canada
moozooh wrote:
Btw, this is pretty much what I referred to when talking about flicker-optimized AviSynth script, but as I haven't tried it yet I don't know how it would look as a result (I think it might produce a slight interlacing artifact that way due to non-uniform sprite brightness), but it would retain better fluidity than both 20 and 24 fps, and a clear reference to proper flickering as well by alternating between 33% and 66% sprite opacity during such segments (as opposed to 50% the entire flicker time).
I'd love to see this. If anyone can code an AviSynth function that does that, it would be appreciated. I'd like to try, but I don't even know how to loop through groups of 2 or 4 frames in a clip. If someone can explain me this, I would make the function.
Player (100)
Joined: 3/20/2008
Posts: 466
Location: Montreal, Quebec, Canada
I liked 60 the best, personally. The arm pumping in 20 looked terrible.
Editor, Experienced player (860)
Joined: 8/12/2008
Posts: 845
Location: Québec, Canada
What I can say is that 30 fps is the same as 60 fps (as expected). 24 fps and 20 fps both looks terrible to me, motion-wise. Thus, I'm looking forward some advanced frame-blending techniques!
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
Just out of curiosity: Could you make a 30 FPS version where each frame is a blend (ie. average) of the two frames of the original 60 FPS footage? How would that look like?
Lex
Joined: 6/25/2007
Posts: 732
Location: Vancouver, British Columbia, Canada
That was described by moozooh in a previous post in this thread. It is possible, but it seems like nobody here has the expertise or time to write such a script.
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Actually, a simplier version has been used for some time where the exact average of the two frames was used. It lead to all flickering or frame-alternating motion turning the sprite in question into a blurred or translucent (due to the average between 100% and 0% opacity being 50%) form, depending on the nature of the motion. It's arguably better than 30/60 fps's complete vanishment/solidity, but still far from perfect.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Joined: 11/4/2007
Posts: 1772
Location: Australia, Victoria
That, and it looks absolutely awful with moving backgrounds. That's part of the reason I can't make many hybrid blending/decimate encodes. If the game has most of the flicker being in areas with moving backgrounds, it'll just look like a blurred mess (and make it quite obvious when it is blurred and when it isn't).
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
It would still be nice to see how the Super Metroid clip would look like with averaged frames.
Joined: 11/22/2004
Posts: 1468
Location: Rotterdam, The Netherlands
If someone is going to test averaged frames (not me, because I'm confident it won't be better) you should also include a part of, say, Sonic and Knuckles 3. Something with a LOT of motion and more complicated backgrounds.
creaothceann
He/Him
Editor
Joined: 4/7/2005
Posts: 1874
Location: Germany
Mister Epic: Afaik Youtube simply drops frames until the framerate is <= 30, so your 30 and 60 uploads should be the same.
Warp wrote:
It would still be nice to see how the Super Metroid clip would look like with averaged frames.
Like this. Personally I don't think the blurring is worse than having non-smooth motion or no effect at all. Btw. don't use interlacing and weaving for this, it can lead to "line jumping" in some cases.
function BlendFields(clip)  {
	clip
	(FrameCount % 2 == 1)  ?  DuplicateFrame(FrameCount - 1)  :  nop
	Layer(SelectEven, SelectOdd, level=128) 
}
As for a function that "stretches" frames over time, that's what ConvertFPS does, and I think it creates clips where moving objects alternate between blurry and sharp, like bad frameblended 24 fps -> 30 fps video conversions.
Joined: 10/20/2006
Posts: 1248
Optimally, you'd just average the sprite layer and it'd be the emulator providing that functionality. Arm pumping would still look stupid though. Hm, if there was an option to blend frames x and x+1 with 66%/33%, then frames x+2 and x+3 with 33%/66%, etc, and only on the sprite layer, maybe that would produce some nice results... Maybe not. Btw, I've found 24fps to be the worst by far. It just looks very irritating to me for some reason. Edit: Hm, with 33/66, 66/33, 33/66, 66/33 the focus would be on frames 2 and 3, then 6 and 7 etc though, so maybe that'd look a bit wobbly. Maybe 33/66, 50/50, 66/33, 50/50 would look better (I'm trying to think of something that'd still make pumping look like the arm is actually moving, not just doubled). Or something like 60/40 of frames 1&2, then 10/40/50 of frames 2,3&4 and repeat? Pretty difficult to imagine what any of this would look like. @Flygon: How would it be impossible if you let a modified version of the emulator (or maybe LUA) do it?
Joined: 11/4/2007
Posts: 1772
Location: Australia, Victoria
I, myself, would very gladly just blend the sprite layer and that's it. But the problem is is that it's nigh impossible to do when you consider that sprites go behind and on top of the background layer/s at the same time. Even in NES games. Edit:
Kuwaga wrote:
@Flygon: How would it be impossible if you let a modified version of the emulator do it?
Well, the issue is finding emulator authors that'd be willing to do it to my specifications. That, and I'm still having difficulty doing green-screen effects in AviSynth.
creaothceann
He/Him
Editor
Joined: 4/7/2005
Posts: 1874
Location: Germany
Kuwaga wrote:
@Flygon: How would it be impossible if you let a modified version of the emulator (or maybe LUA) do it?
You're assuming that hardware sprites are used only for moving objects and hardware BGs for static backgrounds. Anyway...
function Blend(clip c1, clip c2, float opacity)  {Layer(c1, c2, level=opacity)}


AVISource(...)
src = last

f0 = SelectEvery(4, 0)
f1 = SelectEvery(4, 1)
f2 = SelectEvery(4, 2)
f3 = SelectEvery(4, 3)
a  = Blend(f0, f1, 1.0 * 2/3)
b  = Blend(f2, f3, 1.0 * 1/3)
pattern_33_66__66_33 = Interleave(a, b)

src
f0 = SelectEvery(8, 0)
f1 = SelectEvery(8, 1)
f2 = SelectEvery(8, 2)
f3 = SelectEvery(8, 3)
f4 = SelectEvery(8, 4)
f5 = SelectEvery(8, 5)
f6 = SelectEvery(8, 6)
f7 = SelectEvery(8, 7)
a  = Blend(f0, f1, 1.0 * 2/3)
b  = Blend(f2, f3, 1.0 * 1/2)
c  = Blend(f4, f5, 1.0 * 1/3)
d  = Blend(f6, f7, 1.0 * 1/2)
pattern_33_66__50_50__66_33__50_50 = Interleave(a, b, c, d)


pattern_...     # select one
This should produce the patterns you want (not tested though).
GabCM
He/Him
Joined: 5/5/2009
Posts: 901
Location: QC, Canada
Oh nice! I'm gonna test this with that Super Metroid clip I've used for my 4 other tests.
Joined: 11/4/2007
Posts: 1772
Location: Australia, Victoria
creaothceann wrote:
Kuwaga wrote:
@Flygon: How would it be impossible if you let a modified version of the emulator (or maybe LUA) do it?
You're assuming that hardware sprites are used only for moving objects and hardware BGs for static backgrounds.
Yeah, that's the other problem. It really buggers up some games, such as Sonic 3 and Knuckles. Or Super Mario Bros. games that used sprites as hidden blocks.
GabCM
He/Him
Joined: 5/5/2009
Posts: 901
Location: QC, Canada
creaothceann wrote:
function Blend(clip c1, clip c2, float opacity)  {Layer(c1, c2, level=opacity)}
Layer doesn't work with a float variable for opacity, so I had to use Overlay instead.
function Blend(clip c1, clip c2, float op)  {Overlay(c1, c2, opacity=op)}
I'm going to encode the results of both methods (33-66, 66-33 and 33-66, 50-50, 66-33, 50-50).
creaothceann
He/Him
Editor
Joined: 4/7/2005
Posts: 1874
Location: Germany
Sorry, it needs an integer. >_>
function Blend(clip c1, clip c2, float opacity)  {Layer(c1, c2, level=int(opacity * 257))}


AVISource(...)
ConvertToRGB32
...
It should work with 257; if not, try 256. Overlay works internally in YUV colorspace, but the difference is negligible here.
GabCM
He/Him
Joined: 5/5/2009
Posts: 901
Location: QC, Canada
creaothceann wrote:
Sorry, it needs an integer. >_>
function Blend(clip c1, clip c2, float opacity)  {Layer(c1, c2, level=int(opacity * 257))}


AVISource(...)
ConvertToRGB32
...
It should work with 257; if not, try 256. Overlay works internally in YUV colorspace, but the difference is negligible here.
It looks a bit better using this Layer function. I'll encode using this.
GabCM
He/Him
Joined: 5/5/2009
Posts: 901
Location: QC, Canada
So yeah. I've encoded the same Super Metroid clip I've used for my other tests, using both frame blending techniques mentionned. 33% + 66%, 66% + 33% 33% + 66%, 50% + 50%, 66% + 33%, 50% + 50% If one of them is going to be adopted in the official encoding rules, I'll take creaothceann's function, and make an AviSynth function called "TASBlend", requiring only a clip, so we can use it as easily as clip.TASBlend(). EDIT: I personally like the first frame blending method. What do you think?
creaothceann
He/Him
Editor
Joined: 4/7/2005
Posts: 1874
Location: Germany
Yeah it's the better of the two variants, imo...
Lex
Joined: 6/25/2007
Posts: 732
Location: Vancouver, British Columbia, Canada
Mister Epic wrote:
So yeah. I've encoded the same Super Metroid clip I've used for my other tests, using both frame blending techniques mentionned. 33% + 66%, 66% + 33% 33% + 66%, 50% + 50%, 66% + 33%, 50% + 50% If one of them is going to be adopted in the official encoding rules, I'll take creaothceann's function, and make an AviSynth function called "TASBlend", requiring only a clip, so we can use it as easily as clip.TASBlend(). EDIT: I personally like the first frame blending method. What do you think?
Yeah, that first one looks awesome!
sgrunt
He/Him
Emulator Coder, Former player
Joined: 10/28/2007
Posts: 1360
Location: The dark horror in the back of your mind
Mister Epic wrote:
So yeah. I've encoded the same Super Metroid clip I've used for my other tests, using both frame blending techniques mentionned. 33% + 66%, 66% + 33% 33% + 66%, 50% + 50%, 66% + 33%, 50% + 50% If one of them is going to be adopted in the official encoding rules, I'll take creaothceann's function, and make an AviSynth function called "TASBlend", requiring only a clip, so we can use it as easily as clip.TASBlend().
The first of those looks reasonably smooth. The second ... doesn't.
Editor, Experienced player (860)
Joined: 8/12/2008
Posts: 845
Location: Québec, Canada
Agreed! I love the first one. This should be tested with some Megaman X flicker too.
creaothceann
He/Him
Editor
Joined: 4/7/2005
Posts: 1874
Location: Germany
function TASBlend(clip c)  {
        Interleave(Layer(SelectEvery(4, 0), SelectEvery(4, 1), round(2.0 / 3 * 257))
        \          Layer(SelectEvery(4, 2), SelectEvery(4, 3), round(1.0 / 3 * 257)))
}
Short version :)
1 2 3
8 9