[FFmpeg-user] How to change video fps from 29.970 to 25?

Nicholas Robbins nickrobbins at yahoo.com
Fri Aug 29 15:32:33 CEST 2014

On Friday, August 29, 2014 8:41 AM, Damian Głodny <damian at artnmedia.pl> wrote:

>Ok, here it is:
>Sample 29.970 fps file which I want to convert to 25fps:
>Damian Głodny <damian <at> artnmedia.pl> writes:
>> I tried many ffmpeg filters like pullup, telecine, fieldmatch, 
>> decimate, but my output video always stuttering.

Ok, that sample is "30" fps progressive. (I am going to use 30 for 29.97=30000/1001.)  It has 30 complete video frames per second. If you want to reduce it 25 fps 

You have two choices.

1) Play the same frames slower. You can certainly do that. Putting "-r 25" in the input command will do that. (You will need to adjust the audio too.) However, this will result in slow motion. (clip takes 24 seconds after the conversion.) If it is mostly city shots, this might be fine, but the people walking are noticeably slowed.

2) Throw out information. The problem you have here is that you have six frames  ABCDEF when you want five VWXYZ. So if you just chuck one frame F, you will get the judder you don't want. This is what just a "fps=25" filter will do.  If you are ok with interlacing, you could split the frames into fields AaBbCcDdEeFf and then throw out every 6th field, to get AaBbCDdEeF. However when you put these back into frames (if you are displaying on a progressive display, you would get
Aa, Bb, CD, DE, eF, Those last three interlaced frames might be noticeable.  

I've never done this sort of thing, but I think "-vf fps=50,interlace" should do it.

This would change the judder to more smaller jumps but it might not be what you want. It will also make the video interlaced.

3) Magically turn the 6 frames of progressive video into 5 frames of progressive video showing the same scene evenly spaced out. Requires Magic(tm).

-Nick Robbins

More information about the ffmpeg-user mailing list