Faire une vidéo en utilisant Python + TPS d'un ensemble de photos `AAAA-MM-DD`-date
Question
J'ai un répertoire avec un ensemble de fichiers YYYY-MM-DD
à jour en tant que ceci:
pictures/
2010-08-14.png
2010-08-17.png
2010-08-18.png
Comment puis-je utiliser Python GStreamer pour transformer ces fichiers dans une vidéo? Les noms de fichiers doivent rester les mêmes.
J'ai un programme qui peut se transformer progressivement PNGs numérotés dans une vidéo, je juste besoin de l'adapter à utiliser des fichiers datés à la place.
La solution
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 judicieux d'utiliser un codeur différent de celui Theora peut-être, d'avoir toutes les images comme image clé, peut-être avec MJPEG?
Autres conseils
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 )
Basé sur le code Bash Elmarco affiché , voici un code Python de base qui les fichiers datés des liens symboliques numérotés de façon séquentielle à ceux 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)