It put 25 in the actual script for FFVideoSource(), because that' s what the source was
Entries that come after, override entries that come before
If I put
AssumeFPS(1)
AssumeFPS(2)
AssumeFPS(3)
in that order, the last one is the one that is effective
+ Reply to Thread
Results 31 to 53 of 53
-
-
eh for some reason the audio won't encode properly when i change its fps from 25 to 23.976
i hear one screech sound at the begining and nothing else. -
It seemed to work ok here. Audio was slowed, duration stretched to match the video. I choose the slowdown option , no pitch correction, not sure if that will make a difference
-
seemed to have got it working by changing the encoder
Should i also put the audio at 24fps or 23.976? -
-
-
Weird, because NicAudio is very stable/consistent for AC3 audio. Unless you did another switcharoo and are talking about another video/audio?
This one ?
https://forum.videohelp.com/threads/366225-Megui-change-FPS?p=2337715&viewfull=1#post2337715 -
fpsnum=25 and fpsden=1 tell FFVideoSource to decode the video at a constant 25fps. You can remove it (no need to though) but you can't change it or ffms will convert the frame rate by dropping or repeating frames.
AVISynth then slows the 25fps video down to 24fps with AssumeFPS(24000,1001)
The audio encoder configuration has the ability to do PAL/NTSC conversions, but it's something you'd normally only use if you know what you're doing, whether you use the OneClick encoder or not. There's no way to automatically slow down 25fps to 24fps when setting up an encode the "manual" way. The OneClick encoder is fairly configurable but you still need to set it up correctly, and there's no "one size fits all" OneClick solution. At least not when it comes to "non-standard" frame rate conversions.
If the video is 29.970fps "film" and you enable the OneClick de-interlacing option it should remove the duplicate frames (apply IVTC) and give you a progressive 23.976fps output. If the video is 29.970fps "interlaced" then it should de-interlace it to 29.970fps progressive. Trying to convert that to 23.976fps would generally be a bad idea and probably fairly pointless. I haven't read through the whole thread but can't you convert with MeGUI while outputting an MP4 and play it with the PS3 if the video is 29.970fps? Or for that matter, can't the PS3 play 25fps MP4s? Do you particularly need AVCHD? Or can't the PS3 play 25fps AVCHD? (As you might have guessed, I've never used a PS3 for playing video).
Anyway, if you enable the OneClick automatic de-interlacing option, for 29.976fps video that should automatically output either 23.976fps or 29.970fps (whichever is applicable). No need to adjust the audio speed. For PAL you'd need to create a script template with AssumeFPS(24000,1001) at the end, and enable the automatic de-interlacing in case it needs it. You'd slow the audio down. There's no way to create a single OnceClick profile which does it all. That's why you can create more than one.
Unfortunately I don't think asking the same question over at doom9 will get you more of an answer you're looking for, because OneClick simply doesn't have a "change fps" option for video as such. It can be used to change the frame rate, but to do it correctly you need to know create more than one OneClick profile and use the correct profile according to the input frame rate. -
Then, is it possible to change the fps in MeGUI from the GUI or not?
There can be many reasons someone could need it. Not everyone wants just the standard.
For example to create a movie with double fps for later use with special devices or 3D.
Or in my case I need to reduce the size of many tutorials. I need them to be high resolution in order to read the text, but I don't need a high fps, then I found than reducing the fps to 6 is perfect for me and makes the files much smaller. -
Actually, since most modern codecs use INTER-frame compression to get their efficiency, using a normal/higher framerate vs. using a low framerate should NOT be that different.
Example: If your 30fps uncompressed is 300Mbps and a 10fps version of the same uncompressed file is 100Mbps, a 10fps AVC encode can do a 50:1 compression (giving you 100/50 = 2Mbps), well then it is quite possible that an AVC encode of the 30fps can do an 110:1 compression of EQUIVALENT QUALITY (giving you 300/110 = 2.8Mbps). All those extra frames are coded much more efficiently because the difference between frames is less.
There is a place in MeGUI's "Tools:AVISynth Script Creator" to specify a fps via the GUI, but it's just as easy to do it directly in your script text editor anyway. All that is doing is giving you a gui "box" where you can enter the figure in, and this is only really helpful when it's not already specified in the script nor programmatically determined/determinable (see MeGUI's wiki...). There is NOT any place in the main GUI (since it relies on AVISynth's frameserving). There MIGHT be a place in the encoders' gui, but that would depend upon the encoder(s) and profile(s) chosen.
Scott -
-
He wouldn't use AssumeFPS()
He wants to reduce the framerate by taking every nth frame, so he should use ChangeFPS(). AssumeFPS() keeps the same number of frames (it plays either faster or slower, so it will go out of sync)
e.g. If original recording was 30FPS, ChangeFPS(6) would take every 5th frame for a final framerate of 6FPS. The duration will be the same, and still in sync
Probably the reason why something like this isn't included in the GUI is there are several different methods to increase or decrease the FPS. You migth use a different strategy depending on what the desired goal was. Same for the doubling FPS example; did he want to use duplicates? Blends? Some mix? Interpolate frames ? It's already cluttered GUI as is, adding all those options would make it even more cluttered -
Yes. If it can be done using Avisynth, it can therefore be done using MeGUI. You'd need to add the appropriate frame rate change (whether it be slowdown or speedup or conversion etc) to the script MeGUI creates for encoding. Either before saving the script with the AVS Script Creator or you can save the script, modify it with Notepad, then load it for encoding etc.
http://avisynth.org.ru/docs/english/corefilters/fps.htm
Keep in mind MeGUI sometimes adds frame rate conversion to the script itself. It depends how the video is opened. For DirectShowSource and ffms2 it does.
(Avisynth expects video to have a constant frame rate. If the source video has a variable frame rate it'll be converted to a constant one. If the source is constant frame rate, the frame rate conversion added to the script shouldn't change anything. It's not necessarily ideal to convert variable frame rate video to a constant frame rate that way but it can prevent audio sync problems after encoding video with dropped/missing frames.... that sort of thing)
If you open and index a video with ffmsindex it should be opened in a script like this:
LoadPlugin("C:\Program Files\MeGUI\tools\ffms\ffms2.dll")
FFVideoSource("E:\video.mkv", cachefile="D:\video.ffindex", fpsnum=24000, fpsden=1001, threads=1)
Normally the input video would be (for this example) 23.976fps and "fpsnum=24000 and fpsden=1001" tell ffms2 to output 23.976fps by dropping/duplicating frames if necessary. The input is the same as the output anyway, so nothing changes. You can modify the script above when opening a video so ffms2 will drop frames until the output is only 6fps like this:
LoadPlugin("C:\Program Files\MeGUI\tools\ffms\ffms2.dll")
FFVideoSource("E:\video.mkv", cachefile="D:\video.ffindex", fpsnum=6, fpsden=1, threads=1)
If you're not indexing with ffms2 or opening video via DirectShow then you can change the frame rate with AVisynth instead (see link above).
All that assumes you're setting up an encode "manually" by indexing then using the script creator. If you're using the OneClick encoder you should be able to create a script template which uses Avisynth to change the frame rate, then select that script template as the one to use when creating a OneClick encoder preset. I never use the OneClick encoder myself, but that'd be the idea.....
Thought I'd mention..... the option in the script creator which lets you alter the frame rate after opening video via either DirectShowSource or AviSource looks like this (for ffms2 you need to change the script yourself):
but..................
If you've opened a video via DirectShow it converts the frame rate by duplicating or dropping frames as required (which would be what you'd want, I assume), but if you've opened a video via AviSource it changes the frame rate by speeding it up or slowing it down, so the number of frames wouldn't change, they'd just whiz by faster or slower.
I'm not sure why the same setting in the script creator works differently depending on how the video is opened, but it's something to keep in mind. There's no reason why MeGUI couldn't add frame rate "conversion" to the script for both methods, but maybe there's a reason it doesn't which escapes me at the moment.Last edited by hello_hello; 23rd Oct 2014 at 20:29.
-
If a specific output frame rate isn't particularly important, and you want a method for removing frames that doesn't require you to modify scripts manually, you could enable de-interlacing in the script creator, choose "M in 5 Decimation" and set the "M" value to something that's not zero but less than five. An "M" value of 3 removes three frames out of five and for a 23.976fps source the output frame rate would probably be around 9.5fps. An "M" value of four will remove four frames in five for an output frame rate of around 4.8fps.
For fairly static video such as text tutorials, removing frames that way should work fine and the duration won't change. To remove more frames you'd need to enable "M in 5 decimation" then modify the decimation in the script manually. As an example, this will remove 9 frames out of 10 for something in the vicinity of a 2.5fps output (23.976fps input).
LoadPlugin("C:\Program Files\MeGUI\tools\avisynth_plugin\TIVTC.dll")
TDecimate(cycle=10, cycleR=9)Last edited by hello_hello; 23rd Oct 2014 at 20:25.
-
-
I don't really see it as a "problem" - it's not something that is done very often, but you're welcome to put in a request or make a patch
Also, I would argue you need to have a basic understanding of how the different types of "frame rate conversions" are done, otherwise there is great risk of screwing things up. Such as using AssumeFPS in the example above. Having some drop down list or separate page /subGUI with those options is just asking for trouble in my opinion
But if he really wanted to do the most efficient job for tutorial type scenarios, he should learn about VFR encoding. A 6FPS CFR isn't sufficient in some sections when doing tutorials. VFR encodes are ideal because they increase the framerate when required, slow down the frame rate when nothing or little is going on. -
-
If you feel that it's going to be useful to people, then you should submit a request in the megui request thread
http://sourceforge.net/p/megui/feature-requests/ -
Chances are the existing MeGUI frame rate changing options (DirectShow and AviSource) are pretty much like the colour correction option, mostly left over from a bygone era. For basic frame rate conversion via the GUI though (duplicating/dropping frames) you can open a video via DirectShow. For the rest, you need to do it manually, but it's not hard, and you can create AVS templates which convert the frame rate if you so desire.
Hybrid has a few clever frame rate conversion options built in. SRestore, Interframe, SalFPS3 and TFM under the Avisynth filter section, or a couple of "speed change" options which I think let you choose a new frame rate and whether to change the speed or duplicate/drop frames. Or both. -
Also available are ChangeFPS and ConvertFPS - both preserve original length.
http://avisynth.org.ru/docs/english/corefilters/fps.htm
https://forum.videohelp.com/threads/180191-avisynth-convertFPS-vs-changeFPS
These are both destructive, however, and I believe AssumeFPS is not.