Home
Navigation
Impressum
Coder Welten - Programmierung und Optimierung
Coder Welten
 
 

 

 

Tkinter App: Animationen mit Python und 2D Movie Szenen

Vorbemerkungen zur App:

Vieles von dem, was den nachfolgend beschriebenen Funktionsumfang der vorge­stellten Anwendung anbelangt, können neuzeitliche Filmschnittprogramme nicht minder gut erledigen, einiges sogar schneller, übersichtlicher für den Anwender und vieles möglicherweise besser. Für andere Aufgaben würde hingegen zusätzliche Soft­ware für 3D-Animation benötigt, die dafür wesentlich umfangreicher ausge­stattet wäre. Doch diese Anwendung wurde nicht entwickelt, um mit guten Schnitt­programmen mitzuhalten oder 3D Anwendungen Konkurrenz zu machen. Sinn und Zweck bestand mehr darin, sich in Python weiter einzuarbeiten.
Heraus kam dabei eine Anwendung, die sich nicht als Filmschnittprogramm ver­steht, sondern als eine vorbereitende App, mit der Sequenzen und Szenen vorbe­reitet werden, die dann von jedem Filmschnittprogramm einfach importiert werden können, welches durchnummerierte Images als Sequenzen akzeptiert.

Übersicht / Seite:

  1. 2D MovieSzenen (Vorbemerkungen zur App und Einführung)
  2. Verzeichnisstruktur (Struktur, Module und Programmabläufe)
  3. Simple Verschiebungen (Positionsänderungen von Objekten)
  4. Transformationen (Größenänderungen von Objekten)
  5. 2D Kreise und Ellipsen (Bahnen und Abläufe berechnen)
  6. Ken Burns Effekt (...)

Einführung in den Aufbau

Die zur Anwendung gehörenden Scripts verteilen sich auf mehrere Verzeichnisse, wobei sich auf der obersten Ebene zwei "movie"-Module befinden, die sich aber nur durch ihre Endung *.py und *.pyw unterscheiden. Dabei ist die Datei movie.pyw zur Verknüpfung auf dem Desktop besser geeignet, es öffnet sich kein Kon­solen­fenster im Hintergrund.

Dass eine Python-Anwendung nur laufen wird, wenn Python bereits als Umgebung auf dem Rechner installiert wurde, wird als bekannt vorausgesetzt, denn Windows fragt zumindest nach, womit sie diese Anwendung ausführen möchten. Sie können für die movie.pyw die pythonw.exe auswählen. Eine richtige Installation ist hingegen nicht erforderlich, so dass die App praktisch in einem beliebigen Verzeichnis abge­legt werden kann.

Beim Start der Anwendung öffnet sich die movie.pyw (falls nicht *.py ausgewählt wurde) und mit ihr das eigentliche Arbeitsfenster. Diese enthält die Klasse Movie mit einer Vielzahl an Methoden, darunter die Methode Layout. Die Größe des aktuellen Layouts wurde auf 1280 x 720 Pixel zugeschnitten, was für YouTube Videos bislang noch genügen sollte. (Stand: 2021)
Es sei angemerkt, die Größe der Fläche lässt sich am einfachsten durch das Laden eines Hintergrundbildes verändern. Eine Anpassung ist aber auch in Zeile 96 der movie.py(w) möglich. Soll eine dauerhafte Anpassung erfolgen, muss weiterhin der Wert in Zeile 149 und 150 der Datei movie_funktionen.py (Verzeichnis ressourcen) entsprechend angepasst werden. Für Testzwecke ist eine kleinere mini-matrix.png beiliegend, auf eine größere wurde bisher verzichtet, weil dann weitere Änderungen erforderlich wäre.

Bild 1: Ansicht des Arbeitsfensters

Ansicht Arbeitsfenster

[Vollansicht]

Der Anwendung liegen einige Muster für Testzwecke bei, die im weiteren Verlauf noch mit den zugehörigen Funktionen besprochen werden. Über den Tab "Szene öffnen" lassen sich diese laden. Für den Anfang wäre es wichtig zu wissen, bei jeder Änderung innerhalb einer Szene-Datei ist selbige neu zu laden und der Reset Button zu benutzen.

Nach dem Start einer Szene werden einige laufende Werte angezeigt, wobei die Lauf­zeit sich nicht auf die Spielzeit bezieht, sondern lediglich anzeigt, wie lange das Script bisher läuft. Die Spielzeit gibt hingegen wieder, wie viele Sekunden Filmzeit die bisherige Anzahl der Bilder bei fps 25 ergeben würde.
Im Beispiel vom Screenshot lag die Laufzeit des Scripts bei 10 Sekunden, in denen 102 Einzelbilder gefertigt wurden, die eine Spielzeit von rund 4 Sekunden ergeben. Die Laufzeit sollte mehr im Zusammenhang mit Intervall in Millisekunden (ms) beachtet werden, eine Einstellung von 40 ms ist nur ein mittlerer Richtwert. Für einfache Objekte ohne Speicherung kann dieser Wert etwas tiefer angesetzt wer­den, für größere Objekte mit Speicherung sollte der Anwendung etwas mehr Zeit gegeben werden, eine höhere Anzahl von Einzelbildern zu erstellen. Ein Wert von 60 bis 80 ms könnte dann eher geeignet sein, was letztendlich aber auch von der Leistungs­fähigkeit des Rechners abhängt.

Der Wert für "Einzelbilder" sollte immer wenigsten dem in einer Szene definierten nim-Wert entsprechen. Nur so ist sichergestellt, dass die letzte xy-Koordinaten auch in den Logs erfasst werden kann. Dieser Wert aus den Logs kann dann dafür genutzt werden, um mit einer weiteren Bildsequenz nahtlos an die letzte Position einer bereits erstellten Sequenz anzuknüpfen. Liegt die Eingabe im Feld "Einzel­bilder" etwas höher, so hat dies keine negativen Auswirkungen, da die jeweilige Funktion dennoch nur bis zum durch "nim" vorgegebenen Wert ihren Dienst ver­richten und die letzte Position speichern wird.
Es sei angemerkt, eine Speicherung der letzten Position bzw. der letzten Koor­di­naten wurde nur für die Funktionen "berechne_verschiebung()" und "berechne­_zoom()" umgesetzt, um die Logs nicht unübersichtlich werden zu lassen. Wer von den anderen Funktionen die Werte erfassen möchte, kann die Anwendung über IDLE starten und mit einer einzufügenden Print-Anweisung die laufenden Werte erfassen. Ein auskommentiertes Beispiel für eine Printanweisung befindet sich in Zeile 342 der Datei "movie_funktionen.py", welches bei Bedarf einkommentiert werden kann.


Struktur, Module und Programmabläufe

Bei der Programmierung wurden nur Module von Python Libraries verwendet und importiert, die bereits bei einer Python Standard Installation anbei waren, so dass für diese Anwendung keine zusätzlichen Module oder Libraries erforderlich wurden.

Was die Verwendung von eigenen Modulen anbelangt, dazu müsste zuerst einmal der Begriff Module näher geklärt werden, denn diese Anwendung lässt sich eigent­lich nicht in einzelne Module zerlegen. Klassen, Methoden und Funktionen in unter­schiedlichen Dateien bauen aufeinander auf und bilden nur in ihrer Gesamtheit eine funktionsfähige Einheit. Wenn man so möchte, so ist jede Szene ein Modul für sich, denn diese können neu angelegt, gespeichert, in ein Archiv verschoben, später erneut geladen usw. werden. Ohne eine Szene Datei hingegen läuft die Anwendung nicht.
Was die Struktur anbelangt, einiges dürfte bereits aus Bild 2 hervorgehen, so sehr komplex ist diese nicht. Dennoch kann es von Vorteil sein, diese Struktur im Groben zu kennen.

Bild 2: Verzeichnisstruktur (Erweiterungen möglich)

Ansicht Verzeichnisstruktur

[Vollansicht]

Im Verzeichnis "movies" befinden sich die Dateien movie.pyw und movie.py, auf beide wurde bereits weiter oben eingegangen. Diese beiden Dateien enthalten jeweils die Klasse Movie. Wird eine von beiden Dateien aufgerufen, so werden zu­sätzlich die Funktionen aus der Datei movie_funktionen.py und die Klasse Szene aus der Datei class_szene.py aus dem Verzeichnis ressourcen importiert. Die class Szene und die class Movie stehen in einem verwandtschaftlichen Verhältnis zuein­ander und sind aufeinander angewiesen. Die Anwendung lässt sich öffnen, doch sie tut noch nichts.
Damit sie etwas tut, muss noch eine Szene geladen werden, die vorher angelegt wurde. Filmschnitt- oder 3D Programme besitzen eine Timeline, doch bei der hier vorsgestellten Anwendung notiert der Nutzer die zeitliche Abfolge als Anzahl von Einzelbildern in einer Szene-Datei. Besser würde klingen, eine Szene Datei gleicht dem kleinsten Baustein eines Drehbuches.
Die Szene-Datei setzt die Anzahl der Einzelbilder in die Anzahl an Funktionsaufrufen um. Den Impuls dafür erhält sie nach einem Klick auf Start von einer Python after Methode. Damit eine Szene Datei innerhalb eines bestehenden Scripts ausgeführt werden kann, muss diese Datei mit "exec" geladen werden, wodurch der enthaltene Code ausführbar wird. Letztendlich hat es eine gewisse Ähnlichkeit mit einer Include Anweisung in anderen Programmiersprachen.

Wenn nun alles importiert und geladen wurde, so ist der Ablauf verständlicher, dass in den Szene Dateien die in der Klasse Szene definierten Methoden self.pruefe­_objekt und self.pruefe_szenenpfad aufgerufen werden, sowie die in der movie_funktionen.py definierten Funktionen. Letztere führen die eigentlichen Be­rech­nungen der Bahnen und Abläufe aus und sollten nur von sehr erfahrenen Programmierern verändert oder erweitert werden.

» Download? In Vorbereitung! «

 
Navigation

Einstieg in Python

 


OOP mit Python

 


Codes & Tutorials

 

Weitere Themen

Kleines Projekt

 


Copyright © Verlag Horst Müller - Stendal - 2006 - Impressum - Datenschutz - Nutzungsbedingungen