Search code examples
javagstreamer

GStreamer splitting MP4 file


I am trying to write a simple pipeline to split an mp4 file on the local storage to multiple chunks with the fixed duration I've been trying to use several different options but none seems to work

btw we have a hard requirement not to use FFmpeg library due to some license concerns so the plugins that I have at the moment are

gst-plugins-base-1.8.3
gst-plugins-good-1.8.3

and some bad plugins libs (h264parse, mpegtsmux, hlssink)

Could you help me out to solve that problem using GStreamer?

Couple of samples that I've tried

gst-launch-1.0 filesrc location=/tmp/sample/BigBuckBunny_175k.mp4 ! h264parse ! splitmuxsink location=/tmp/sample/segments/segment%05d.mp4 max-size-time=10000000000
gst-launch-1.0 filesrc location=/tmp/sample/BigBuckBunny_175k.mp4 ! splitmuxsink location=/tmp/sample/segments/segment%05d.mp4 max-size-time=10000000000
gst-launch-1.0 filesrc location=/tmp/sample/BigBuckBunny_175k.mp4 ! decodebin ! videoconvert ! x264enc ! splitmuxsink location=/tmp/sample/segments/segment%05d.mp4 max-size-time=10000000000 

Solution

  • The result pipeline for splitting MP4 file is shown below (including video/audio streams)

    gst-launch-1.0 -e filesrc location={from} ! queue ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! queue ! mux.video \
    demux.audio_0 ! queue ! aacparse !  queue ! mux.audio_0 splitmuxsink location={to} max-size-time={duration} muxer=mp4mux name=mux