¿Cómo hacer un video Stop Motion o Time-lapse con cámara web?

28

Tengo una cámara web que funciona como un dispositivo v4l2.

¿Cuál es la forma más conveniente de capturar un video stop-motion o time-lapse ?

nótese bien

stop-motion y time-lapse están relacionados pero son conceptualmente diferentes.

Time-lapse es donde tomas una foto de una escena en un intervalo establecido y luego la combinas en un video (parece que va muy rápido).

Stop-motion es donde controlas la escena y tomas una imagen para cada cambio que haces, para formar una animación (por ejemplo, Wallace y Grommit).

Una aplicación de lapso de tiempo debe poder tomar una foto en un intervalo establecido.

Seppo Erviälä
fuente
Una pregunta similar en Fotos tiene respuestas interesantes que se superponen en parte.
anarcat

Respuestas:

40

Capturando un trillón de imágenes.

El primer paso es capturar imágenes. Imaginemos que desea tomar una foto cada 10 segundos y guardarla en un directorio ubicado en su escritorio

mkdir ~/Desktop/cap
cd ~/Desktop/cap

Utilizamos streamerpara hacer la captura, así que vamos a instalarlo:

sudo apt-get install streamer

Y ahora queremos capturar

streamer -o 0000.jpeg -s 300x200 -j 100 -t 2000 -r 1

-tes la cantidad de cuadros que queremos capturar. -res cuadros por segundo. Entonces esto debería tomar un cuadro cada segundo. Si comprime eso en un video de 30 fps, un minuto de captura se convierte en 2 segundos de video. Querrá ajustar esto de manera apropiada dependiendo de la cantidad de video de salida que desee.

Esa línea le dará 2000 imágenes, tomará media hora para grabar y, a 30 fps, generará poco más de 1 minuto de video.

Poniendolo todo junto

Voy a utilizar ffmpeg. Hay muchas maneras diferentes de armarlo, incluyendo, mencoderpero prefiero ffmpegla perspectiva de la vida. Después de instalarlo ( sudo apt-get install ffmpeg) simplemente cuelgue esto:

ffmpeg -r 30 -i %04d.jpeg -s hd480 -vcodec libx264 -vpre hq time-lapse.mp4

La configuración de calidad no es similar a la de mi cámara web, por lo que es posible que desee jugar con las opciones mucho más para obtener una mejor codificación, pero eso debería generar un buen video de 30 fps, comprimido en x264.

Es posible que desee jugar con el framerate ( -r) pero no iría por debajo de 15 fps.

Oli
fuente
1
Cada diez segundos necesitaría -r 0.1.
Seppo Erviälä
man streamerno describe lo que hace cada parámetro. ¿Dónde puedo obtener información sobre el jparámetro? ¿Cómo podría hacer que capture hasta que presione CTRL + C, con FPS dado?
Tomáš Zato - Restablece a Mónica
@oli ffmpegya no funciona para mí. ¿Qué debo usar?
Tim
1
@ChrisH Está técnicamente bien, solo quiero decir que es el corte básico para un video fluido. Sin embargo, eso depende en gran medida de la rapidez con que los esté tomando.
Oli
2
@ TomášZato streamer -hes mucho más completo. Odio cuando los desarrolladores se esfuerzan mucho --helppero nada para la página del manual.
WasabiFlux
9

Para capturar cada X cantidad de segundos desde una cámara web, use el movimiento.

Instalar motion

sudo apt-get install motion o sudo aptitude install motion

Configure el movimiento por cada X cantidad de segundos

sudo nano /etc/motion/motion.conf

Cambie las variables minimum_frame_time y snapshot_interval a la misma cantidad de segundos que desea tomar la foto con la cámara web.

10 minutos = 600 segundos
20 minutos = 1200 segundos
30 minutos = 1800 segundos
1 hora = 3600 segundos
2 horas = 7200 segundos y así sucesivamente ...

ejecutar movimiento con sudo motiondetenerlo con CTRL+C

NOTA - Configure motion.conf para guardar los archivos en otro directorio que no sea el predeterminado / tmp. Por ejemplo, su carpeta de inicio. Dado que ir a / tmp necesita más privilegios. También encontrará muchas opciones útiles en motion.conf para muchas otras cosas que le pueden gustar.

Luis Alvarado
fuente
Eso es mucho mejor que serpentina. No estoy seguro de que me guste una solución imprescindible, y parece que pierdo la capacidad de usarla como un espejo retrovisor, pero es mucho mejor que un streamer y podría resolver otro problema que he estado buscando. at, que solo toma una foto si estoy allí. Marcaré esto resuelto si puedo solucionar los otros problemas.
Dave Jacoby
En realidad, no necesita acceso root para usarlo. Solo necesita acceso root para editar el archivo de configuración.
Luis Alvarado
Supongo que si desea escribir en la ruta predeterminada, también podría ser necesario, pero eso fue lo primero que cambié. Gracias.
Dave Jacoby
No hay problema amigo. Encantado de ayudar.
Luis Alvarado
Lo intenté. Funcionó bien. Podría intentarlo de nuevo en algún momento. Pero no me dio el aspecto de visión trasera, que valoro más que la toma de fotografías automatizada. Entonces, estoy ejecutando Cheese ahora mismo.
Dave Jacoby
7

gTimelapse ( Enlace de descarga )

ingrese la descripción de la imagen aquí

Una aplicación para capturar imágenes para generar videos timelapse, construida en las bibliotecas gPhoto2 y wxWidgets.

Compilar instrucciones

Descargue la fuente del sitio web sourceforge

en una terminal escriba lo siguiente:

cd Downloads 
gunzip gtimelapse-0.1.tar.gz
tar -xvf gtimelapse-0.1.tar
cd gtimelapse
sudo apt-get install build-essential libgphoto2-2-dev libwxbase2.8-dev libwxgtk2.8-dev gphoto2
./configure
make
sudo make install

Para ejecutar el tipo de aplicación

gtimelapse &

nb 1

gphoto2 --list-cameras | more

nb 2

mira este blog para más información útil

enumera todos los dispositivos compatibles que admite la aplicación

nb 3

He leído que gphoto2 no es compatible con cámaras web; dejaré esta respuesta visible de todos modos, en caso de que alguien quiera probar esta respuesta con una cámara digital decente en lugar de una cámara web.

fossfreedom
fuente
Tomó bastante tiempo buscar y compilar wxWidgets con todos los requisitos previos. También compilé gTimelapse pero simplemente se bloquea con: [Debug] 13:21:12: ./src/common/menucmn.cpp(859): afirmar "item" falló en Check (): wxMenu :: Check: no existe ese elemento [Depurar] Generando un seguimiento de pila ... por favor, espera Trace / trampa de punto de interrupción
Seppo Erviälä
ok, intentaré construirme en algún momento hoy mismo. Agregaré algunas instrucciones a mi respuesta (suponiendo que yo mismo pueda construir esto).
fossfreedom
En realidad, esto es bastante útil ya que tengo una cámara digital compatible con gphoto2. No sabía que existía una biblioteca como esta.
Seppo Erviälä
1

He usado Stopmotion para hacer esto, está en el centro de software. También puede capturar con Cheese, pero debe modificar la configuración de Cheese para aumentar el número máximo de imágenes. Me resultó más fácil usar Stopmotion para todo el proceso.

Tom Brossman
fuente
1

La mejor y más fácil forma de hacerlo es instalando Motion . Es un software de vigilancia a gran escala para sistemas operativos basados ​​en Linux.

Instalar a través del centro de software

Vesa
fuente
1

Una opción rápida, sucia, pero algo más flexible es la siguiente:

ffmpeg -pattern_type glob -framerate 25 -i 'image-*.jpg' -c:v libx264 \
    -profile:v high -crf 20 -pix_fmt yuv420p output.mp4

Aquí estoy añadiendo -pattern_type glob, usando el comodín *, y poner mi nombre de archivo entre comillas simples: 'image-*.jpg'.

El beneficio: esta sintaxis le permite comenzar en cualquier número y tener cualquier patrón en su numeración (a menudo creo un conteo de 20, comenzando alrededor de 20000, por ejemplo).

Los inconvenientes: esta sintaxis no le permite omitir cifras repetidas como permite la sintaxis '% ## d'. Además, no puede tener un esquema de numeración sin ceros anteriores. Es decir, el esquema de nombres de archivos debe ser algo así como 00001, 00002, ... 00033 ... (La numeración no puede ser 1,2,3, ... 33, ..., de lo contrario, el número '3' se ordenará entre '39' y '40' por ejemplo).

Por separado, también tenga en cuenta que tuve que poner mi nombre de archivo de entrada entre comillas simples, de lo contrario ffmpeg intentó sobrescribir todos mis archivos de imagen con una copia de la primera imagen (siempre es una buena idea copiar para una copia de seguridad antes de manipular archivos )

De esta edición por un usuario anónimo.

Tim
fuente
0

Debería poder configurar el movimiento (en motion.conf) para transmitir; de forma predeterminada, transmite en el puerto 8081. Todo lo que tiene que hacer para obtener su espejo retrovisor es abrir VLC, "Abrir flujo de red" y apúntelo en http: // localhost: 8081 .

Derek
fuente
0

Camorama es un visor / grabador de cámara web que he utilizado para tomar fotos, a intervalos de 1 minuto y subirlas a un servidor web, desde mi cámara web; Es una configuración sencilla. También está disponible en el Centro de software de Ubuntu o puede instalarlo usando:

sudo apt-get install camorama

Espero que esto ayude.

kicsyromy
fuente
Lo siento, acabo de ver que había escrito que su cámara web no funciona con Camorama.
kicsyromy
¿Podría explicarme más detalles? El hombre no cubre la opción de timelapse :(
Mars Robertson