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帧怎么办
时间: 2024-01-10 13:03:00 浏览: 143
你可以尝试在管道中插入一个 `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` 参数才能生效。
gst-launch-1.0 filesrc location=~/Downloads/FPV_2021-0-1_12-37-23.h264 ! h264parse config-interval=-1 ! avdec_h264 ! x264enc ! filesink location=test0612.h264如上管道为什么播放不了文件
这个管道是用来编码和保存H.264视频文件的,而不是用来播放视频的。如果你想要播放H.264视频文件,你需要使用类似于以下的管道:
```
gst-launch-1.0 filesrc location=~/Downloads/FPV_2021-0-1_12-37-23.h264 ! h264parse ! avdec_h264 ! autovideosink
```
这个管道会解码H.264视频文件并将其显示在自动选择的视频窗口中。如果你想要使用特定的视频窗口,你可以将`autovideosink`替换为你选择的视频窗口元素名称。
阅读全文