gst-launch-1.0 filesrc location=FPV_2021-0-1_12-37-23.h264 ! h264parse config-interval=-1 ! avdec_h264 ! x264enc bframes=0 key-int-max=25 ! filesink location=wsxtest01.h264中在H264parse之后还有I帧但是最后的文件没有I帧是编码丢的还是解码丢的
时间: 2024-01-10 15:02:51 浏览: 61
根据你提供的信息,我认为可能是编码器丢失了I帧。H264parse元素可以将原始H.264流转换为裸流,并将SPS和PPS元数据分离出来,但是它不会对视频帧进行重新编码或解码,因此它不会导致视频帧丢失。x264enc元素是一个H.264视频编码器,如果它在编码过程中出现问题,可能会导致视频帧丢失。你可以尝试使用其他编码器,例如openh264或者x265,看看是否会出现同样的问题。另外,你还可以检查x264enc元素的属性设置是否正确,例如key-int-max的值是否合适。
相关问题
gst-launch-1.0 filesrc location=FPV_2021-0-1_12-37-23.h264 ! h264parse config-interval=-1 ! avdec_h264 ! x264enc bframes=0 key-int-max=25 ! filesink location=wsxtest01.h264以上管道输出的H264视频没有I帧怎么办
你可以尝试在管道中插入一个 `keyframe` 元素来生成 I 帧。具体来说,你可以使用 `gst-insert-key-unit` 工具,将 `h264parse` 元素输出的 NAL 单元流转换为带有 I 帧的流。修改后的管道应该类似于这样:
```
gst-launch-1.0 filesrc location=FPV_2021-0-1_12-37-23.h264 ! h264parse config-interval=-1 ! avdec_h264 ! x264enc bframes=0 key-int-max=25 ! video/x-h264, stream-format=byte-stream ! gst-insert-key-unit ! filesink location=wsxtest01.h264
```
在这个管道中,我们添加了一个 `video/x-h264, stream-format=byte-stream` 元素来指定输出流格式。然后,我们使用 `gst-insert-key-unit` 元素来插入 I 帧。注意,这个元素需要在转换为字节流后才能使用,因此我们在 `x264enc` 元素后添加了这个元素。
我用这个管道gst-launch-1.0 filesrc location=FPV_2021-0-1_12-37-23.h264 ! h264parse config-interval=2 ! filesink location=wsxtest02.h264发现config-interval设置成多少文件内容都不会变是怎么回事
`config-interval` 参数是 H.264 编码器的一个设置,用于指定在视频流中插入 SPS 和 PPS 的间隔帧数。这个参数只有在编码器设置为产生 H.264 Annex B 格式的视频流时才有效,如果编码器不支持 Annex B 格式,则 `config-interval` 参数将被忽略。
在你的命令行中,你使用了 `h264parse` 元素来将原始的 H.264 视频流转换成 H.264 编码器可以处理的格式,但是你没有指定任何输出格式,因此 `h264parse` 元素将使用默认的输出格式,这可能不是 Annex B 格式。所以,你需要设置 `h264parse` 元素的输出格式为 H.264 Annex B 格式,例如:
```
gst-launch-1.0 filesrc location=FPV_2021-0-1_12-37-23.h264 ! h264parse config-interval=2 ! video/x-h264, stream-format=byte-stream ! filesink location=wsxtest02.h264
```
在这个命令行中,我们通过 `video/x-h264, stream-format=byte-stream` 参数将 `h264parse` 元素的输出格式设置为 H.264 Annex B 格式,这样 `config-interval` 参数才能生效。
阅读全文