Códigos de Ejemplo
lunes, 11 de abril de 2011
jueves, 31 de marzo de 2011
gstreamer con precarga de librería específica
gst-launch-0.10 --gst-plugin-load=libflump3dec.so playbin uri=direccion_del_mp3
mp3 = gst.plugin_load_file(os. getcwd()+"/plugins/ libgstflump3dec.so")
asf = gst.plugin_load_file(os. getcwd()+"/plugins/libgstasf. so")
avi = gst.plugin_load_file(os. getcwd()+"/plugins/libgstavi. so")
dv = gst.plugin_load_file(os. getcwd()+"/plugins/libgstdv. so")
libvisual = gst.plugin_load_file(os. getcwd()+"/plugins/ libgstlibvisual.so")
mms = gst.plugin_load_file(os. getcwd()+"/plugins/libgstmms. so")
mpeg2 = gst.plugin_load_file(os. getcwd()+"/plugins/ libgstmpeg2dec.so")
flv = gst.plugin_load_file(os. getcwd()+"/plugins/libgstflv. so")
martes, 29 de marzo de 2011
Convertir mp3 a Video con visualización goom
Ejemplo1:
gst-launch filesrc location=input.mp3 ! queue ! tee name=stream ! queue ! mp3parse ! matroskamux name=mux ! filesink location="output.mkv" stream. ! queue ! mp3parse ! mad ! audioconvert ! queue ! goom ! ffmpegcolorspace ! video/x-raw-yuv,width=1280,height=720 ! x264enc ! mux.
Ejemplo2:
gst-launch filesrc location=input.mp3 ! queue ! tee name=stream ! queue ! mp3parse ! matroskamux name=mux ! filesink location="output.mkv" stream. ! queue ! mp3parse ! mad ! audioconvert ! queue ! goom ! ffmpegcolorspace ! video/x-raw-yuv,width=1280,height=720 ! x264enc ! mux.
Ejemplo2:
gst-launch filesrc location=input.ogg ! queue ! tee name=stream ! queue ! oggdemux ! vorbisparse ! oggmux name=mux ! filesink location="output.ogg" stream. ! queue ! oggdemux ! vorbisdec ! audioconvert ! queue ! goom ! ffmpegcolorspace ! video/x-raw-yuv,width=1920,height=1080 ! theoraenc ! mux.
Ejemplo3:
gst-launch filesrc location=input.ogg ! queue ! tee name=stream ! queue ! oggdemux ! vorbisparse ! oggmux name=mux ! filesink location="output.ogg" stream. ! queue ! oggdemux ! vorbisdec ! audioconvert ! queue ! goom ! ffmpegcolorspace ! video/x-raw-yuv,width=1920,height=1080 ! theoraenc ! mux.
Reproducir audio o video desde un mpeg
Audio:
Video:
gst-launch-0.10 filesrc location=4_Minutes.mpeg ! mpegdemux ! mpeg2dec ! ffmpegcolorspace ! autovideosink
gst-launch-0.10 filesrc location=Vogue.mpeg ! mpegdemux ! mad ! audioconvert ! alsasink
gst-launch-0.10 filesrc location=Vogue.mpeg ! mpegdemux ! mad ! audioconvert ! autoaudiosink
Video:
gst-launch-0.10 filesrc location=4_Minutes.mpeg ! mpegdemux ! mpeg2dec ! ffmpegcolorspace ! autovideosink
domingo, 6 de marzo de 2011
Grabar desde webcam con gstreamer
Ejemplo 1:
gst-launch-0.10 v4l2src ! capsfilter ! tee ! queue ! xvidenc ! avimux ! filesink location = prueba
Ejemplo 2:
gst-launch v4l2src! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace! ffenc_mpeg4 ! avimux! filesink location=1.mp4
Ejemplo 3:
gst-launch v4l2src ! "video/x-raw-yuv,width=640,height=480,framerate=30/1" ! queue ! videorate ! "video/x-raw-yuv,framerate=30/1" ! theoraenc! queue ! oggmux ! filesink location =miarchivo.ogg
Ejemplo 4:
gst-launch-0.10 v4l2src ! capsfilter ! tee ! queue ! xvidenc ! avimux ! filesink location = prueba
Ejemplo 2:
gst-launch v4l2src! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace! ffenc_mpeg4 ! avimux! filesink location=1.mp4
Ejemplo 3:
gst-launch v4l2src ! "video/x-raw-yuv,width=640,height=480,framerate=30/1" ! queue ! videorate ! "video/x-raw-yuv,framerate=30/1" ! theoraenc! queue ! oggmux ! filesink location =miarchivo.ogg
Ejemplo 4:
gst-launch v4l2src ! 'video/x-raw-yuv,width=320,height=240, framerate=30/1' ! ffmpegcolorspace ! x264enc ! avimux ! filesink location=record.avi
Ejemplo video + audio:
gst-launch v4l2src ! queue ! ffmpegcolorspace! theoraenc ! queue ! oggmux name=mux alsasrc ! queue ! audioconvert ! vorbisenc ! queue ! mux. mux. ! queue ! filesink location = prueba.ogg
miércoles, 20 de octubre de 2010
Grabar sesión de escritorio con gstreamer + bash
#!/bin/bash
#
# Requiere:
#
# gstreamer0.10-tools
# gstreamer0.10-plugins-base
# gstreamer0.10-plugins-good
# Tenemos que usar videobox hasta que libgstreamer0.10-plugins-good >= 0.10.4
VIDEOSRCOPTS= # "startx=0 starty=0 endx=639 endy=479"VIDEOOUTCONV=",width=640,height=480,framerate=5/1"
VIDEOENCOPTS="quality=36" # quality=[0,63] Default: 16
AUDIOOUTCONV=",rate=11050,channels=1"
AUDIOENCOPTS= # quality=[-0.1,1] Default: 0.3
SINK="filesink location=desktop.ogg"
gst-launch-0.10 oggmux name=mux ! $SINK \
ximagesrc name=videosource $VIDEOSRCOPTS ! videorate ! ffmpegcolorspace \
! videobox right=384 bottom=288 ! videoscale method=1 ! video/x-raw-yuv$VIDEOOUTCONV \
! theoraenc $VIDEOENCOPTS ! queue ! mux. \
alsasrc name=audiosource ! audiorate ! audioconvert ! audio/x-raw-float$AUDIOOUTCONV \
! vorbisenc $AUDIOENCOPTS ! queue ! mux.
En Limpio:
#!/bin/bash
# Requiere:
# gstreamer0.10-tools
# gstreamer0.10-plugins-base
# gstreamer0.10-plugins-good
VIDEOOUTCONV=",width=640, height=480,framerate=5/1"
AUDIOOUTCONV=",rate=11050, channels=1"
SINK="filesink location=desktop.ogg"
gst-launch-0.10 oggmux name=mux ! $SINK \
ximagesrc name=videosource $VIDEOSRCOPTS ! videorate ! ffmpegcolorspace \
! videobox right=384 bottom=288 ! videoscale method=1 ! video/x-raw-yuv$VIDEOOUTCONV \
! theoraenc $VIDEOENCOPTS ! queue ! mux. \
alsasrc name=audiosource ! audiorate ! audioconvert ! audio/x-raw-float$AUDIOOUTCONV \
! vorbisenc $AUDIOENCOPTS ! queue ! mux.
domingo, 19 de septiembre de 2010
Detector de Movimiento en pygst + pygame
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Capturador_Gstreamer.py (versión 1)
# por Flavio Danesse (fdanesse@hotmail.com)
# CeibalJAM! - Uruguay
import sys, os, time, string, gobject
import pygst
pygst.require("0.10")
import gst
import pygame
from pygame.locals import *
import gc
gc.enable()
UMBRAL = 160
class Capturador_Gstreamer():
def __init__(self, frecuencia=2):
self.frecuencia = frecuencia
self.hora = time.strftime("%H:%M:%S") # hora de inicio, luego, hora de cada fotografía
# Declaración elemendos para pipeline de fotografía
self.pipeline = None
self.source = None
self.codec = None
self.formato = None
self.filesink = None
self.start_streaming() # levanta el stream
self.anizador_de_imagenes = Analiza(umbral=UMBRAL)
self.estado = True # controla el estado general del programa
def main(self):
while self.estado:
time.sleep(self.frecuencia)
self.get_fotografia()
def get_fotografia(self):
# timer para ejecutar tareas programadas
self.pipeline.set_state(gst.STATE_NULL) # anula el pipeline
self.hora = time.strftime("%H:%M:%S") # obtiene la hora
self.filesink.set_property("location", "%s.png" % (self.hora)) # Cambia nombre de archivo
self.pipeline.set_state(gst.STATE_PLAYING) # Fotografía
nombre_de_archivo = "%s.png" % (self.hora)
self.anizador_de_imagenes.set_analisis(nombre_de_archivo)
def construir_pipeline(self):
# construye el stream de fotografia
self.pipeline = gst.Pipeline("player")
self.source = gst.element_factory_make("v4l2src", "camara") # origen
self.codec = gst.element_factory_make("ffmpegcolorspace", "codec") # formato de video
self.formato = gst.element_factory_make("pngenc", "png") # formato de imagen
self.filesink = gst.element_factory_make("filesink", "filesink") # salida
self.filesink.set_property("location", "%s.png" % (self.hora))
self.pipeline.add(self.source, self.codec, self.formato, self.filesink) # armar el pipeline
gst.element_link_many(self.source, self.codec, self.formato, self.filesink) # entubar los elementos
def start_streaming(self):
# Ejecuta el stream
self.construir_pipeline() # construye el pipeline
self.bus = self.pipeline.get_bus() # obtiene el bus de mensajes
self.bus.add_signal_watch() # escucha las señales en el bus
self.bus.connect("message", self.on_message) # conecta los mensajes al manejador de señales
def on_message(self, bus, message):
# mensajes en el bus
if message.type == gst.MESSAGE_ERROR:
err, debug = message.parse_error()
print "ERROR ON_MESSAGE: ", err, debug
def describe(self):
# Descripción general del funcionamiento de la clase Capturador_Gstreamer
descripcion = '''\t\t*** Clase Capturador_Gstreamer *** \n
Esta clase recibe un parámetro entero que indica cada cuantos segundos debe realizar una fotografía.\n
Luego, comenzara a fotografiar y guardar esas imágenes con el nombre de archivo igual a la hora de realizada la fotografía.\n
Mientras la variable estado sea True, continuará realizando esta tarea.'''
return descripcion
class Analiza():
def __init__(self, umbral=160):
pygame.init()
pygame.mixer.quit()
self.umbral = umbral
self.imagenes = []
def analiza_cambios(self, imagen1=None, imagen2=None, u=160):
# recibe una imagen cargada por pygame y analiza las variaciones de color en cada pixel, retornando True o False, según sean cambios grandes o pequeños.
(init_x, init_y, horizontal, vertival) = imagen1.get_bounding_rect()
gris = 0
blanco = 0
negro = 0
for x in range(horizontal):
for y in range(vertival):
(r, g, b, a) = imagen1.get_at((x,y))
(rn, gn, bn, an) = imagen2.get_at((x,y))
dif_rojo = r-rn
dif_verde = g-gn
dif_azul = b-bn
if dif_rojo < -u or dif_rojo > u or dif_verde < -u or dif_verde > u or dif_azul < -u or dif_azul > u:
return True
return False
def set_analisis(self, nombre_de_archivo):
# recibe una dirección de archivo para la imagen a analizar
self.imagenes.append(nombre_de_archivo)
# Esperar a tener 5 imagenes para asegurar que estén completamente guardadas las 2 primeras.
if len(self.imagenes) > 5:
direccion_imagen1 = self.imagenes[0]
direccion_imagen2 = self.imagenes[1]
imagen1 = pygame.image.load(direccion_imagen1)
imagen2 = pygame.image.load(direccion_imagen2)
# compare 1 con 2, si no hay cambios, borrar 1
if not self.analiza_cambios(imagen1=imagen1, imagen2=imagen2, u=self.umbral):
os.system ("rm %s" % (self.imagenes[0]))
self.imagenes.remove(self.imagenes[0])
if __name__ == "__main__":
# frecuencia es cada cuantos segundos debe fotografiar
capturador = Capturador_Gstreamer(frecuencia=2) # 2 para pc normal 4 o más para xo
#print capturador.describe()
capturador.main()
# -*- coding: utf-8 -*-
# Capturador_Gstreamer.py (versión 1)
# por Flavio Danesse (fdanesse@hotmail.com)
# CeibalJAM! - Uruguay
import sys, os, time, string, gobject
import pygst
pygst.require("0.10")
import gst
import pygame
from pygame.locals import *
import gc
gc.enable()
UMBRAL = 160
class Capturador_Gstreamer():
def __init__(self, frecuencia=2):
self.frecuencia = frecuencia
self.hora = time.strftime("%H:%M:%S") # hora de inicio, luego, hora de cada fotografía
# Declaración elemendos para pipeline de fotografía
self.pipeline = None
self.source = None
self.codec = None
self.formato = None
self.filesink = None
self.start_streaming() # levanta el stream
self.anizador_de_imagenes = Analiza(umbral=UMBRAL)
self.estado = True # controla el estado general del programa
def main(self):
while self.estado:
time.sleep(self.frecuencia)
self.get_fotografia()
def get_fotografia(self):
# timer para ejecutar tareas programadas
self.pipeline.set_state(gst.STATE_NULL) # anula el pipeline
self.hora = time.strftime("%H:%M:%S") # obtiene la hora
self.filesink.set_property("location", "%s.png" % (self.hora)) # Cambia nombre de archivo
self.pipeline.set_state(gst.STATE_PLAYING) # Fotografía
nombre_de_archivo = "%s.png" % (self.hora)
self.anizador_de_imagenes.set_analisis(nombre_de_archivo)
def construir_pipeline(self):
# construye el stream de fotografia
self.pipeline = gst.Pipeline("player")
self.source = gst.element_factory_make("v4l2src", "camara") # origen
self.codec = gst.element_factory_make("ffmpegcolorspace", "codec") # formato de video
self.formato = gst.element_factory_make("pngenc", "png") # formato de imagen
self.filesink = gst.element_factory_make("filesink", "filesink") # salida
self.filesink.set_property("location", "%s.png" % (self.hora))
self.pipeline.add(self.source, self.codec, self.formato, self.filesink) # armar el pipeline
gst.element_link_many(self.source, self.codec, self.formato, self.filesink) # entubar los elementos
def start_streaming(self):
# Ejecuta el stream
self.construir_pipeline() # construye el pipeline
self.bus = self.pipeline.get_bus() # obtiene el bus de mensajes
self.bus.add_signal_watch() # escucha las señales en el bus
self.bus.connect("message", self.on_message) # conecta los mensajes al manejador de señales
def on_message(self, bus, message):
# mensajes en el bus
if message.type == gst.MESSAGE_ERROR:
err, debug = message.parse_error()
print "ERROR ON_MESSAGE: ", err, debug
def describe(self):
# Descripción general del funcionamiento de la clase Capturador_Gstreamer
descripcion = '''\t\t*** Clase Capturador_Gstreamer *** \n
Esta clase recibe un parámetro entero que indica cada cuantos segundos debe realizar una fotografía.\n
Luego, comenzara a fotografiar y guardar esas imágenes con el nombre de archivo igual a la hora de realizada la fotografía.\n
Mientras la variable estado sea True, continuará realizando esta tarea.'''
return descripcion
class Analiza():
def __init__(self, umbral=160):
pygame.init()
pygame.mixer.quit()
self.umbral = umbral
self.imagenes = []
def analiza_cambios(self, imagen1=None, imagen2=None, u=160):
# recibe una imagen cargada por pygame y analiza las variaciones de color en cada pixel, retornando True o False, según sean cambios grandes o pequeños.
(init_x, init_y, horizontal, vertival) = imagen1.get_bounding_rect()
gris = 0
blanco = 0
negro = 0
for x in range(horizontal):
for y in range(vertival):
(r, g, b, a) = imagen1.get_at((x,y))
(rn, gn, bn, an) = imagen2.get_at((x,y))
dif_rojo = r-rn
dif_verde = g-gn
dif_azul = b-bn
if dif_rojo < -u or dif_rojo > u or dif_verde < -u or dif_verde > u or dif_azul < -u or dif_azul > u:
return True
return False
def set_analisis(self, nombre_de_archivo):
# recibe una dirección de archivo para la imagen a analizar
self.imagenes.append(nombre_de_archivo)
# Esperar a tener 5 imagenes para asegurar que estén completamente guardadas las 2 primeras.
if len(self.imagenes) > 5:
direccion_imagen1 = self.imagenes[0]
direccion_imagen2 = self.imagenes[1]
imagen1 = pygame.image.load(direccion_imagen1)
imagen2 = pygame.image.load(direccion_imagen2)
# compare 1 con 2, si no hay cambios, borrar 1
if not self.analiza_cambios(imagen1=imagen1, imagen2=imagen2, u=self.umbral):
os.system ("rm %s" % (self.imagenes[0]))
self.imagenes.remove(self.imagenes[0])
if __name__ == "__main__":
# frecuencia es cada cuantos segundos debe fotografiar
capturador = Capturador_Gstreamer(frecuencia=2) # 2 para pc normal 4 o más para xo
#print capturador.describe()
capturador.main()
Suscribirse a:
Entradas (Atom)