View Full Version : Proper method changing FPS from 59.94p > 29.970p???
WILLIS
8th December 2010, 18:19
Hi, I have some sports captures that are 720 avc .ts files. I use DGIndexNV to decode and then edit the .avs script a little. I was wondering the proper method to change fps inside the.avs
Would a simple ConvertFPS("ntsc_video")work? Or is there a better method? I feed the script to megui and encode @ 480p x264.
Also when is the best time to implement the framerate change? Inside the decoder(DGIndexNV)? Inside my .avs script? Or when the file reaches the encoder inside of my x264 presets? Thx guys
creaothceann
8th December 2010, 19:14
59.94 progressive? I'd leave that as it is.
bcn_246
8th December 2010, 19:41
Given that you want an output frame rate of exactly half the input I would just write 'ChangeFPS("NTSC_Video")' in the AVISynth script. Do this before other filters (unless it's a bob deinterlacer or something else that changes the amount of frames) otherwise you will waste time processing twice as many frames as you need to only to throw half of them away. If for some reason (I can't think of any) that doesn't work 'SelectEven()', 'SelectOdd()' or 'Decimate(2)' would also give you the output frame rate you want.
ConvertFPS() isnt ideal as it blends adjacent frames, wasting time processing and creating a 'ghosted' output picture. It is only useful (debatably) if you arn't dividing the frame rate by a multiple of 2, for example going from 29.970fps (NTSC Video) to 25fps (PAL)
Ben
Gavino
8th December 2010, 20:29
Do this before other filters (unless it's a bob deinterlacer or something else that changes the amount of frames) otherwise you will waste time processing twice as many frames as you need to only to throw half of them away.
If there are no temporal filters in the chain, it doesn't matter where you do it. Avisynth only processes the frames it needs, so the unused frames will simply never be requested.
ConvertFPS() isnt ideal as it blends adjacent frames, wasting time processing and creating a 'ghosted' output picture.
In the special case (like here) where the input rate is an exact multiple of the output, ConvertFPS will not blend and will give exactly the same output as ChangeFPS (which in the case of halving the rate is the same as for SelectEven).
WILLIS
8th December 2010, 22:55
thx guys I appreciate the replies:)
Mug Funky
9th December 2010, 23:35
in this special case, and just to avoid possible rounding errors (diff between 59.94 and 60000/1001 for example), i'd use:
selectevery(2,0)
or
selectodd()
or
selecteven()
to explicitly pluck out every second frame.
one advantage is if there's some asymmetry in frame quality (such as you might get if the original source came from deinterlaced 1080i, or a sub-par compressed source, or weird video stuff floating around), you can choose whichever frames look the best by trying both.
jmac698
10th December 2010, 00:21
I've expanded on this idea in the past, in fact movies shown in 720p have up to 3 entire frames repeated. However due to the mpg hd encoder, and some frames have significantly better quality than others, in a consistent pattern. If you can link the frame type to your script, the P frame after an I frame is a better one. Sometimes there's motion interpolation to 60fps as well, if you want closer to the original then you need to take only the first frame in each group.
Not that this means much to you at this point ;)
WILLIS
11th December 2010, 21:30
Another quick question on this topic...How does halving the frame-rate like this effect my audio? Will it remain in-sync or do I need to re-encode it changing the audio frame-rate as well?
Gavino
11th December 2010, 23:39
All the methods mentioned above (ChangeFPS, ConvertFPS, SelectEven, SelectOdd) preserve the clip running-time, so audio stays in sync (assuming it was in sync to start with).
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.