为什么帧速率加倍会产生不一致的帧?

时间:2018-04-22 05:48:49

标签: ffmpeg video-processing

所以我有一个恒定的59.94 fps (i.e. 60000/1001)视频,当我尝试提取一秒时:

ffmpeg -y -i input60fps.avi -ss 0 -t 1 -c:v huffyuv -an output60fps.avi
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 ./output60fps.avi

它返回1.001秒,我现在理解这是合适的,因为它是视频的最短帧时间(60000/1001 seconds)的倍数。

在以前从29.97 fps来源转换的59.94 fps视频上重复此实验,我预计会有类似的结果,但我发现事实并非如此:

ffmpeg -i input30fps.avi -vcodec huffyuv -r 60000/1001 -an output60fps.avi
ffmpeg -i ./output60fps.avi -ss 0 -t 1 -c:v huffyuv -an test.avi
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 ./test.avi

这实际上导致0.984317秒。

为什么这种行为有所不同?有没有办法让我控制总帧的均匀分布方式,使每个边界每60000/1001毫秒出现一次?我的期望是,由于我只是将帧速率加倍,我应该期望每1001/60000秒一帧。

1 个答案:

答案 0 :(得分:1)

AVI是一种可变帧速率复用器。除了-r之外,还需要启用恒定帧速率

ffmpeg -i input30fps.avi -vcodec huffyuv -r 60000/1001 -vsync cfr -an output60fps.avi