2010-08-19 3 views
0

J'ai un répertoire avec un ensemble de fichiers YYYY-MM-DD -dated en tant que ceci:Faire une vidéo en utilisant Python + TPS d'un ensemble de `AAAA-MM-DD` RETROACTIVE photos

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

Comment puis-je utiliser Python GStreamer pour transformer ces fichiers en une vidéo? Les noms de fichiers doivent rester les mêmes.

J'ai un programme qui peut transformer des PNG numérotés par incréments en une vidéo, j'ai juste besoin de l'adapter pour utiliser des fichiers datés à la place.

+0

Que savez-vous comment faire - est-ce un question sur GStreamer, Python, les fixations, quoi? – katrielalex

+0

@katrielalex: Juste la partie spécifique à la date. J'ai mis à jour la question. – Zaz

+0

Toujours pas assez d'informations, j'ai peur - * comment * votre programme prend-il dans ces PNG incrémentalement numérotés? Autrement dit, voulez-vous un script pour les renommer? Pour trier la liste des noms de fichiers? Pour créer des liens symboliques? – katrielalex

Répondre

0

Le plus simple serait de créer un lien/renommer ces fichiers à un numéro de séquence (qui devrait être facilement réalisable avec un n=0 for f in $(ls * | sort); do ln -s $f $n && $n=$((n+1))

Ensuite, vous devriez être en mesure de le faire:

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

Il aurait plus logique d'utiliser un codeur différent de celui Theora peut-être, d'avoir toutes les images comme image clé, peut-être avec MJPEG

+0

La théorie est utile mais elle ressemble au code de Bash/Sh. – Zaz

+0

avez-vous de la difficulté à convertir le pipeline donné en programme python? – elmarco

+1

Non, je l'ai déjà fait. Merci pour le code de toute façon =) – Zaz

0

Il est assez facile de trier les noms de fichiers par date:

import datetime, os 

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

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

Peut-être que vous voulez les renommer?

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

map(renamer, foo) 
0

Basé sur the Bash code elmarco posted, voici un code Python de base qui un lien symbolique les fichiers datés séquentiellement dénombrés dans un répertoire temporaire:

# 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) 
Questions connexes