Machen Sie ein Video mit Python+GST aus einem Satz `yyyy-mm-dd`-datierter Bilder
Frage
Ich habe ein Verzeichnis mit einem Satz von YYYY-MM-DD
-Dated Dateien in AS SO:
pictures/
2010-08-14.png
2010-08-17.png
2010-08-18.png
Wie kann ich Python Gstreamer verwenden, um diese Dateien in ein Video zu verwandeln? Die Dateinamen müssen gleich bleiben.
Ich habe ein Programm, mit dem PNGs inkrementell nummeriert werden können. Ich muss es nur so anpassen, dass datierte Dateien verwendet werden.
Lösung
Am einfachsten wäre es, diese Datei in eine Sequenznummer zu erstellen/umzubenennen (die mit a leicht machbar sein sollte n=0 for f in $(ls * | sort); do ln -s $f $n && $n=$((n+1))
Dann sollten Sie in der Lage sein:
gst-launch multifilesrc location=%d ! pngdec ! theoraenc ! oggmux ! filesink location=movie.ogg
Es hätte mehr Sinn, einen anderen Encoder zu verwenden als Theora, vielleicht alle Bilder als Keyframe, vielleicht mit MJPEG?
Andere Tipps
Es ist einfach genug, die Dateinamen nach Datum zu sortieren:
import datetime, os
def key( filename ):
return datetime.datetime.strptime(
filename.rsplit( ".", 1 )[ 0 ],
"%Y-%m-%d"
)
foo = sorted( os.listdir( ... ), key = key )
Vielleicht willst du sie umbenennen?
count = 0
def renamer( name ):
os.rename( name, "{0}.png".format( count ) )
count += 1
map( renamer, foo )
Bezogen auf Der Bash -Code, den Elmarco gepostet hat, Hier finden Sie einen grundlegenden Python -Code, mit dem die datierten Dateien in einem temporären Verzeichnis nacheinander nummeriert sind:
# 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)