ffmpeg operations yielding changing fps values I have a video that was rendered as 26.51 fps h.264 into an mkv by my video editor. Calling the file up in ffmpeg it displayed this file as 1k fps, 26.51 tbr.

When I applied an operation to separate a 1 minute segment of this video into its own video I used

ffmpeg -ss 00:00:00 -i input.mkv -to 00:01:00 -c copy output.mkv


Calling the output up in ffmpeg showed this video as 27.4 fps, 26.51 tbr.

I then changed the container of this short 1 minute section in two independent operations:

ffmpeg -i input.mkv output.mkv


Displayed the fps as: 26.51fps, 26.51 tbr

ffmpeg -i input.mkv -c copy output.mkv


Displayed the fps as: 27.4fps, 27.4 tbr

I'm very confused, what exactly is going on here? I wanted all my videos fps to be 26.51fps. What do I go about doing to prevent this from happening in the future? 

"tbr = tbr is guessed from the video stream and is the value users want to see when they look for the video frame rate"

So my understanding from that definition is in the first video I "wanted to see" 26.51fps instead of 1k fps. Which is true. So something *first went wrong at this point that I need to fix?

Then from the second video I wanted to see 26.51fps instead of 27.4fps? Which is true.

Then from the third video my tbr and fps matched at 26.51. Wonderful!

The fourth video the fps and tbr matched at 27.4fps but I didn't want 27.4fps  

And with the -c copy command above I'm guessing it forced the 27.4 fps value onto the video and that's why it became the new tbr and fps values. But this doesn't explain how in the top command where I yielded out my 1 minute partition of the original video, which also used -c copy, that it created a new fps value rather than use the 1k fps value of the original.

Edit: I see you can force the fps with -r 26.51; but this is requiring a re-encode, which I need to avoid. Is there something else I can do at one of the steps? I already rendered it with 26.51 as my fps to begin with afterall.
What the fps and tbr values indicate is the average and peak framerate detected within the file. When the container doesn't have valid metadata, either or both of these values can be wrong.

A tbr like 26.51 indicates a variable frame-rate file. After you extracted a segment with -c copy, ffmpeg will display the rates detected in the new clip. Since the source is VFR, the rate may not match but the individual frame timings won't have changed, and can't, since no frame operations can occur*.

When you transcoded instead, ffmpeg sets the output rate to the detected tbr and drops frames in regions with a greater framerate. (When saving to a constant rate muxer like MP4, it will clone frames if input rate is lower). 

*true within this context