Is there an easy way to take a 30fps video clip and make it look like a time lapse?
I need the output to look like this ~
http://www.youtube.com/watch?v=ZIqWPohGmmM
I understand that the best way to do this is with a camera that is taking a picture once per X seconds but in this case I already have a 30 fps video that needs to be converted.
+ Reply to Thread
Results 1 to 17 of 17
-
-
Just about every video editor has the ability to decimate frames and change speed. What type of video do you have? What software do you have? OS?
-
You could re-encode it while deleting frames and speeding it up accordingly. If you're familiar with AVIsynth:
AVISource("D:\test.avi").AssumeFPS(120,1)
LoadPlugin("C:\Program Files\avisynth_plugin\TIVTC.dll")
TDecimate(cycle=4, cycleR=3)
The above script would take an AVI (ie a 30fps AVI) and speed it up to 120fps.
The TDecimate line deletes 3 out of every four frames. Therefore the output frame rate would be 30fps again but the video would go by at 4x the normal speed. Maybe not completely smoothly, but I guess that doesn't matter as you're after a time lapse effect. You could play around with the speed-up and the number of frames being deleted to produce the desired effect and output frame rate.
If there's audio you'd probably need to resample it to match. 4x the speed in this case.
The above is very easy if you already use an AVIsynth based GUI and have a little AVIsynth knowledge, but possibly fairly hard if you don't. I'm not sure there's an encoder GUI which would do the same thing for you automatically. If you used a program which creates Avisynth scripts for encoding you'd need to modify the script manually. There may be free video editing software which can do something similar for you, but if there is, someone else will need to suggest it (I don't know).
Here's a very quick example of what the above method would look like. The input video was 23.976fps, sped up 4x, then three out of four frames were removed while re-encoding. -
You can do it in Virtualdub, it allows you to decimate frames and control speed.
Got my retirement plans all set. Looks like I only have to work another 5 years after I die........ -
In AviSynth You can use SelectEvery(N) to select every Nth frame (discarding the others). For example SelectEvery(10) keeps only every 10th frame. But that also leaves you with 1/10 the frame rate. So followed that with AssumeFPS(30.0) or whatever final frame rate you want in your final video.
In VirtualDub use Video -> Frame Rate... In the top section, Source Rate Adjustment set the speed you want the video to go. If you want your 30 fps video to run 10 times faster set the rate to 300. Then in the Frame Rate Conversion section select the frame rate of the output file -- 30 fps. That will cause 9 out of 10 frames to be skipped. -
In VirtualDub use Video -> Frame Rate... In the top section, Source Rate Adjustment set the speed you want the video to go. If you want your 30 fps video to run 10 times faster set the rate to 300. Then in the Frame Rate Conversion section select the frame rate of the output file -- 30 fps. That will cause 9 out of 10 frames to be skipped.Got my retirement plans all set. Looks like I only have to work another 5 years after I die........
-
Finally got my codec problem fixed so I can do this with vdub, but the steps I'm taking require two encoding passes which is leading to a quality loss.
Is there a method to achieve the following without 2 encoding passes?
Step 1 - Starting with a 30fps vid I increase framerate to 90 and then decimate by 10 which creates a nice timelapse look, but then it drops to 9fps and I need the output to be 30fps for the master edit.
Step 2 - Open the 9fps file and convert to 30fps and resave. -
-
If you don't care about having a large intermediate file you can save uncompressed or losslessly compressed from VirtualDub. Then open that video for further processing. There will be no loss of quality in the intermediate file.
Or you can frame serve from one instance of VirtualDub to another. That will allow you to send processed frames from the first instance to a second, without saving to an intermediate file:
Run auxsetup.exe (found in VirtualDub's program folder) on your computer once to enable the feature. Then open your video in one instance of VirtualDub and set it up as you did earlier. Select File -> Start Frame Server. When asked for a file name use whatever you want -- I usually just create a file on the Desktop (so it's easy to delete later), something like frameserver.vdr. Then start a second instance of VirtualDub and Open frameserver.vdr (or whatever you called it) as if it was a normal video file. Set the frame rate as desired and save. -
Got my retirement plans all set. Looks like I only have to work another 5 years after I die........
-
-
Thanks for the ideas. Increasing framerate to 900 and then converting to 30 gives a result that is much too fast. But the uncompressed intermediate step will work, luckily this is a smaller clip.
-
I see, then maybe Avisynth is a better choice. It's easier and can do it in one shot. Here is a similar example of the Rhino:
Code:DirectShowSource("E:\Video\Rhino.ts") SelectEvery(10) ChangeFPS(24)
Got my retirement plans all set. Looks like I only have to work another 5 years after I die........ -
Yes, it's much easier in AviSynth. The equivalent of what he's doing with two passes of VirtualDub is:
Code:SelectEvery(10) # 30 fps to every 10'th frame at 3 fps, no change in running time AssumeFPS(9) # speed up from 3 fps to 9 fps, plays 3 times faster than the original ChangeFPS(30) # duplicate frames to 30 fps, 3.33 repeats (x3, x3, x4)