GStreamer Python记录并保存桌面视频

时间:2018-04-14 07:42:42

标签: python python-3.x gstreamer python-gstreamer

我有以下命令行代码:

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

是否可以在python中使用gstreamer从桌面录制其视频输出并将其保存到文件中。该命令打开一个窗口并正确显示桌面活动,但我想将此输出转换为python中的视频文件。

提前感谢您的协助。

1 个答案:

答案 0 :(得分:0)

根据您在系统上可用的gstreamer的编解码器和其他元素,您可能会遇到问题,但这对我有用:

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

因此,视频转换是必需的,因为x264enc与ximagesink具有不同的输入类型。 x264enc是编解码器本身,avimux将压缩视频放在avi容器中,filesink用于写出文件。

对于Python API,一个简单的MCVE是:

#!/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)