`ffmpeg` 中的 fps、tbr、tbn、tbc 是什么?

`ffmpeg` 中的 fps、tbr、tbn、tbc 是什么?

下列首字母缩略词在ffmpeg和中是什么意思ffprobe

>ffprobe -hide_banner logo.gif
Input #0, gif, from 'logo.gif':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: gif, bgra, 320x314, 33.33 fps, 33.33 tbr, 100 tbn, 100 tbc

我猜想 fps 是每秒帧数,但我不知道其他的是什么。文档没有帮助。tbr未找到。https://www.ffmpeg.org/ffmpeg.html

tbr发现https://www.ffmpeg.org/ffmpeg-all.html,但毫无意义

‘TBR’
top back right

常见问题解答也没什么帮助。https://www.ffmpeg.org/faq.html

就像网络搜索一样https://duckduckgo.com/?q=ffmpeg+fps%2C+tbr%2C+tbn%2C+tbc&ia=web

答案1

缩写 满的 多变的 解释
每秒帧数 每秒帧数 AVStream.avg_frame_rate 平均帧率 = 总帧数/总秒数。可变帧率视频的 fps 可能为 57.16
待定 时间基准,真实(?) AVStream.r_frame_rate 用户友好,目标帧速率。上面相同的可变帧速率视频的 tbr 可以是 60。
总氮 时基数(?) AVStream.time_base 时间刻度(每秒刻度)。此数字可以是 90000、15360 等。它用于根据 PTS 计算实际时间(显示时间戳)。如果时间刻度为 90000,而某一帧的 PTS 为 45000,则该帧的显示时间为 0.5 秒。

(注意:此缩写和变量名称用词不当,因为它实际上是时间刻度,而不是时间基准。时间基准应该是倒数,例如 1/90000、1/15360 等。)
待定 时间基,编解码器(?) AVCodecContext.time_base 编解码器时间标度。与 tbn 相同,但针对编解码器。该标度已被弃用并删除。

源代码中没有提到解释 tbr、tbn、tbc 的完整单词。我猜 tbr、tbn、tbc 原本是有意义的,但原来的名称不再适用,现在可能用词不当。例如,tbn甚至不是时间基准,而是时间尺度(倒数)。我根据源代码中的线索猜测了原始的完整单词。


参考

答案2

对于 mp4/mov 文件,“tbn”是 mdhd-box 中标示的时间标度值。每个基本流在 mp4 容器中都有自己的轨道,因此也有自己的 mdhd-box 和自己的时间标度。“tbn”与帧速率或帧持续时间无关。它只是时间标度。

对于传输流(扩展名为“ts”或“m2ts”),“tbn”始终为 90kHz,这是 ISO/IEC 13818-1 的时间尺度。与 mp4 容器不同,ts 容器具有固定的时间尺度(PTS/DTS 为 90kHZ,PCR 为 27MHz)。

相关内容