Estoy grabando video de Pi usando Camera Module con picamera:
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_recording('1.h264')
camera.wait_recording(5)
for i in range(2, 11):
camera.split_recording('%d.h264' % i)
camera.wait_recording(5)
camera.stop_recording()
Por separado, he usado una combinación de raspivid
y gstreamer
para transmitir video desde pi sin demora. ¿Hay alguna manera de almacenar y transmitir secuencias usando Python simultáneamente ?
Mi opinión es que debe haber una manera de usar la cámara como entrada y crear dos fuentes de salida: un video de 720p para almacenamiento y un video de 240p reducido para transmitir usando gstreamer ...
streaming-video
koogee
fuente
fuente
raspivid
, podríatee
enviar la salida a un archivo y gstreamer o cualquier otra cosa (verman tee
). Siempre y cuando una transmisión sea directa al disco, no agregará mucha sobrecarga, pero si desea procesar la entrada en dos formatos diferentes simultáneamente, creo que será demasiado trabajo para el pi.Respuestas:
El
tee
comando lee de entrada estándar y copia a cualquier número de archivos más salida estándar por defecto, veaman tee
para más detalles. Esto significa que puede pedirle a tee que cree un archivo a partir de la entrada y luego canalice la salida a otra cosa.La adición de una tubería adicional en teoría agrega un poco de ineficiencia. En cuanto a si esto es significativo o no, tendrá que juzgar por sí mismo utilizando su propio método de transmisión. Mi método actual no es satisfactorio a plena resolución. No es un gran interés en este momento, pero cuando lo sea, intentaré encontrar algo mejor (por ejemplo, supuestamente gstreamer funciona mejor que clvc).
Sin embargo, vale la pena señalar que el archivo guardado localmente en el pi al mismo tiempo es de calidad perfecta, por lo que la actividad no interfiere con raspivid. Aquí hay un ejemplo:
Rompí esto en dos líneas para facilitar la lectura; puede presionar return after
|
(pipe) y finalizar el comando tal como puede romper una línea\
. Puedes reemplazarlocvlc
con lo que quieras. Una vez más, aunque el flujo era de baja calidad,test_video.h264
salió perfecto.Si bajo la resolución a 640x360, esta disposición está bien, con un segundo o dos de latencia, que es lo que normalmente obtengo. No creo que la
tee
segunda tubería haga alguna diferencia en la calidad de la transmisión; Estos son capaces de un rendimiento mucho mayor que el necesario aquí y no requieren mucho en cuanto a recursos del sistema.La CPU funcionó al 35-45%, que es lo mismo que cuando se transmite video sin
tee
.fuente
record_sequence
que toma unsplitter_port
parámetro. También hay un ejemplo de grabación de hasta 4 salidas simultáneas desde la cámara.No hay nada de malo en la respuesta anterior de Ricitos de Oro, pero aquí hay otra que trata específicamente con la API de picamera. Puede usar una salida personalizada para realizar dicha división (tantas formas como desee) y enviar la salida a una variedad de destinos. En su caso, si desea grabar en un archivo y un socket, puede hacer algo como esto:
fuente