Zeitraffer start und stop

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Forum, habe noch ein kleines Problem:
    Ich möchte eine Zeitrafferaufnahme automatisch starten und stoppen. Hier habe ich schon mal das Start-Script:

    Code
    import os
    import time
    counter = 0
    while True:
            os.system("raspistill -rot 180 -w 1920 -h 1280 -o /media/spaceloop/pic" + str(counter) + ".jpg")
            counter = counter + 1
            time.sleep(10)


    Dieses würde ich mit cron einfach aufrufen. Nur, wie stoppe ich es wieder mit cron?

    Danke schon mal...

  • OK,Ich würde mir gerne diese Script umbauen.

    Code
    import time
    import picamera
    
    
    with picamera.PiCamera() as camera:
        camera.start_preview()
        time.sleep(2)
        for  in camera.capture_continuous('img{counter:03d}.jpg'):
            print('Captured %s' % filename)
            time.sleep(300) # wait 5 minutes


    Nur möchte ich die Bilder im Ordner auf meinem Stick speichern. /media/spaceloop.Wie bekomme ich das hin?

  • Danke, wird getestet.

    Also das Script startet nun mit cron. Aber es lässt sich nicht anhalten.Das steht in der cron:

    50 12 * * * python /home/pi/timelapse.py
    0 13 * * * pkill /home/pi/timelapse.py

    Wollte, das es 10 min. läuft.

    Einmal editiert, zuletzt von modulok (16. Januar 2015 um 13:15)

  • Du möchtest also alle 5 Minuten ein Bild machen? Für eine Laufzeit von 10 Minuten wären das also 2 Bilder.
    Soll das nur ein mal am Tag passieren, oder auch noch öfters?

    Es gäbe mehrere Möglichkeiten - jenachdem was du eigentlich machen willst.

  • Hm ja dann ist aber das Script aus Beitrag#7 falsch, denn das macht alle 5 Minuten ein Bild.

    Code
    import time
    import picamera
    
    
    with picamera.PiCamera() as camera:
        camera.start_preview()
        time.sleep(2)
        for filename in camera.capture_continuous('/media/spaceloop/img{counter:03d}.jpg'):
            print('Captured %s' % filename)
            time.sleep(300) # wait 5 minutes


    Du musst das halt so sehen das dieser Teil:

    Code
    for filename in camera.capture_continuous('/media/spaceloop/img{counter:03d}.jpg'):

    sich permanent wiederholt, für jede Aufnahme die er macht erstellt er eine Datei, danach pausiert er wie in Beitrag#7 angegeben für 300 Sekunden, dann beginnt die Schleife erneut: erstellt eine weitere Aufnahme und benennt die Datei fortlaufend, pausiert dann wieder für 300 Sekunden usw.

    Du möchtest jetzt eine Aufnahme um 05:00 Uhr starten, die um 10:00 Uhr wieder beendet werden soll. Dabei soll alle 10 Sekunden eine Aufnahme gemacht werden.

    Was man jetzt also machen könnte, wäre die Stunden zu zählen -> 5 Stunden * 60 Minuten * 60 Sekunden = 18000 Sekunden sind 5 Stunden. Alle 10 Sekunden ein Bild wären 1800 Bilder.

    Wenn man das so nehmen möchte, könnte das Script wie folgt aussehen:

    Einen weiteren Crontabeintrag zum Stoppen brauchst du dann nicht mehr.

    Desweiteren solltest du beachten das die Ausgaben des Scripts im syslog landen und dies ggf unnötig befüllt. Um das zu verhindern solltest du den Crontabeintrag so einrichten das Ausgaben in den Mülleimer geschickt werden:

    Code
    00 05 * * * /usr/bin/python /home/pi/timelapse.py >/dev/null

    Was aber glaub ich auch noch beachtet werden sollte ist das "counter" nur für das aktuell laufende Script gilt. Wird das Script neu gestartet ist "counter" wieder auf 0 und überschreibt ggf bereits vorhandene Dateien wie zB die von gestern.
    Wenn du das nicht möchtest solltest du dem filename auch noch ein Datum spendieren wie zum Beispiel so:

    Code
    for i, filename in enumerate(camera.capture_continuous('/media/spaceloop/img{timestamp:%d.%m.%Y}_{counter:04d}.jpg')):
  • Wenn es nur 1x sein soll dann so:

    Wenn du an mehreren Tagen aufnehmen willst, dann gibt es auch dafür wieder viele Wege (in Python)

  • Ja, das Script ist falsch, wird noch geändert. Das mit syslog habe ich nicht beachtet. Wie kann ich die Datei einsehen? Ich könnte auch auf die Ausgabe "print" verzichten. Ich denke, ich werde das Script auf die Bilderzahl beschränken, wie vorgeschlagen. Ich möchte ab und zu eine Zeitrafferaufnahme starten, nicht regelmäßig. Dann wäre das die beste Lösung. Und ich werde mir jeden Tag die Bilder auf den PC laden, löschen und weiterverarbeiten. Danke für die guten Tipps!

  • Du könntest auch den Vorschlag von bootsmann verwenden und beim aufrufen des Script die Laufzeit in Stunden übergeben, zum Beispiel so:

    um es 5 Stunden laufen zu lassen


    Das ließe sich auch erweitern mit der Pause zwischen den Aufnahmen, also die 10 Sekunden:

    um es 5 Stunden laufen zu lassen und alle 30 Sekunden ein Bild machen

  • Ich bekomme eine Fehlermeldung:

    Traceback (most recent call last):
    File "/home/pi/timelapse.py", line 15, in <module>
    end_zeit = datetime.now() + timedelta(hours=laufZeit)
    TypeError: unsupported type for timedelta hours component: str

    wenn ich diese Script starte. Kann man nicht die Zeit in timedelta einfügen?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!