Hey there,
I’ve been using ffmpeg to convert videos to 60fps for a while now using minterpolate in ffmpeg which works great (example output).
Unfortunately, it takes an incredibly long time as it appears to only work on a single thread.
I attempted to workaround this issue in the same manner that other people have, by writing a script that would split the source video into chunks, convert the chunks to 60fps versions, and then stitch the chunks back together again into one video file.
Unfortunately, it didn’t take me long to realize that this doesn’t quite work, as one really needs to interpolate the jump between the chunks as well, which is also made more difficult by the fact that if one was converting between 24 and 60fps, the jump between the video segments would essentially become a jump of 2.5 frames, not just 2 (for one additional frame). I created the following diagram to get the point across:
Working At Frames Level
Does anyone know if it’s possible to just run a process to convert the video into its individual frames, and then run the interpolation process on those frames instead? Then I can just stitch the new set of frames back into a new video. I don’t mind if I can only create a video using factors of the original framerate. E.g. if a 24 fps video could only become 48 or 72 fps.
Alternatively, if there is another way to speed up minterpolation command below by somehow unlocking threading, please let me know. Simply adding -threads 12
doesn’t work.
ffmpeg \
-i input.mp4 \
-vf "minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1" \
output.60fps.mp4