我想从matroska源创建一个非分段的.mp4视频。我见过this post并创建了一个类似的管道。我的源码只包含h264视频而且没有声音,所以我的管道看起来像这样:
gst-launch-1.0 filesrc location=x.mkv ! matroskademux ! h264parse ! mp4mux ! filesink location=x.mp4
但是,对结果运行gst-discoverer-1.0
会给出0:00:00.000000000的持续时间。此外,vlc
无法播放生成的.mp4文件,也无法在HTML5 <video>
元素中使用(这是此转换的最终目的)。
如果我通过将fragment-duration=1000
添加到mp4mux
元素来创建分段.mp4,那么vlc
可以播放.mp4,但这不是我想要的。 我需要一个知道总长度的.mp4。我做错了什么?
其他信息:长度出现在matroska来源中,由gst-discoverer-1.0
显示,vlc
可以显示该来源。我也可以用gstreamer重放非分段的.mp4(使用gst-launch-1.0 filesrc location=x.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
)。检查生成的.dot
文件会显示qtdemux
的帧速率为10000/1,这似乎很奇怪。
答案 0 :(得分:1)
解决方案是将disable-passthrough=true
添加到h264parse
元素,因此管道现在看起来像这样:
gst-launch-1.0 filesrc location=x.mkv ! \
matroskademux ! \
h264parse disable-passthrough=true ! \
mp4mux ! \
filesink location=x.mp4
现在生成的.mp4文件包含时间信息,可以很好地与vlc以及<video>
标签一起播放,包括前进/后退导航。