I wrote a script in python to generate a OGG video from a set of PNG files.
======================= >8 ======================= #!/usr/bin/env python3 import os import argparse import gi; gi.require_version('Gst', '1.0') from gi.repository import GObject, Gst def pipeline(png_path, ogg_path): """ Builds the pipeline png_path is a directory path to the images, like '/home/fulano/images/' ogg_path is the file path for the video, including the name, like '/home/fulano/video.ogg' """ pipeline = Gst.Pipeline.new("pipeline") multifilesrc = Gst.ElementFactory.make('multifilesrc') multifilesrc.set_properties( location=os.path.join(png_path,'%03d.png'), index=0, caps=Gst.Caps.from_string("image/png,framerate=(fraction)12/1") ) pipeline.add(multifilesrc) pngdec = Gst.ElementFactory.make('pngdec') pipeline.add(pngdec) multifilesrc.link(pngdec) videoconvert = Gst.ElementFactory.make('videoconvert', None) pipeline.add(videoconvert) pngdec.link(videoconvert) videorate = Gst.ElementFactory.make('videorate', None) pipeline.add(videorate) videoconvert.link(videorate) theoraenc = Gst.ElementFactory.make('theoraenc', None) pipeline.add(theoraenc) videorate.link(theoraenc) oggmux = Gst.ElementFactory.make('oggmux', None) pipeline.add(oggmux) theoraenc.link(oggmux) filesink = Gst.ElementFactory.make('filesink', None) filesink.set_property('location', ogg_path) pipeline.add(filesink) oggmux.link(filesink) return pipeline if __name__=="__main__": Gst.init(None) pipe = pipeline('img', 'video.ogg') pipe.set_state(Gst.State.PLAYING) GObject.MainLoop() ======================= >8 ======================= When running the script I get the following information: $ GST_DEBUG=3 ./ogg_tool 0:00:00.037269747 11891 0x55adbcd1ec00 FIXME default gstutils.c:3902:gst_pad_create_stream_id_internal:<multifilesrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id 0:00:00.037337706 11891 0x55adbcd1ec00 FIXME videodecoder gstvideodecoder.c:928:gst_video_decoder_drain_out:<pngdec0> Sub-class should implement drain() 0:00:00.039960129 11891 0x55adbcd1ec00 WARN videodecoder gstvideodecoder.c:2438:gst_video_decoder_chain:<pngdec0> Received buffer without a new-segment. Assuming timestamps start from 0. 0:00:00.040000881 11891 0x55adbcd1ec00 FIXME videodecoder gstvideodecoder.c:928:gst_video_decoder_drain_out:<pngdec0> Sub-class should implement drain() 0:00:00.047336315 11891 0x55adbcd1ec00 WARN videopool gstvideopool.c:219:video_buffer_pool_set_config:<videobufferpool1> no caps in config $ ll total 12 drwxrwxr-x. 2 nnieto nnieto 4096 nov 30 15:00 img -rwxrwxr-x. 1 nnieto nnieto 1959 nov 30 15:50 ogg_tool -rw-rw-r--. 1 nnieto nnieto 0 nov 30 15:55 video.ogg video.ogg is 0 bytes long I tried with gst-launch and it works: $ gst-launch-1.0 multifilesrc location="img/%03d.png" index=0 caps="image/png,framerate=\(fraction\)12/1" ! pngdec ! videoconvert ! videorate ! theoraenc ! oggmux ! filesink location="video_gstlaunch.ogg" Setting pipeline to PAUSED ... Pipeline is PREROLLING ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock Got EOS from element "pipeline0". Execution ended after 0:00:01.932992495 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ... $ ll total 444 drwxrwxr-x. 2 nnieto nnieto 4096 nov 30 15:00 img -rwxrwxr-x. 1 nnieto nnieto 1959 nov 30 15:50 ogg_tool -rw-rw-r--. 1 nnieto nnieto 438882 nov 30 15:57 video_gstlaunch.ogg -rw-rw-r--. 1 nnieto nnieto 0 nov 30 15:55 video.ogg Any idea what I'm doing wrong? -- Noe Nieto _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |