Haga un video usando Python+GST a partir de un conjunto de imágenes con fecha de `yyyy-mm-dd`

StackOverflow https://stackoverflow.com/questions/3520464

Pregunta

Tengo un directorio con un conjunto de YYYY-MM-DD-Cenados en los archivos como así:

pictures/
    2010-08-14.png
    2010-08-17.png
    2010-08-18.png

¿Cómo puedo usar Python Gstreamer para convertir estos archivos en un video? Los nombres de archivo deben seguir siendo los mismos.

Tengo un programa que puede convertir los PNG numerados incrementalmente en un video, solo necesito adaptarlo para usar archivos con fecha.

¿Fue útil?

Solución

Lo más fácil sería crear enlace/cambiar el nombre de esos archivos a un número de secuencia (que debería ser fácilmente factible con un n=0 for f in $(ls * | sort); do ln -s $f $n && $n=$((n+1))

Entonces deberías poder hacer:

gst-launch multifilesrc location=%d ! pngdec ! theoraenc ! oggmux ! filesink location=movie.ogg

¿Tendría más sentido usar un codificador diferente a la teora tal vez, para tener todas las imágenes como un marco clave, tal vez con MJPEG?

Otros consejos

Es bastante fácil ordenar los nombres de archivo por fecha:

import datetime, os

def key( filename ):
    return datetime.datetime.strptime( 
        filename.rsplit( ".", 1 )[ 0 ], 
        "%Y-%m-%d"
    )

foo = sorted( os.listdir( ... ), key = key )

¿Quizás quieras cambiarte el nombre de ellos?

count = 0
def renamer( name ):
    os.rename( name, "{0}.png".format( count ) )
    count += 1

map( renamer, foo )

Residencia en el código de bash elmarco publicado, aquí hay un código básico de Python que se ajustará a los archivos fechados a los numerados secuencialmente en un directorio temporal:

# Untested example code. #

import os tempfile shutil

# Make a temporary directory: `temp`:
temp = tempfile.mkdtemp()  

# List photos:
files = os.listdir(os.path.expanduser('~/.photostory/photos/'))

# Sort photos (by date):
files.sort()

# Symlink photos to `temp`:
for i in range(len(files)):
    os.symlink(files[i], os.path.join(temp, str(i)+'.png')  

# Perform GStreamer operations on `temp`. #

# Remove `temp`:
shutil.rmtree(temp)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top