Change speed and FPS without manipulating frames

Hi,
first of all, nice piece of equipment! A big thank you to the community!

What I have:

  • H.264 videos, no audio
  • 30 fps (by mistake!)

A hardware scanner encoded single frames/images from old-school real film rolls (Super8) into a 30fps video. The problem is, that the film was originally shot at 18fps. So naturally, it plays 1.67 times too fast. Of course I could set playback speed to 0.6 while keeping the video at 30fps but is that the “right” way to fix this issue? From what I understood, I currently have 100% of all the original frames of the film and ideally I don’t want to mess around with them.

What I want is converting the videos to real 18fps playing at the right speed without creating/dropping frames. How should I do that the right way? Thanks in advance!

1 Like

If you want the final output file to have no duplicate/repeated frames, then you will have to create a file with a frame rate of 18fps. This is possible, but uncommon. So you will have to use custom settings. Here is my suggested process:

  1. Create a custom video mode (Settings->Video Mode->Custome->Add…) Make sure the “Frames/sec” field is set to 18.

  2. Set the video mode to your new custom mode.

  3. Open the file you want to convert.

  4. In the Properties panel, set the speed to 0.6x.

  5. Encode the project - make sure the “Frames/sec” field is set to 18.000.

If you follow these steps, the resulting file will play back at the proper speed and there will be no duplicated frames.

1 Like

Brian,
thanks for the immediate response. Your recommendation worked very well for me. I had not seen the video mode and the logic behind that.

On a different note; one thing I discovered during encoding. All the videos required stabilization. The filter however seems to be incompatible with (pretty much all) other changes to the footage. Only when I limited changes exclusively to that filter the output was indeed stabilized. The other filters (crop, saturation, color adjust and the fps thing) worked together in a second round. Not a big thing for me, but I thought you might want to know. I ran it on a 2017 Macbook, i7, 16 GB RAM, SSD on macOS 10.13 and Shotcut 18.01.02.

thanks again
degudejung

Thanks for your report. If you have the time, I could use a little more information to reproduce your problem. When you say “incompatible”, does that mean the analyze step failed? Or it stabilized in the preview window, but not in the encoded output? Any other details that can help me reproduce it?

Yes, in preview it does analyze and stabilize and I can successfully adjust zoom and smoothness to the level I need. When I encode to the export file (mp4/h264 in my case) however, the output file will always be un-stabilized and un-zoomed. That is, unless I do not change FPS (in the export window) nor add any other filter. Using the stabilized/zoomed-in output file as my new input (for round 2) works fine and then I can add and combine other filters, too.

Also, the stabilization filter is not available when activating “GPU processing”.

If there’s a log file I should send you, just let me know.

Thanks for the information. It is a known limitation that the stabilization filter is not compatible with “GPU Processing” mode. We don’t have any plans to fix that anytime soon.

If you are able, please perform the following test for me sometime:

  1. Create a new project and select a video mode that matches the parameters you want on the output. For example, if you want 1080p30fps, choose that from the list of video modes. Do not use “Auto” mode.

  2. And a clip with the stabilize filter and the other filters that you aspire to use.

  3. Export the clip, and make sure the export parameters match the video mode parameters (frame rate, especially).

Let me know if the stabilize filter works properly when the export frame rate matches the video mode frame rate.

Sure. Just did that:

  • Input: iPhone SE video .mov, 1080p, 29.97 fps, shaky on purpose
  • Shotcut standard video mode HD 1080p 29.97 fps
  • filters successfully applied in preview: stabilize and color grading
  • Output: h.264, mp4, 1080p, 29.97 fps via export feature -> neither filter applied to final file

Also, what I encountered when switching the language to EN: I saved the project hoping that re-opening it would present me the video with the filters I already applied before closing Shotcut. But both filters are gone after opening the .mlt file.

Both are not big things for me and easy to work around. Anyways, if I can help you finding the bug, let me know.

So far I haven’t been able to reproduce the encoding problem. It could be a language issue. What language do you use when you observe the problem?

I’m not sure, but I think that switching languages between sessions with the same project file is not supported. Some languages expect “.” while others expect “,”.

Sorry for the tardy response.

I always used German and normally did not switch language when operating - did that just for your test.

Hello, I cut in the discussion. I have something similar: I have multiple clips in different FPSs, from 23.976 to 50 and I’d like to export an edited video of them at 24. I’d like to know if is better using the method you suggested to create a custom video mode at 24 and export to 24, or converting all files to 24 before edit all them together. Thanks in advance.

@mikros This post is specifically about changing the playback speed of clips. If your clips are all at the correct speed, but they just have different frame rates, the process is much simpler.

  1. Choose the desired video mode. There are some “stock” video modes with 24FPS, or make your own custom mode.

  2. Import files and edit them as usual. Shotcut will automatically adapt the frame rate for you.

There is no need to convert the frame rates in an intermediate step.

Ok, thanks a lot!

You can use Shotcut, but if you have over 8 hours raw film it takes to long. I created a much quicker and easier way. The quickest way is to create a BAT-file in the directory with the following rows:

@ECHO OFF

for %%f in (*.mp4) do (
echo “fullname: %%f”
del temp.mkv
mkvmerge --default-duration 0:18fps --fix-bitstream-timing-information 0 %%f -o temp.mkv
del %%f
ffmpeg -i temp.mkv -c:v copy %%f
del temp.mkv
)

You need to have mkvmerge and ffmpeg in the same directory. It changes every mp4-file in seconds automatically with no loss of quality.

1 Like

That is cool and all, but most people do not have those tools, this forum is about Shotcut, and this is an old, solved thread. So, closing it.