为什么 ffmpeg 和 ffprobe 中的总帧数不同?

为什么 ffmpeg 和 ffprobe 中的总帧数不同?

我想要视频的总帧数,以便使用以下 ffprobe 命令:

ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=noprint_wrappers=1 100P.mp4

我得到下面的输出

ffprobe 的输出

在上面的输出中我得到559 frames

然后我使用相同的视频在其上添加水印并使用以下命令:

ffmpeg -i 100P.mp4 -i mt.png -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -codec:a copy -preset ultrafast output.mp4

我得到如下输出:

ffmpeg 的输出

在上图中,添加水印后我得到605 frames

所以我的问题是为什么我在 ffmpeg 和 ffprobe 中获得不同的帧数?

答案1

FFmpeg 默认为 MP4 输出设置恒定帧速率模式。当输入流为 VFR 时,ffmpeg 将复制或丢弃帧以生成 CFR 流。在输出统计信息中,在 的右侧frame=605,您可以看到dup=46,这表明 ffmpeg 添加了 46 个重复帧。简而言之,当两个输入帧之间的间隔大于1/FPS秒时就会发生这种情况,其中 FPS 表示输出帧速率。如果用户未明确设置,则输出帧速率设置为检测到的输入帧速率(值tbr)。

添加-vsync vfr以防止帧重复。

相关内容