2

I have the following command line code:

gst-launch-1.0 ximagesrc startx=0 use-damage=0 ! video/x-raw,framerate=30/1 ! videoscale method=0 ! video/x-raw,width=1280,height=1080  ! ximagesink

Is it possible to use gstreamer in python to record its video output from the desktop and save it to file. The command opens a window and displays desktop activity correctly but I should like to convert this output into a video file in python.

Thank you in advance for your assistance.

Isocrates
  • 79
  • 1
  • 3
  • 8

1 Answers1

1

You may have issues depending on what codecs and other elements of gstreamer you have available on your system but this worked for me:

gst-launch-1.0 ximagesrc startx=0 use-damage=0 ! video/x-raw,framerate=30/1 ! videoscale method=0 ! video/x-raw,width=1280,height=1080  ! videoconvert ! x264enc ! avimux ! filesink location=output2.avi

So the videoconvert is required because x264enc has a different input type to ximagesink. x264enc is the codec itself, avimux puts the compressed video in an avi container and filesink is used to write the file out.

For the Python API, an easy MCVE is:

#!/usr/bin/python

import os
import gi
import sys
import time

gi.require_version('Gtk', '3.0')
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GObject, Gtk

Gtk.init(sys.argv)

# initialize GStreamer
Gst.init(sys.argv)

pipeline = Gst.parse_launch ("ximagesrc startx=0 use-damage=0 ! video/x-raw,framerate=30/1 ! videoscale method=0 ! video/x-raw,width=1280,height=1080  ! videoconvert ! x264enc ! avimux ! filesink location=output4.avi")
pipeline.set_state(Gst.State.PLAYING)
time.sleep(15)
pipeline.set_state(Gst.State.NULL)
Simon Denvir
  • 116
  • 4
  • Thanks for the help. I was wondering if you knew how to convert this command into Python code? It is what I need, but I'm not sure on the best way to make this work in Python. – Isocrates Apr 14 '18 at 11:18