Recording not working on lower fps settings on new pc & monitor

oguru

New Member
Hi

I had OBS set up on my old PC to record at 0.5fps for a timelapse. I copied the settings profile over to the new PC and when I record it creates a file (mkv) that is always around 730 bytes large and obviously doesn't play. If i put the framerate up I sometimes get the expected video output - this starts happening at around 12-15fps. If i put it higher still it looks like it works every time.
I also have a new monitor that I didn't test on the old PC that is 32:9, but it appears as though framerate is what is breaking it because i can split the monitor into 2 screens so it is the same resolution of my old monitor (2560x1440). I tried the Geforce 1080 from my old pc and the onboard UHD 770 graphics and the same thing happens for both.
Not sure if it matters but i'm also using Advanced Scene Switcher.

I've attached a log file of me messing around with some settings - when it doesn't work, "Total frames output" is equal to 1.

Can anyone please help? It's for recording creation of a wedding proposal so really important I can get it working again.

Thanks
 

Attachments

  • 2022-12-27 21-14-23.txt
    18.7 KB · Views: 17

oguru

New Member
Looks like it works if I leave it for long enough (for a file to appear in explorer without stopping the recording), just so i'm sure though is this the normal behaviour? I left it at 0.5fps and it took over a minute for a file to appear, shouldn't it happen after 1 frame has been saved or does it only start saving after a certain number of frames have passed?
 

koala

Active Member
The encoder needs a minimum amount of frames to start and operate. It is as if it is operating on a batch of frames and can only process all of them or none. If you press "stop recording" and it's in the "stopping" state, the encoder is waiting for the rest of the frames missing for the current batch. If you press "stopping" again to cancel encoding, the last batch is lost. If you wait, the last batch is written to the file. If a lost batch was the first batch, you get no frames at all in your video file.

If you set the keyframe interval to 1s, the batch will be that short. In my tests, I was able to get a 0.5 fps video of 2 seconds when I immediately clicked "stop recording" after starting it and waiting until the "stopping" went away. It was "stopping" for about 20-30 seconds.
The file is created when the encoder outputs the first complete batch of frames, so you will not see it immediately.

I recommend a fps not lower than 1 for timelapses, then remove any excess frames with the postprocessing tool that actually creates the timelapse. 1 fps is 60 times smaller than a regular video, so it's vastly smaller, but still detailed enough to vary the timelapsed fps in case the intended interval turns out too long. 1 fps also makes OBS not so sluggish to react, so it's much less tedious to operate.

And use a quality based rate control such as CRF or CQP or ICQ, not CBR. CBR always fills the video file to the given bitrate and wastes disk space, if the frame rate is so low that a much lower bitrate is valid. CRF (for x264) or CQP (for nvenc) or ICQ (for Quicksync) uses the bitrate required to encode the requested qualtiy. The quality is given with the corresponding quality parameter. Usually the lower this number, the higher the quality. Values between 15-20 are usually "indistinguishable" from the raw source.
 

oguru

New Member
The encoder needs a minimum amount of frames to start and operate. It is as if it is operating on a batch of frames and can only process all of them or none. If you press "stop recording" and it's in the "stopping" state, the encoder is waiting for the rest of the frames missing for the current batch. If you press "stopping" again to cancel encoding, the last batch is lost. If you wait, the last batch is written to the file. If a lost batch was the first batch, you get no frames at all in your video file.

If you set the keyframe interval to 1s, the batch will be that short. In my tests, I was able to get a 0.5 fps video of 2 seconds when I immediately clicked "stop recording" after starting it and waiting until the "stopping" went away. It was "stopping" for about 20-30 seconds.
The file is created when the encoder outputs the first complete batch of frames, so you will not see it immediately.

I recommend a fps not lower than 1 for timelapses, then remove any excess frames with the postprocessing tool that actually creates the timelapse. 1 fps is 60 times smaller than a regular video, so it's vastly smaller, but still detailed enough to vary the timelapsed fps in case the intended interval turns out too long. 1 fps also makes OBS not so sluggish to react, so it's much less tedious to operate.

And use a quality based rate control such as CRF or CQP or ICQ, not CBR. CBR always fills the video file to the given bitrate and wastes disk space, if the frame rate is so low that a much lower bitrate is valid. CRF (for x264) or CQP (for nvenc) or ICQ (for Quicksync) uses the bitrate required to encode the requested qualtiy. The quality is given with the corresponding quality parameter. Usually the lower this number, the higher the quality. Values between 15-20 are usually "indistinguishable" from the raw source.
Awesome, thanks! Good to know about the rate control, i didn't look into that at all.

I think the problem i'm having is possibly due to advanced scene switcher or how that works. If i manually stop and start recording it works as expected, otherwise it's as i described, which shouldn't be a problem because a single video that is less than a minute at 0.5fps would only last for up to half a second if i'm not mistaken, and so wouldn't really even be worth including.

I wanted to set the frame rate even lower but it's already so slow at 0.5fps. You're right though, better to set higher as i'm processing in Avidemux after anyway.

Would you recommend any of those encoders over the others? I just followed a video before that said to use mkv in case obs crashes or something so the video is still ok.
 

koala

Active Member
As long as you use a quality based rate control like I mentioned, you can use any encoder at this low fps. You have Quicksync with your iGPU, so use Quicksync. That's no CPU load. The encoder is independend from the container format (mkv). Keep mkv, since it is robust against unintended interruption.
 
Top