为什么在带有 libx265 的 FFmpeg 中时间戳 tbn 参数始终为 1k,即使这看起来不合逻辑?

为什么在带有 libx265 的 FFmpeg 中时间戳 tbn 参数始终为 1k,即使这看起来不合逻辑?

我使用 ffmpeg 进行编码,并注意到当我使用 libx265 将 29,97 FPS 的 y4m 视频编码为 h265 视频时,这两个视频的参数如下:

原始 y4m:

29.97 fps, tbc : 29.97 tbr 29.97 **tbn : 29.97**

H265转换后的文件:

29.97 fps, tbc : 29.97 tbr 29.97 **tbn : 1k**

当我尝试将这两个视频与 VMAF 或 SSIM 等指标进行比较时,我注意到了这个问题,它说在一种情况下时间戳是 30000/1001,在另一种情况下则是另一种情况,并且度量结果显然是错误的。

当我使用 SSIM 拨打电话时收到的确切消息是: “第一个输入 100/2997 和第二个输入 1001/30000 之间发现时间基准不匹配,结果可能不正确!”

其中第一个输入是 H265,第二个输入是 y4m。

据我所知,tbn 表示编解码器放置图像所使用的内部时间间隔,它应该是一个有助于轻松获得 FPS 的数字,但我看不出 1k 如何有助于以精确的 29.97FPS(30000/1001)放置图像。或者我错过了什么?在网上,似乎经典数字或多或少是 90k 之类的东西,这似乎更合乎逻辑。


我的主要问题是:这是,这是一个带有默认参数的简单转换,为什么在这种情况下使用这个默认参数?

附属问题:

  • 我猜想在转换过程中可以强制将 tbn 转换为另一个因素,但是这是否无成本,或者是否会对压缩视频的质量或大小产生影响?

  • 为什么在 y4m 中,tbn 只是 FPS (29,97),这是什么意思?

答案1

好的,经过一番挖掘,我找到了答案的一个要素。这里最重要的是我将文件转换为 MKV 作为容器!

并且在网上的一些评论中我了解到 MKV 似乎有一个固定为 1k 的时间基数,这就是全部......

我不明白为什么会这样,而且在实际规格中也没有看到。如果有人有更多信息...

在所有情况下,ffmpeg 似乎都尊重这一惯例,并且在他们的代码中有一条评论说(“1k 是 mkv 的事实上的惯例”...

相关内容