Autostart einer Videoaufnahme & Umwandlung

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja, natürlich. Was auch immer du da setzt, das wird dann eingeblendet.
gragtoni435
User
Beiträge: 10
Registriert: Donnerstag 9. Januar 2020, 10:00

__deets__ hat geschrieben: Sonntag 9. Februar 2020, 17:25 Ja, natürlich. Was auch immer du da setzt, das wird dann eingeblendet.
Glaube wir reden etwas aneinender vorbei.
Natürlich egal was ich da einsetze. Es ist eben nur eine sich ständig veränderter Wert in der X und Y-Koordinate.
Daher muss ich das ja so entsprechend hier einsetzen, dass es immer den neuen Wert dort automatisch einsetzt.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist schon klar & ändert die Antwort nicht. Du kannst das jederzeit umsetzen/ändern. Und das wird dann übernommen.
gragtoni435
User
Beiträge: 10
Registriert: Donnerstag 9. Januar 2020, 10:00

Ok andere Frage: Wie mache ich das. Hab momentan keinerlei Ansatz, wie ich das realisieren kann.
Momentan habe ich nur eine automatische Videoaufnahme wie folgt realisiert:
Im Verzeichnis: /home/pi/.config/autostart
ist die Camrecord.desktop Datei mit folgendem Inhalt:

Code: Alles auswählen

[Desktop Entry]
Type=Application
Name=camrecord
Comment=camrecord
Exec=lxterminal -e /bin/bash /home/pi/video.sh
Terminal=false
Die video.sh Datei hat wiederrum diesen Inhalt:

Code: Alles auswählen

#!/bin/bash

dateiname=/home/pi/video_$(date "+%Y_%m_%d-%H_%M").h264

/usr/bin/raspivid -t 300000 -w 1280 -h 720 -o $dateiname
Soweit so gut. Nun arbeite ich dran die Positionsdaten via Node-Red aus der CPU ständig abzufragen.
Diese Daten sollen dann eben ständig aktualisierend ins Video eingebunden werden.
Ich habe hier im Forum geschrieben, weil mir ein Kollege aus der Firma empfohlen hat, es mit Python zu versuchen, da es hier eventuell umzusetzen ist.
Aber meine Fragen sind eben wie wie wie..?

Ob meine jetzige Realisierung der automatische Videoaufnahmen dann komplett gelöscht werden kann und es sinnvoller ist, alles in Python zu realisieren, das kann ich nicht beurteilen.
Ich hab ja noch nicht mal eine automatische Videoaufnahme mit Python beim Boot des Raspberrys geschafft.

Hier habe ich lediglich mal folgende Datei erstellt
textonvideo.py

Code: Alles auswählen

from picamera import PiCamera
import time;

camera = PiCamera()
camera.resolution = (1280,720)

camera.start_preview()
camera.annotate_text = "Untertitel her"
camera.start_recording('Versuch.h264')
time.sleep(10)
camera.stop_recording()
camera.stop_preview()
Und habe dieses Datei versucht im rc.local zu starten:

Code: Alles auswählen

#
# By default this script does nothing.
p
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
python /home/pi/textonvideo.py &
exit 0
Hätte gemeint die einzige Bedienung hierfür ist lediglich, dass der Link vor dem Exit 0 sein muss.
Funktioniert hat das Ganze aber bislang nicht.

Außerdem wird bei dem Umsetzen mit der .Desktop Datei und dem Shell Skript die aktuelle Aufnahme ständig auf dem Display angezeigt, welcher mit dem Raspberry dauerhaft verbunden ist. Das ist optimal zum justieren und einstellen der Kamera.

Ist das bei Python auch möglich?

Beste Grüße!
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst die Aufnahme des Videos schon mit Python machen, wenn du da Kontrolle ueber die Untertitel haben willst. Und der Code den du gerade selbst gepostet hast, ist dafuer auch der richtige Ansatz - aber statt schlafen musst du schleifen, und eben die neuen Informationen (wie auch immer die aus dem Node Red rauskommen) abfragen, und einen entsprechenden Text setzen.

Hier ein kleiner Test, der ein Video mit 10 Untertiteln erzeugen sollte.

Code: Alles auswählen

from picamera import PiCamera
import time;

camera = PiCamera()
camera.resolution = (1280,720)

camera.start_preview()
camera.annotate_text = "Untertitel her"
camera.start_recording('Versuch.h264')
for i in range(10):
    camera.annotate_text = "Untertitel {}".format(i)
    time.sleep(1)  
  
camera.stop_recording()
camera.stop_preview()
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und ich denke mal das Anzeigen könnte das Problem sein wenn man das in rc.local startet (was es eigentlich nicht mehr geben dürfte auf modernen Systemen).
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das nochmal obendrauf, ja. Wobei man das "start_preview" ja auch weglassen koennte.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es wird hier dann weiter diskutiert: https://forum-raspberrypi.de/forum/thre ... /?pageNo=2
gragtoni435
User
Beiträge: 10
Registriert: Donnerstag 9. Januar 2020, 10:00

Hallo Nochmal,

da mir im anderen Forum keiner mehr weiterhelfen kann, versuch ich es hier nochmal.

Ich habe nun ein Skript, dass die Videoaufnahme bei Start des Raspberrys automatisch startet.
Siehe hier:

Code: Alles auswählen

from picamera import PiCamera
from time import sleep
import datetime
dateipfad = "/home/pi"
dateiname = datetime.datetime.now().strftime('%Y.%m.%d-%H%M%S')
videodatei = f"{dateiname}.h264"
print(videodatei)
camera = PiCamera()
camera.start_preview()
camera.start_recording(videodatei)
sleep(10)
camera.stop_recording()
camera.stop_preview()
Nun steht auch die Verbindung zwischen Raspberry Pi, OPC UA-Server und einer Siemens CPU (317-F).
Mithilfe von Node-Red frag ich ständig die X und die Y-Koordinate aus dem Programm ab.

Momentan schreibe ich diesen Wert in eine Text-Datei und der Wert wird alle 2 Sekunden überschrieben, damit immer nur der aktuelle Wert in der jeweiligen Textdatei steht.
Gibt es nun eine Möglichkeit in das obere Skript die Koordinate einzubinden, damit diese im Video angezeigt werden?
Oder muss man es gar nicht erst in Textdateien schreiben? Gibts in Node-Red auch eine Funktion/Baustein welche die Werte direkt für das Skript verfügbar macht?

Mein 1. Versuch war so

Code: Alles auswählen

for i in range (5):
    untertitel = open('/home/pi/X-Koordinate','r')
    camera.annotate_text(untertitel)
    sleep(1)
Geklappt hat hier aber nichts..

Danke & Beste Grüße!
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`dateipfad` wird definiert aber nirgends verwendet. `videodatei` ist als Name irreführend weil es sich um einen Datei*namen* handelt und nicht um ein Dateiobjekt. `dateiname` noch mal extra zu haben ist auch nicht wirklich sinnvoll, denn man kann das mit dem Datumsformat auch im Platzhalter bei der f-Zeichenkette regeln.

`untertitel` ist wieder ein irreführender Name, diesmal dann für ein Dateiobjekt. Es macht auch keinen Sinn ein Dateiobjekt als Beschriftung verwenden zu wollen. Zumal hier `annotate_text` versucht wird aufzurufen statt wie in den vorherigen Codebeispiel eine Zeichenkette an dieses Attribut zu binden‽

Ich hoffe X- und Y-Wert landen nicht jeweils in einer eigenen Datei, denn dann kann man ja nie sicher sein, dass die beiden Werte wenn man sie ausliest auch tatsächlich zusammen gehören.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
pumuckll
User
Beiträge: 56
Registriert: Donnerstag 30. August 2018, 17:45

Hab den Beitrag schnell überflogen, aber vielleicht hilft dir das weiter:

https://codecalamity.com/raspberry-pi-h ... ity-center

Ich Streame die Pi Cam im eigen Netzwerk
Die Aufnahme Startet automatisch, Datum und Uhrzeit wird eingefügt
Anstatt als Systemd Dienst könntest du die Aufnahme mit Python os.system starten.

Dei Ausgabe lässt sich auch leicht in einer Datei Speichen.

Gruss
Antworten