Math animation library manim (3Blue1Brown)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Quaaak
User
Beiträge: 13
Registriert: Samstag 8. April 2017, 21:42

Hi zusammen!
Ich habe letztens Videos von 3Blue1Brown gesehen (YouTube) und war, wie alle anderen auch, begeistert von den wundervollen Animationen :P
Alles wurde in Python geschrieben und ist frei zugänglich.

https://github.com/3b1b/manim

Jetzt würde ich liebend gern selbst damit arbeiten. Da ich aber noch relativ neu in Python bin, fällt es mir schwer, nachzuvollziehen, wie alles aufgebaut ist.
Leider finde ich nirgends eine Art Tutorial oder wenigstens eine kurze Erklärung.
Kennt jemand ein Tutorial oder Erklärung dazu, die er mir verlinken kann?

Es scheint drei sehr grundlegende Klassen zu geben: Camera (camera.py), Scene (scene.py), TkSceenRoot (tk_sceen.py), in denen das Fenster erstellt wird und die einzelnen Frames erzeugt und schließlich als 'Film' zusammengefügt werden.

Wie kriege ich es nun aber hin, ein vollständiges Chapter zu zeigen (preview), z.B. chapter1.py in old_projects --> eoc?
Welchen code muss man noch schreiben, um es tatsächlich auch abzuspielen? Schließlich stehen bei den fertigen Animationen erstmal nur Klassen mit vielen, vielen Funktionen.
Wenn ich selbst solche Animationen schreiben will, muss ich eine Art code wie in den example_scenes schreiben, klar, aber wie kriege ich das ganze dann zum Laufen?


Ich hoffe, es kennt sich jemand damit aus und kann mir auf die Sprünge helfen, da ich mich damit sehr schwer tue.
Hoffentlich habe ich diese Frage in das richtige Forum geschrieben :oops:

Dankeschön für eure Hilfe!
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Nun ja, die Videos sind gut gemacht und ich verstehe das zumindest so, dass er jedem vorschlägt, sich zuerst Module wie Matplotlib, Mathematica oder Grapher anzusehen.

https://github.com/3b1b/manim/blob/master/README.md

Um einem derartigen Projekt einen Rahmen als Fensteranwendung zu geben, sollte sich PyQt oder auch andere verwenden lassen. Zum Aufnehmen würde ich an einen Screen Recorder denken, wo es wohl auch Lösungen in Python gibt oder Du nimmst halt eine Fertiglösung. Mag sein, dass nicht alles richtig war, habe mit Python auch noch sehr wenig Erfahrung.

Insgesamt benötigst Du einen leistungsfähigen Rechner, bei meinem letzten Versuch ist mir mit einem Screen Recorder für mehrere Minuten der Computer eingefroren. Und zusätzlich benötigst Du noch sehr viel Lebenszeit, würde ich vermuten.

Wenn Dir das alles zu viel sein sollte, für einfache 2D Animationen gibt es auch einfachere Lösungen, z.B. (würde ich mir denken, gemacht habe ich es bisher nicht) in dem Du mit einem Bildprogramm zuerst mehrere Images mit transparenten Background erstellst, diese mit JavaScript und CSS in einem Browser bewegst und den Ablauf mit einem Screen Recorder aufzeichnest.
BlackJack

@Melewo: Ich hatte das jetzt so verstanden, dass Quaaak das Projekt von Github *verwenden* wollte und sich nicht so etwas komplett noch mal selber in Qt programmieren will.

Screenrecorder ist die schlechtere Lösung wenn man sich die Einzelbilder der Animation auch erzeugen lassen kann. Insbesondere auch was die erforderliche Leistungsfähigkeit des Rechners und die Qualität der Aufnahme angeht. Wenn man die Einzelbilder generiert und die dann am Ende zu einem Video kodiert, kann man soviel Rechenzeit pro Einzelbild aufwenden wie man möchte. Also auch mehrere Minuten pro Einzelbild. Und man hat volle Kontrolle über die Anzahl der Bilder pro Sekunde. Beim Screenrecorder müssen die Bilder live in Echtzeit berechnet werden. Und man muss hoffen, oder irgendwie sicherstellen, das die Anzeige in der Anwendung mit dem Screenrecorder so synchron ist, dass der *alle* berechneten Einzelbilder erfasst werden und auch jeweils gleich oft — im Idealfall jedes genau einmal — so dass das Video gleichmässig erscheint und weder Sprünge noch Hänger enthält.

@Quaaak: In wie weit hast Du die Installation denn schon überprüft? Kannst Du Dir die Vorschau von dem Beispiel berechnen lassen wie das in der README auf Github beschrieben steht?
Benutzeravatar
BigZ
User
Beiträge: 30
Registriert: Mittwoch 1. Juli 2015, 21:18
Wohnort: Hamburg
Kontaktdaten:

Hab es gestern mal bei mir unter Linux ausprobiert, und mit der Installationsanleitung bekommt man es schon durchaus zum laufen.
Nur leider nicht alle Animationen.
Aber man kann wie in den example_scenes.py sich durchaus schon einfache Animationen selber basteln, die man dann mit

Code: Alles auswählen

python extract_scene.py -p example_scenes.py KlassenNamen
ausführen.
Einige Animationen brechen allerdings mit einer Fehlermeldung ab.
Hab bislang auch nicht heraus gefunden wie alles zusammen funktioniert, aber man kann sich in der examples_scenes.py einfach eine
Klasse schreiben und die dann ausführen. z.B.:

Code: Alles auswählen

class Test(Scene):
    def construct(self):
        circle = Circle()
        square = Square()
        rec = Rectangle()
        rec.rotate(np.pi/8)
        self.play(ShowCreation(circle))
        self.play(Transform(circle, rec))
        self.play(Transform(rec, square))
        self.dither()
und die dann mit

Code: Alles auswählen

python extract_scene.py -p example_scenes.py Test
starten.
Schon ziemlich cool :D

Edit fragt:
Wie lege ich eigentlich das styling der code box fest? Bild
Zuletzt geändert von Anonymous am Mittwoch 31. Mai 2017, 09:30, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
"Ist noch λ?"
"Ja, aber das ϕ ist noch ϱ"
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

BlackJack hat geschrieben:Screenrecorder ist die schlechtere Lösung wenn man sich die Einzelbilder der Animation auch erzeugen lassen kann.
Danke, das ist verständlich was Du schreibst. Eingefroren war mir der Rechner bei einem Musikprogramm mit virtuellen Instrumenten, als ich versuchte die Arbeitsschritte mit so einem Screen Recorder einschließlich Ton mitzuschneiden. Aber mit Animationen dürfte es sich ähnlich verhalten. Heute PIL ausprobiert, klappt schon einmal für den Anfang. Im Endergebnis sollte es nur darauf hinauslaufen, dass es sich mit Lightworks importieren lässt. Aber das wäre dann ein anderes Thema und mehr oder weniger Off-Topic.
Benutzeravatar
BigZ
User
Beiträge: 30
Registriert: Mittwoch 1. Juli 2015, 21:18
Wohnort: Hamburg
Kontaktdaten:

Die Issues bei Github sind übrigens bei Fragen um Repos immer wieder sehr hilfreich.
Wie kriege ich es nun aber hin, ein vollständiges Chapter zu zeigen (preview), z.B. chapter1.py in old_projects --> eoc?
Aus dem Issue 14

Code: Alles auswählen

python extract_scene.py eoc/chapter1.py OpeningQuote
Danach findest du eine .mp4 unter

Code: Alles auswählen

manim/files/movies/old_projects/eoc/chapter1/OpeningQuote.mp4
"Ist noch λ?"
"Ja, aber das ϕ ist noch ϱ"
Quaaak
User
Beiträge: 13
Registriert: Samstag 8. April 2017, 21:42

Danke für eure Antworten!

Ich habe das ausprobiert.

python extract_scene.py eoc/chapter1.py OpeningQuote

Leider meckert er rum :(

Code: Alles auswählen

Traceback (most recent call last):
  File "extract_scene.py", line 199, in <module>
    main()
  File "extract_scene.py", line 164, in main
    module = get_module(config["file"])
  File "extract_scene.py", line 158, in get_module
    load_args = imp.find_module(part, last_module.__path__)
ImportError: No module named eoc
Weiß vielleicht jemand, woran das liegt und was ich ändern muss?
Benutzeravatar
BigZ
User
Beiträge: 30
Registriert: Mittwoch 1. Juli 2015, 21:18
Wohnort: Hamburg
Kontaktdaten:

Sorry, mein Fehler.

Code: Alles auswählen

python extract_scene.py old_projects/eoc/chapter1.py OpeningQuote
"Ist noch λ?"
"Ja, aber das ϕ ist noch ϱ"
Quaaak
User
Beiträge: 13
Registriert: Samstag 8. April 2017, 21:42

BigZ hat geschrieben:Sorry, mein Fehler.

Code: Alles auswählen

python extract_scene.py old_projects/eoc/chapter1.py OpeningQuote
Ich habe das Gefühl, das hier einiges noch nicht stimmt. Leider habe ich keine Ahnung, was da falsch ist:

Code: Alles auswählen

Traceback (most recent call last):
  File "extract_scene.py", line 187, in main
    handle_scene(SceneClass(**scene_kwargs), **config)
  File "/Users/oliverportee/Documents/0_Python/5_manim/scene/scene.py", line 47, in __init__
    self.open_movie_pipe()
  File "/Users/oliverportee/Documents/0_Python/5_manim/scene/scene.py", line 426, in open_movie_pipe
    self.writing_process = sp.Popen(command, stdin=sp.PIPE)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 390, in __init__
    errread, errwrite)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1024, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
Scheint ja ein Fehler bei subprocess.py zu sein?
BlackJack

@Quaaak: Ich würde eher vermuten Dir fehlt ein Programm. Hast Du ffmpeg und LaTeX installiert?
Quaaak
User
Beiträge: 13
Registriert: Samstag 8. April 2017, 21:42

BlackJack hat geschrieben:@Quaaak: Ich würde eher vermuten Dir fehlt ein Programm. Hast Du ffmpeg und LaTeX installiert?
Danke für den Tipp!
Ich habe das nun installiert (LaTeX, ffmpeg und die requirements) und bekomme leider schon wieder eine Fehlermeldung:

Code: Alles auswählen

Writing to /Users/benutzer/Documents/0_Python/5_manim/files/movies/old_projects/eoc/chapter1/OpeningQuote.mp4
Writing "`` ''" to /Users/benutzer/Documents/0_Python/5_manim/files/Tex/-3165818387038147793.tex
Writing "\centering ``" to /Users/benutzer/Documents/0_Python/5_manim/files/Tex/5988200082902165726.tex
Writing "\centering ''" to /Users/benutzer/Documents/0_Python/5_manim/files/Tex/-8174076082184990836.tex
Writing "\centering -" to /Users/benutzer/Documents/0_Python/5_manim/files/Tex/-8120743575637995020.tex
  0%|                                                   | 0/300 [00:00<?, ?it/s]
sh: play: command not found
Weißt du vielleicht auch, was das zu bedeuten hat?
BlackJack

@Quaaak: Vermutlich hat der Autor vergessen Sox als Abhängigkeit aufzuführen. Da würde zumindest unter Linux ein ``play``-Kommando her kommen. :-)
Quaaak
User
Beiträge: 13
Registriert: Samstag 8. April 2017, 21:42

@BlackJack: Habe ich irgendeine Möglichkeit, das so zu verändern, dass es funktioniert?
BlackJack

@Quaaak: Sox installieren, oder ein `play`-Skript/Programm erstellen was ganz einfach nichts macht. Und hoffen das die Soundausgabe nicht wirklich wichtig ist. :-)
Benutzeravatar
BigZ
User
Beiträge: 30
Registriert: Mittwoch 1. Juli 2015, 21:18
Wohnort: Hamburg
Kontaktdaten:

Auch wenn du sox nicht installiert hast, liegt die Animation unter

Code: Alles auswählen

.../manim/files/movies/old_projects/eoc/chapter1/OpeningQuote.mp4
Kannst sie also eigentlich mit deinem Standard Videoplayer abspielen.
Hatte mir auch sox installiert, aber sox kam standardmäßig iwie nicht mit dem .mp4 format bei mir klar, weswegen ich dann doch auf meinen Standardplayer zurück gegriffen hab. ;)
"Ist noch λ?"
"Ja, aber das ϕ ist noch ϱ"
BlackJack

@BigZ: Nur weil MP4 nicht so ganz eindeutig ist: Sox ist für Audio und das ``play``-Programm hat nichts mit dem erzeugten Video zu tun. `manim` nimmt ``play`` scheinbar um am Ende einen Ton abzuspielen, damit man weiss, dass die Berechnung fertig ist. Deshalb auch mein Vorschlag einfach ein Skript mit dem Namen zu erstellen das nichts tut.
Benutzeravatar
BigZ
User
Beiträge: 30
Registriert: Mittwoch 1. Juli 2015, 21:18
Wohnort: Hamburg
Kontaktdaten:

Warum die nicht einfach espeak genommen haben? :D
Das sollte doch immerhin bei Ubuntu standardmäßig dabei sein und wäre viel lustiger :D
Aber ja, stimmt. Jetzt wo du es sagst. Sox ist für Audio.
Dachte wegen dem play Kommando das die Video Datei gestartet werden soll. *patsch*
"Ist noch λ?"
"Ja, aber das ϕ ist noch ϱ"
Quaaak
User
Beiträge: 13
Registriert: Samstag 8. April 2017, 21:42

Ok, ich habe sox nun auch installiert, wir nähern uns dem Ziel :)

Ich kann aber leider die Datei nicht öffnen. Vom z.B. QuickTime Player kommt die Meldung

Code: Alles auswählen

QuickTime Player kann „OpeningQuote.mp4“ nicht öffnen.
Auch VLC Player und elmedia Player spielen es nicht ab. Ich habe versucht, die Datei zu H.264 zu konvertieren, aber es bleibt erfolglos.

Liegt das an der Datei? Eigentlich kann QuickTimePlayer mp4 Dateien öffnen.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Dann wird wohl die Datei Fehler enthalten. Wie groß ist die Datei denn geworden, enthält die am Ende nichts?
Quaaak
User
Beiträge: 13
Registriert: Samstag 8. April 2017, 21:42

@Melewo: Sie hat 262 Byte. Hört sich ganz schön klein an?
Antworten