【问题标题】:Invalid key_frame(I) and P- frame sequence in h264 Binary streamh264 二进制流中的 key_frame(I) 和 P 帧序列无效
【发布时间】:2019-04-08 08:34:56
【问题描述】:

我正在从 USB 网络摄像头获取视频并将其编码为 h.264 原始流,如下所示...

ffmpeg.exe -f dshow -rtbufsize 200M -i video="Logitech HD Webcam C270" -vcodec libx264 -preset ultrafast -tune zerolatency -g 30 -s 480x640 -buf 大小:v 50M output.h264

我期望 output.h264 流中有 1 关键帧和 29-P 帧(带 SPS/PPS)。但我没有得到预期的结果。但是视频播放正常。

我尝试使用 ffprob 获取同一文件的元数据 ..

ffprobe -show_frames videofilename.h264 > outputlogfile.txt

在这里我可以看到正确的序列 1-Key 帧和 29-P 帧。但是如果我们在二进制阅读器中打开 h264 文件(我使用的是 HDX)我可以看到 Key/P 帧的顺序不正确。

您可以从以下链接下载 h264 示例和 ffprob 日志。

https://www.dropbox.com/s/3ghpkqdc36wdgxr/TimerSample.h264?dl=0 https://www.dropbox.com/s/gdn64004o0udrfk/TimerSample.txt?dl=0

你可以从 here (filtered by start code)找到同一个文件的二进制序列

请让我知道我是否缺少某些过滤器。谢谢。

【问题讨论】:

  • 你看到了什么序列?
  • 请添加 ouput.h264、videofilename.h264 和 outputlogfile.txt。否则我们将猜测或寻找我们的“罗技高清网络摄像头 C270”相机 - 谢谢。
  • @MarkusSchumann 我已经添加了问题的链接。谢谢
  • @Gyan 我已将序列屏幕截图附加到问题中。谢谢

标签: ffmpeg video-streaming h.264 keyframe


【解决方案1】:

屏幕截图中突出显示的元素显示比特流以 SPS 单元开始,然后是 PPS 单元,然后是 SEI 单元,然后是 IDR 图片切片,然后是非参考图片切片。这是正常的,也是意料之中的。

使用

ffmpeg -i videofilename.h264 -c copy -bsf:v trace_headers -f null -

查看比特流解析的文本转储。

【讨论】:

  • “IDR 图片切片,然后是非参考图片切片”。但我只期待一个 I 帧(不是 IDR)和 29 个 P 帧。谢谢。 @Gyan
  • 为什么编码的比特流不以 IDR 开头?
  • 是的,你是对的。它应该开始,但我的问题不是 IDR(这是一组 I 帧)我只需要一个 I 帧,然后是 29 个 P 帧 ...@Gyan
  • IDR 不是 I 帧的 。 IDR(即时解码刷新)仅表示一个 I 帧,它告诉解码器丢弃存储在其缓冲区中的所有早期参考帧。您正在观察的是每个帧都被分割成切片并单独编码。如果您希望将每一帧编码为一个切片,请将-thread_type frame 添加到您的命令中。
  • 我认为这是我的错。我想念理解的 IDR 概念,因为我是这个领域的新手。“-thread_type 框架”为我提供了预期的结果,谢谢。真的很感谢你的努力.. @Gyan
猜你喜欢
  • 2018-08-30
  • 2021-08-24
  • 1970-01-01
  • 2018-10-25
  • 2017-09-10
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 2012-07-05
相关资源
最近更新 更多