为什么 ffprobe 上的帧数不同?

为什么 ffprobe 上的帧数不同?

问题

我使用 ffmpeg。为什么 A_COMAND 和 B_COMAND 之间的帧数不同?

样本

驾驶室管理:

$ ffmpeg -i ./for_sample.gif -vf mpdecimate,setpts=N/FRAME_RATE/TB ./tmp/%1d.png

解压后可以看到文件夹里的 80 帧

命令:

$ ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 ./for_sample.gif
[gif @ 0x7fbb87020a00] Invalid image height.
    Last message repeated 2 times
[gif @ 0x7fbb87020a00] Invalid image width.
85  Last message repeated 54 times

输出时可以看到 85 帧

实际上,这个 gif 样本的帧数为 143。但我希望输出时不带重复,这样我才能看到它的数量不会是 143。

版本

ffmpeg 版本 4.0.2 版权所有 (c) 2000-2018 FFmpeg 开发人员使用 Apple LLVM 版本 9.1.0(clang-902.0.39.2)构建

macOS High Sierra 10.13.6

谢谢。

答案1

输入确实有 143 帧,但 58 帧的数据包头中含有无效元数据,因此解码器会丢弃这些帧。剩下 85 帧。这些帧也含有无效元数据,但对解码操作来说并不致命。

如果你运行ffmpeg -i in.gif -f null -,你会在日志中看到类似的错误

[gif @ 00000000006af400] Invalid top position: 286.
Error while decoding stream #0:0: Invalid data found when processing input
[gif @ 00000000006af400] Invalid top position: 208.
Error while decoding stream #0:0: Invalid data found when processing input
...

非致命错误如下

[gif @ 00000000006af400] Image too wide by 116, truncating.
[gif @ 00000000006af400] Image too high by 131, truncating.

相关内容