【问题标题】:ffmpeg - mpeg4 (H.264) timestamps and picture qualityffmpeg - mpeg4 (H.264) 时间戳和图片质量
【发布时间】:2011-01-18 00:04:44
【问题描述】:

我在使用 ffmpeg 库时遇到了重大问题。
首先,时间戳以某种随机顺序到达。
例如,解压缩时,时间戳 8000 在 4000 之前,以此类推。如果我忽略这些时间戳并只播放视频,我可以看到帧确实以随机顺序到达。那么,第一个问题是如何处理呢?这正常吗?我真的不明白这怎么可能。

第二个问题..
图片质量太差了。看起来它需要抗锯齿。 VLC 以正确的帧顺序和更好的图像质量播放相同的剪辑。

我的应用程序中的颜色格式是标准的 YV12(我在解压缩后没有转换它),它是由 Video Mixing Renderer 9 过滤器渲染的。 (我没有使用 ffmpeg 作为 DirectShow 过滤器)。

(ffmpeg 有这么糟糕吗,还是我必须开发一些额外的技能才能获得框架?)

【问题讨论】:

  • 您是在使用 libavformat 和 libavcodec C API,还是从命令行使用 ffmpeg?
  • Jason,我正在使用 libavformat 和 libavcodec API。我不使用 sws_scale()。

标签: video ffmpeg video-processing


【解决方案1】:

我认为时间戳的问题在于,当视频包含 B 帧(双向预测)时,这些帧在比特流中出现的顺序与它们的显示顺序不同。因此,在确定解码帧的 PTS 时必须特别小心。看看this page of a good ffmpeg tutorial,看看他们是如何处理这个问题的。

基本上,您需要存储每个解码帧的第一个数据包的 PTS 值。解码后AVFrame结构中的PTS值无效。

至于质量问题,这可能与时间戳问题有关,也可能无关,但我可以向您保证,问题几乎肯定与 ffmpeg 库本身无关,因为它们被广泛使用,甚至可能被用作解码视频时由 VLC 提供后端。

我会查看the tutorial 并实现与它完全相同的东西,看看您是否可以让它工作,然后修改教程代码以满足您的需求。

【讨论】:

  • Jason,我确实检查了您在此处发布之前提到的两个链接。然而,第一个有点乱,但它说“我们可以对帧进行排序”。我想,我会这样做的。第二个已经很老了,但它仍然可能是 ffmpeg 可用的最佳文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 2017-06-23
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多