我有一个大文件,是 CCTV 的 h264 流视频。我用 ffprobe 分析了这个文件,结果是这样的:
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] non-existing PPS 0 referenced Last message repeated 1 times
[h264 @ 0000000002d24480] decode_slice_header error
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] non-existing PPS 0 referenced Last message repeated 1 times
[h264 @ 0000000002d24480] decode_slice_header error
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] non-existing PPS 0 referenced Last message repeated 1 times
[h264 @ 0000000002d24480] decode_slice_header error
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] non-existing PPS 0 referenced Last message repeated 1 times
[h264 @ 0000000002d24480] decode_slice_header error
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] concealing 890 DC, 890 AC, 890 MV errors in I frame
[h264 @ 0000000002d24480] sps_id 1 out of range
Input #0, h264, from 'E:\example_1':
Duration: N/A, bitrate: N/A Stream #0:0: Video: h264 (Main), yuv420p, 704x576, 25 fps, 25 tbr, 1200k tbn, 50 tbc
我有两个小问题:
- 我能否知道文件是否存在于特定日期(例如,2014 年 1 月 1 日)?我可以分析 h264 的元数据流吗?
- 在流视频中,不同摄像机的图像循环播放。我可以根据摄像机分割流视频吗?可以吗?如果可以的话,我还想将单独的摄像机剪辑合并为一个摄像机视频。
谢谢
答案1
我能否知道文件是否存在于特定日期(例如,2014 年 1 月 1 日)?我可以分析 h264 的元数据流吗?
不是,因为该流只是一个 H.264 比特流,(简单地说)一帧接一帧。
它不包含任何元数据。当您需要元数据时,您需要一个容器,例如通常用于流媒体的 MPEG-2 传输流或 MP4 文件。
流媒体视频中,不同摄像头的图像循环播放。我可以根据摄像头分割流媒体视频吗?可以吗?
显然,该流使用专有格式。ffmpeg 无法解码这种多摄像头视频。通常,H.264 Annex B 比特流仅包含属于同一序列的帧。
你必须编写一个 H.264 解析器(或者从类似h264bitstream
) 并将比特流中的 NAL 单元分割为单独的比特流,每个摄像机一个。
然后,为了解码它,你的比特流需要包含SPS 和 PPS NAL 单元。在您的流中,没有,这就是错误告诉您的,因为框架引用了从未声明的 SPS/PPS。