下列首字母缩略词在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
甚至不是时间基准,而是时间尺度(倒数)。我根据源代码中的线索猜测了原始的完整单词。
参考
变量名:https://github.com/FFmpeg/FFmpeg/commit/bb3388fd60e55db0b162dc78409ae495cbc6b64f
fps(AVStream.avg_frame_rate):
https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/avformat.h
/** * Average framerate */ AVRational avg_frame_rate;
tbr(AVStream.r_frame_rate):
https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/avformat.h
/** * Real base framerate of the stream. * This is the lowest framerate with which all timestamps can be * represented accurately (it is the least common multiple of all * framerates in the stream). Note, this value is just a guess! * For example, if the time base is 1/90000 and all frames have either * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. */ AVRational r_frame_rate;
tbn(AVStream.time_base):
https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/avformat.h
/** * This is the fundamental unit of time (in seconds) in terms * of which frame timestamps are represented. */ AVRational time_base;
tbc(AVCodecContext.time_base)已被弃用/删除:
https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/avcodec.h
/** * This is the fundamental unit of time (in seconds) in terms * of which frame timestamps are represented. For fixed-fps content, * timebase should be 1/framerate and timestamp increments should be * identically 1. * This often, but not always is the inverse of the frame rate or field rate * for video. 1/time_base is not the average frame rate if the frame rate is not * constant. */ AVRational time_base;
tbc 的弃用提交:
- https://github.com/FFmpeg/FFmpeg/commit/202e06870eb4bbc4636aff5f461c1a0654ec2435
- https://github.com/FFmpeg/FFmpeg/commit/3749eede66c3774799766b1f246afae8a6ffc9bb#diff-a48d0f241f423be450908b536b6adec39606ef72847aeeb500cee81e88a19697
- https://github.com/FFmpeg/FFmpeg/commit/4796ec5d4ea00a86f9f6732653469e682e5266da
- https://github.com/FFmpeg/FFmpeg/commit/2b41463b8706638b9aaf967655f95ddc195c32eb
答案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)。