为什么从视频中提取一秒至少不会导致帧时间的倍数?

Why doesn't extracting one second from a video at least result in a multiple of the frame time?

试图更好地理解为什么我无法以准确的时间从影片剪辑中提取片段,即使我考虑了剪辑的帧速率也是如此。

例如,如果我 运行 在 29.97 fps 视频剪辑上执行以下命令以尝试提取 1 秒的视频:

ffmpeg -i input.avi -ss 0 -t 1 -c:v huffyuv -an output.avi

持续时间为 1.001 秒。

现在,如果结果实际上是 0.02997 秒的倍数,这对我来说更有意义 (29.97 fps / 1000 ms) 但是通过计算来检查倍数 (0.02997, 0.05994, ..., 0.98901, 1.01898, 1.04895),我发现最接近的倍数实际上是为 1.01898 或 1.04895

我在这里错过了什么?

确切的帧率不是 29.97,而是 30000/1001。因此每一帧的持续时间为 1001/30000 秒,因此以该速率播放 30 帧会占用 1001*30/30000 = 1.001 秒。