【问题标题】:Timing is lost when converting h264 video to non segmented mp4 using gstreamer使用 gstreamer 将 h264 视频转换为非分段 mp4 时丢失时间
【发布时间】:2016-03-20 01:45:39
【问题描述】:

我想从 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。我做错了什么?

附加信息:gst-discoverer-1.0 显示的 matroska 源中存在长度,vlc 可以显示该源。我还可以使用 gstreamer 重播非分段 .mp4(使用 gst-launch-1.0 filesrc location=x.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink)。检查生成的.dot 文件显示来自qtdemux 的帧速率为10000/1,这看起来很奇怪。

【问题讨论】:

    标签: gstreamer mp4 h.264


    【解决方案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> 标记中播放,包括向前/向后导航。

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 2022-12-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      相关资源
      最近更新 更多