Domanda

Ho un elenco con una serie di file YYYY-MM-DD-datato come modo:

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

Come posso usare Python GStreamer per trasformare questi file in un video? I nomi dei file devono rimanere gli stessi.

Ho un programma che può trasformare i file PNG in modo incrementale numerati in un video, ho solo bisogno di adattarlo a utilizzare i file datati al posto.

È stato utile?

Soluzione

Il modo più semplice sarebbe quella di creare un link / rinominare questi file per un numero di sequenza (che dovrebbe essere facilmente fattibile con un n=0 for f in $(ls * | sort); do ln -s $f $n && $n=$((n+1))

Poi si dovrebbe essere in grado di fare:

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

Si avrebbe più senso usare un encoder diverso rispetto Theora forse, per avere tutte le immagini come fotogrammi chiave, magari con MJPEG?

Altri suggerimenti

E 'abbastanza facile per ordinare i nomi dei file per data:

import datetime, os

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

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

Forse si desidera rinominare loro?

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

map( renamer, foo )

In base a codice Elmarco Bash postato , ecco qualche codice Python di base che creerà un link simbolico i file datati a numerati in sequenza quelli in una directory temporanea:

# 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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top