Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 为什么容器和编解码器有不同的时基?_Video_Ffmpeg_Pts - Fatal编程技术网

Video 为什么容器和编解码器有不同的时基?

Video 为什么容器和编解码器有不同的时基?,video,ffmpeg,pts,Video,Ffmpeg,Pts,我使用ffmpeg获取视频信息。输出是 Duration: 00:05:57.00, start: 0.000000, bitrate: 611 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 808x610, 609 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc 时基是用来计算何时解码并显示帧的(这也是我的另一个问题),对吗?那么使用哪种时基,容器(12800

我使用ffmpeg获取视频信息。输出是

  Duration: 00:05:57.00, start: 0.000000, bitrate: 611 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 808x610, 609 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc
时基是用来计算何时解码并显示帧的(这也是我的另一个问题),对吗?那么使用哪种时基,容器(12800)还是编解码器(50)


另一个问题是为什么tbn=12800而不是90000?

两者都是正确的,都是不同的

tbn是编码器创建流的功能。因此,对于10fps的流,它可以是90000,这意味着每秒90000个滴答声,每帧9000个滴答声。它也可以是10,这意味着每帧1个滴答声(对于相同的10fps流)。 90000通常用于流媒体级别(想到ts流媒体),但编码器不受此限制。这(tbn)是解码器将使用的,而不是使用容器数据的应用程序系统


如果您有一个容器,那么应该使用容器时基和时间戳,因为它在容器中的所有流中都是标准化的。您将仅在编解码器内使用tbn等参数。

什么是“每帧滴答数”?编解码器将使用它来做什么?编解码器使用它来了解帧之间的时间间隔。在某些编解码器中,它用于运动矢量缩放。如果您不是在编解码器中工作,那么您需要知道的是,这是一种跟踪每秒帧数的简单方法。因此,要达到29.97 fps,一秒钟被认为有30000个滴答声,帧之间相隔1001个滴答声。滴答声是虚构的。因此,每帧的时间戳将每帧增加1001。如果您不是在编解码器中工作,那么您不必真正担心这一点。使用系统的容器数据。编解码器和容器时基必须一致-容器时间刻度必须等于或大于编解码器时间刻度,并且容器时间刻度必须完全可按编解码器时间刻度划分,对吗?