Hi!
I was doing some quite in-depth research in my spare time on video capturing over last two weeks. I got fascinated by video editing and all engineering stuff around it. Especially being a software engineer who used to code using DirectX since its first versions. All video recording/editing is new for me so I am experimenting with OBS settings a lot.
I have observed that when recording a video from a 3D application I have no problems to get smooth, 0 dropped frames, 1080p@60 output material. Unless I choose NV12 as Color Format.
As far as I have already learnt, NV12 is designed to be as much compatible with GPU memory layout as possible. Thus resulting with no additional conversions during encoding. It bugs me as I444 and I420 settings are fine (I get 0 dropped frames). When NV12 is set I get like 3% of dropped frames.
Is it normal?
One of my newbie theories is that NV12 is designed mainly for streaming, so dropped frames do not hurt so much as during local recordings. Effectively, leaving GPU some more space to breath or actually render what is being streamed.
I have a log for you with 3 example recording sessions.
Settings are:
I444 and I420 result with:
NV12 results with:
I was doing some quite in-depth research in my spare time on video capturing over last two weeks. I got fascinated by video editing and all engineering stuff around it. Especially being a software engineer who used to code using DirectX since its first versions. All video recording/editing is new for me so I am experimenting with OBS settings a lot.
I have observed that when recording a video from a 3D application I have no problems to get smooth, 0 dropped frames, 1080p@60 output material. Unless I choose NV12 as Color Format.
As far as I have already learnt, NV12 is designed to be as much compatible with GPU memory layout as possible. Thus resulting with no additional conversions during encoding. It bugs me as I444 and I420 settings are fine (I get 0 dropped frames). When NV12 is set I get like 3% of dropped frames.
Is it normal?
One of my newbie theories is that NV12 is designed mainly for streaming, so dropped frames do not hurt so much as during local recordings. Effectively, leaving GPU some more space to breath or actually render what is being streamed.
I have a log for you with 3 example recording sessions.
Settings are:
Code:
[NVENC encoder: 'recording_h264'] settings:
rate_control: CQP
bitrate: 0
cqp: 15
keyint: 250
preset: hq
profile: high
width: 1920
height: 1080
2-pass: true
b-frames: 4
I444 and I420 result with:
Code:
11:53:27.594: Output 'adv_file_output': Total frames output: 7223
11:53:27.594: Output 'adv_file_output': Total drawn frames: 7246
11:55:39.753: Output 'adv_file_output': Total frames output: 7224
11:55:39.753: Output 'adv_file_output': Total drawn frames: 7248
NV12 results with:
Code:
11:51:15.282: Output 'adv_file_output': Total frames output: 7221
11:51:15.282: Output 'adv_file_output': Total drawn frames: 7243
11:51:15.282: Video stopped, number of skipped frames due to encoding lag: 218/7239 (3.0%)