4

我在将MJPEG流保存到文件时遇到问题。当我MJPEG使用这样的管道流式传输时:

gst-launch filesrc location=thirdmovie640x360.mp4 ! decodebin2 name=dec \
    ! queue ! ffmpegcolorspace ! jpegenc ! queue ! avimux name=mux \
    ! udpsink host=192.168.0.2 port=5000

我可以使用这样的管道在我的第二台机器上播放这个流:

gst-launch -v udpsrc port=5000 ! jpegdec ! autovideosink

但是,如何将此类MJPEG流保存到可以在某些媒体播放器中播放的文件(无需转码!)?你能推荐一些管道吗?


我发现这样的管道可以将输出流保存为 matroska 文件:

gst-launch udpsrc port=5000 ! multipartdemux ! jpegparse ! jpegdec \
    ! ffmpegcolorspace ! matroskamux ! filesink location=output.mkv

如何更改它以保存 mp4 文件?这样的管道:

gst-launch udpsrc port=5000 ! multipartdemux ! jpegparse ! jpegdec \
    ! ffmpegcolorspace ! mp4mux ! filesink location=output.mp4

不起作用。您能否帮我将其保存为 mp4 容器(或 avi 容器)而不对 MJPEG 视频进行转码。

4

2 回答 2

6

我解决了我的问题。这是我正在寻找的管道:

服务器

gst-launch filesrc location=thirdmovie640x360.mp4 ! decodebin2 name=dec
! queue ! ffmpegcolorspace ! jpegenc ! queue ! multipartmux
! udpsink host=192.168.0.4 port=5000

客户

gst-launch udpsrc port=5000 ! multipartdemux ! image/jpeg, framerate=25/1 
! jpegparse ! jpegdec ! ffmpegcolorspace ! jpegenc
! avimux ! filesink location=output.avi
于 2012-10-04T11:02:51.097 回答
0

MJPEG 是一种编解码器,简单来说意味着有一系列 jpeg 图像。如果您想将这些 jpeg 作为视频查看,则必须将它们存储在容器中。MP4 是存储它们的常用容器。

因此,您可以将 jpegenc 输出复用回 mp4mux 并将其存储在文件中。任何体面的媒体播放器都应该能够播放它。

于 2012-10-03T22:41:57.430 回答