cdgriffith / FastFlix

FastFlix is a free GUI for H.264, HEVC and AV1 hardware and software encoding!
https://fastflix.org/
MIT License
1.14k stars 58 forks source link

Check_pts problem #297

Open WildEgoLee opened 2 years ago

WildEgoLee commented 2 years ago

Hello,First thank you for contributing to this GUI。 Recently,when I processed some video,it tried to check_pts.But when this work was done,I play the processed video,it played Caton in the first few seconds and even stayed on that frame. Wish you can give me some advice.

cdgriffith commented 2 years ago

I don't know what you mean by check_pts can you elaborate or state it differently? Thanks!

WildEgoLee commented 2 years ago

like this:

2022-01-19 20:07:20,032 - check_pts(3): timestamp of video frame is smaller than previous frame, changing pts: 400 -> 1250 (previous pts 1200).
2022-01-19 20:07:20,039 - check_pts(6): timestamp of video frame is smaller than previous frame, changing pts: 1600 -> 2450 (previous pts 2400).
2022-01-19 20:07:20,044 - check_pts(9): timestamp of video frame is smaller than previous frame, changing pts: 2800 -> 3650 (previous pts 3600).
2022-01-19 20:07:20,055 - check_pts(12): timestamp of video frame is smaller than previous frame, changing pts: 4000 -> 4850 (previous pts 4800).
2022-01-19 20:07:20,062 - check_pts(15): timestamp of video frame is smaller than previous frame, changing pts: 5200 -> 6050 (previous pts 6000).
2022-01-19 20:07:20,071 - check_pts(18): timestamp of video frame is smaller than previous frame, changing pts: 6400 -> 7250 (previous pts 7200).
2022-01-19 20:07:20,078 - check_pts(21): timestamp of video frame is smaller than previous frame, changing pts: 7600 -> 8450 (previous pts 8400).
2022-01-19 20:07:20,087 - check_pts(24): timestamp of video frame is smaller than previous frame, changing pts: 8800 -> 9650 (previous pts 9600).

Its mean seems to change my video's timestamp, making my video Caton

cdgriffith commented 2 years ago

I've never seen that before, and had to search around to find even where that exists in the code. Looks to be in the NVEncC encoder https://github.com/rigaya/NVEnc/blob/master/NVEncCore/NVEncCore.cpp#L3904

I was currently setting avsync to cfr if the frame rate == average frame rate (aka detects it as a cfr video, otherwise sets it as vfr. to default of cfr that their documents recommends, however looks like need to allow it to be specified, and in this case detect if the source is vfr and select that for output as well.

You could test it out locally as well to see if that fixes it would help. Go to "Raw Commands" tab and hit "Copy Commands" button.

Then paste those into a text editor like notepad. change --avsync cfr to --avsync vfr (if that doesn't work can try --avsync forcecfr , documentation for it ) and copy / paste that modified command into a command prompt and run it.

WildEgoLee commented 2 years ago

Thanks,when I added a order--avsync forcecfr,my error of Canton missed. Due to my carelessness of describing my problem in detail,causing your long time work ,I'm sorry for that.