This is an interesting topic, I think I found what is going on.
I think the “problem” is that MCEbuddy is choosing Handbrake as the encoding program and the way MCEbuddy passes your framerate (the one you specify in the GUI) into Handbrake is by adding the commandline parameter -r 59.94
The usage of the -r parameter defaults to setting peak framerate, so its telling handbrake to pick a framerate no higher than (59.94) instead of forcing it. It seems like it picks one in the 29.xx range with this…
I think there are a few ways to get around this, then:
- don’t use handbrake (bad option)
- use a default profile where ffmpeg priority is higher than handbrake (bad option)
- tack -cfr to the end of handbrake-general in your profile (best option)
ie for option3, in profiles.conf the profile [mp4 normal]:
handbrake-general=--decomb --loose-anamorphic --verbose=2 -f mp4 -O
becomes
handbrake-general=--decomb --loose-anamorphic --verbose=2 -f mp4 -O --cfr
You can quickly test that this is the problem by using a profile where ffmpeg is higher priority. Use the [DivX AVI Normal] profile with 59.54 set in the gui, it uses ffmpeg.
Here are my results from that:
Video
ID : 1
Format : xvid
Codec ID : xvid
Duration : 26 s 994 ms
Bit rate : 1 826 kb/s
Width : 1 920 pixels
Height : 1 072 pixels
Display aspect ratio : 16:9
Frame rate : 59.940 (60000/1001) FPS
Scan type : Progressive
Bits/(Pixel*Frame) : 0.015
Stream size : 5.87 MiB (87%)
For the explanation, this is taken directly from the handbrakecli documentation:
-r, --rate <float> Set video framerate
(5/10/12/15/20/23.976/24/25/29.97/
30/48/50/59.94/60/72/75/90/100/120
or a number between 1 and 1000).
Be aware that not specifying a framerate lets
HandBrake preserve a source's time stamps,
potentially creating variable framerate video
--vfr, --cfr, --pfr Select variable, constant or peak-limited
frame rate control. VFR preserves the source
timing. CFR makes the output constant rate at
the rate given by the -r flag (or the source's
average rate if no -r is given). PFR doesn't
allow the rate to go over the rate specified
with the -r flag but won't change the source
timing if it's below that rate.
If none of these flags are given, the default
is --pfr when -r is given and --vfr otherwise
Finally, I’m not exactly sure that doubleing the framerate is what you want. If a video is deinterlaced to 30fps, you don’t do anything by then doubling that to 60, which may be what setting the framerate is doing. Not extactly sure but I think you want to double framerate and modify deinterlacer settings.
Here is what I think based off my limited understanding, and I’m not sure how plex does it, decomb does it, and how yadif differs:
Example
60i fps, frames over 3seconds of video:
ABCDEFGH
30p fps, frames over 3seconds of video:
ACEG
60p fps, frames over 3seconds of video, after doubling the framerate by setting
-r 59.94 -cfr :
AACCEEGG
In the above, 30p and 60p should look the same to a human, right? The “framerate” doubled but the frames are the same so no difference visually?
Really what you want is
60i fps, frames over 3seconds of video:
ABCDEFGH
60p fps, frames over 3seconds of video:
ABCDEFGH
And in order to get this desired effect I think you need to modify your deinterlace settings.
See this: https://avisynth.org.ru/yadif/yadif.html
These are the settings in MCEbuddy for yadif, which do not change ever:
yadif=0:-1:1
MCEbuddy Handbrake on the other hand uses
--decomb (default decomb settings / no preset)
From the docs:
--decomb[=string] Deinterlace video using a combination of yadif,
blend, cubic, or EEDI2 interpolation.
Presets:
bob
eedi2
eedi2bob
You can see why decomb is good, it first calculates if it even needs to deinterlace (it keeps the frames if there is no combing and if it does need to deinterlace, uses a mixture of deinterlacing methods (which it calculates which one would be best to use at that time in the video).
So, I’m sure that decomb would benefit in its default state by doubling the framerate, but I’m not sure if the actual benefit you’re looking for requires
--decomb=bob
instead? And setting this would require a custom profile and might be affected in MCEbuddy by changing auto int detect.
A good test would be to do force framerate in handbrake GUI using decomb default and decomb BOB, let me know if you can tell a difference