Gstreamer 在没有任何容器的情况下更正流文件

Gstreamer 在没有任何容器的情况下更正流文件,gstreamer,Gstreamer,我使用以下管道意外地使用gstreamer在没有任何容器的情况下写入了H264数据: gst-launch-1.0 filesrc location=input.avi ! image/jpeg,width=672,height=378,framerate=15/1 ! jpegdec ! videoconvert ! x264enc ! filesink location=output.mkv 正确的管道应如下所示: gst-launch-1.0 filesrc location=input

我使用以下管道意外地使用gstreamer在没有任何容器的情况下写入了H264数据:

gst-launch-1.0 filesrc location=input.avi ! image/jpeg,width=672,height=378,framerate=15/1 ! jpegdec ! videoconvert ! x264enc ! filesink location=output.mkv
正确的管道应如下所示:

gst-launch-1.0 filesrc location=input.avi ! image/jpeg,width=672,height=378,framerate=15/1 ! jpegdec ! videoconvert ! x264enc ! matroskamuxer ! filesink location=output.mkv
现在我一直在尝试更正这些流文件,但我还找不到任何合适的解决方案

你能给我一些解决这个问题的建议吗


问候。

首先,我想看看您是否可以提取数据并播放它。然后尝试将其多路复用。大概是这样的:

gst-launch-1.0 filesrc location=output.mkv ! video/x-h264,framerate=30/1 ! h264parse ! avdec_h264 ! ximagesink
你可能需要调整封盖,但一旦你开始演奏,你就可以对它进行mux

gst-launch-1.0 filesrc location=output.mkv ! video/x-h264,framerate=30/1 ! h264parse ! matroskamux ! filesink location=good.mkv

你想干什么?gstreamer-1.0中没有matroskamuxer元素……它应该是matroskamux。我不明白你的问题…是的,你是对的,应该是matroskamux,只是有点打字错误。我在第一行中使用了错误的管道,从input.avi文件生成了output.mkv文件。相反,我应该使用第二条管道。现在,mkv文件不能在任何程序中播放或打开。所以我需要用一些适当的方法来更正这些文件。由于所有mjpeg编码的文件都已删除,我需要以某种方式更正x264编码的文件。啊,好吧,手动将其扩展名更改为.264,并尝试将其读入gstreamer管道并将其推送到.mkv容器中。不确定这个想法,我只是测试了一下,它不起作用。您可能运气不好,因为您可能无法从文件中获取任何有效帧。唯一的另一件事是手动从文件中读取已知大小的缓冲区…但即使如此,h264也不会每次对整个帧进行编码,您必须对此进行说明。此管道无法解析给定的文件。实际上,我需要将视频宽度和高度添加到CAP中,因为原始管道报告了与之相关的错误。但正如我所说,即使增加视频宽度和高度也不能解决这个问题。你是在Unix系统上吗?您能否运行h264_分析并验证它是否确实将一些h264数据添加到文件中?是的,我在Unix系统上。以下是指定程序的输出:!!未找到偏移量0 0x0000、大小33554432 0x2000000之间的任何NAL,正在丢弃!!未找到偏移量33554432 0x2000000、大小67108864 0x4000000之间的任何NAL,正在丢弃!!未找到偏移量67108864 0x4000000、大小100663296 0x6000000之间的任何NAL,正在丢弃!!未找到偏移量100663296 0x6000000、大小134217728 0x8000000之间的任何NAL,正在丢弃!!未找到偏移量134217728 0x8000000,大小167772160 0xA000000之间的任何NAL,丢弃如果您愿意发布指向其中一个文件的链接,我将尝试播放该文件并为您构建管道。您好,在这里您可以找到一个示例文件:问候。