[Info] Alles rund um das Shooting beim Skripten

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Alles rund um das Shooting beim Skripten

Beitragvon msl » 06.12.2009, 13:15

Da doch einige an den vielen Möglichkeiten verzweifeln, das Shooting per Skript zu organisieren und bestimmte Werte für das Shooting zu setzen, möchte ich hier einen Grundlagen-Thread eröffnen. Von der fototechnischen Seite her wird nicht immer alles korrekt beschrieben sein. Es geht hier aber mehr um den Einsatz der Skript-Befehle. Da bitte ich um Verständnis.

Methoden der Auslösung

Es gibt mehrere Methoden, per Skript eine Auslösung zu erzeugen. Das gilt unabhängig von der verwendeten Skript-Sprache. Deshalb werden die nachfolgenden Beispiele in unterschiedlichen Sprachen präsentiert.

einfachste Methode (1)
Syntax: [ Download ] [ Verstecken ]
Benutze uBasic Syntax Highlighting
shoot
Erstellt in 0.005 Sekunden, mit GeSHi 1.0.8.9

Variante der einfachsten Methode (2)
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
click("shoot_full")
Erstellt in 0.004 Sekunden, mit GeSHi 1.0.8.9

ausführliche Methode (3)
Syntax: [ Download ] [ Verstecken ]
Benutze uBasic Syntax Highlighting
press "shoot_half"
sleep 1000
press "shoot_full"
release "shoot_full"
release "shoot_half"
sleep 1000
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9

verfeinerte ausführliche Methode (4)
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
press("shoot_half")
repeat
  until get_shooting() == true
press("shoot_full")
release("shoot_full")
release("shoot_half")
repeat
  until get_shooting() ~= true
Erstellt in 0.004 Sekunden, mit GeSHi 1.0.8.9


spezielle Methode (5)
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
press("shoot_half")
repeat
  until get_shooting() == true

for i=1 , 10 do

  click("shoot_full_only") -- Befehl nur in CHDK-DE verfügbar
  sleep(2000)

end

release("shoot_half")
repeat
  until get_shooting() ~= true
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9


Methode 1 und 2 unterscheiden sich fast nicht. Methode 2 ist etwas schneller (10 ms bei uBasic). Beide Methoden führen eine komplette Auslösung durch. Es wird eingemessen, fokussiert und ausgelöst. Methode 3 eignet sich zum Einfügen von Befehlen nach dem Fokussieren. Es können also Messergebnisse der Kamera berücksichtigt werden. Das gleiche gilt für Methode 4. Hier wird aber solange gewartet, bis die Kamera mit dem Messen und Fokussieren sowie dem Shooting fertig ist. Bei Methode 3 wurde dafür eine Wartezeit festgelegt. Das kann in ungünstigen Momenten evt. nicht ausreichen oder zu lang sein.

Methode 5 ist ein Sonderfall, der sich für Intervall-Aufnahmen eignet, bei denen nicht wiederholt eingemessen werden muss. Diese Methode zeichnet sich durch eine hohe Verarbeitungsgeschwindigkeit aus. Dadurch können sehr kurze Intervallabstände realisiert werden.

Zu beachten ist auch, dass die die komplette Auslösung Zeit beansprucht. Insbesondere Beim Skripten mit Lua muss unbedingt darauf geachtet werden, dass das Shooting abgeschlossen wurde, bevor man weitere Befehle im Zusammenhang mit einer Auslösung abarbeiten lässt. Das wird unter Methode 3 bedingt und unter Methode 4 vollständig beachtet.

Für diese verschiedenen Methoden haben wir diverse Möglichkeiten, auf Verschlusszeit, Blende/ND-Filter, Belichtung und ISO Einfluss zu nehmen. Dabei sollte man wissen, dass für diese Faktoren nicht immer jeder Wert unter jeder Bedingung einsetzbar ist.

Grundsätzlich gibt es zwei Varianten, Einfluss zu nehmen: a) vor dem Shooting und b) während des Shootings. Beide Varianten haben Ihre Vor- und Nachteile. Bei a) wird vor dem Auslösen alles festgelegt. Das ist einfach und unkompliziert. Variante b) hat den Vorteil, das von der Kamera gemessene Werte beeinflusst werden können. Die Ausführung ist aber komplizierter und nicht immer optimal in allen Situationen einsetzbar.

Welche Möglichkeiten der Einflussnahme bestehen nun?

Nachfolgend sprechen wir über die wichtigsten Befehle zur Einflussnahme auf das zu erstellende Foto. Es gibt wesentlich mehr Skript-Befehle in diesen Zusammenhang. Die meisten dieser Befehle dienen aber nur bestimmten Spezialanwendungsfällen.

Insbesondere sollen Befehle zum Einsatz kommen, die dem APEX-System entsprechen. Mit diesen können wir mathematische Abhängigkeiten besser darstellen. Man spricht auch vom APEX96-System, weil eine Belichtungseinheit dem Wert 96 entspricht. Der kleinste Belichtungswert ist 32 und entspricht 1/3 Belichtungseinheit. Das ist auch gleichzeitig die kleinste Stufe bei den Berechnungen. Im Anhang des CHDK-Handbuchs gibt entsprechende Werte-Tabellen.

Die grundlegende Formel für alle Berechnungen ist:
Code: Alles auswählen
Av+Tv=Bv+Sv

also

Blende(Av) + Verschlusszeit(Tv) = gemessene Helligkeit(Bv) + Empfindlichkeit(Sv)

umgestellt in zwei Gleichungen

Av+Tv=Ev
Bv+Sv=Ev

Ev entspricht der Belichtungseinheit


Belichtungskorrektur
Syntax: [ Download ] [ Verstecken ]
Benutze uBasic Syntax Highlighting
get_ev
set_ev
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
Wir gehen davon aus, dass ein fester oder automatisch ermittelter Wert der Empfindlichkeit (ISO) vorliegt und die Kamera das Objekt eingemessen hat. Dann können wir mit einer Belichtungskorrektur Einfluss auf Blende und Verschlusszeit nehmen. Mit get_ev erhalten wir den gegenwärtigen Wert der Belichtungskorrektur. Der wird, wenn nichts anderes an der Kamera eingestellt wurde, 0 sein. Soll die Belichtung nun per Skript korrigiert werden, benutzen wir set_ev. Der Wert -192 würde beispielsweise eine Korrektur von -2 Ev bedeuten.

Eine Besonderheit ist aber zu beachten. Canon-Kameras verhindern in den meisten Modi eine Belichtungszeit über eine Sekunde. Haben wir also eine Belichtungskorrektur vorgegeben, bei der die Kamera eigentlich länger als eine Sekunde belichten müsste, wird es zu unerwarteten Ergebnissen kommen.

set_ev sollte möglichst vor dem Shooting eingesetzt werden. Benutzt man diesen Befehl in Methode 3 oder 4 nach dem Fokussieren, kann es zu falsch belichteten Bildern und falschen Werten für die Exif-Daten kommen.

Verschlusszeit bestimmen
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
get_tv96()
get_user_tv96()
set_tv96_direct()
set_tv96()
set_user_tv96()
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9
Mit get_tv96 erhält man den im Augenblick von der Kamera vorgesehenen Belichtungszeitwert nach APEX-System. Der Wert muss nicht unbedingt durch 32 teilbar sein. Das liegt daran, dass die Belichtungsmessung "krumme" Werte liefern kann. Die Kamera wird den Wert aber entsprechend anpassen. Nach jedem Fokussieren wird dieser Wert neu ermittelt.

get_user_tv96 ist nur für Kameras mit einem Tv-Modus interessant. Der Befehl gibt den Wert für die in diesem Modus eingestellte Verschlusszeit zurück.

set_tv96_direct ist der wichtigste Befehl zum Setzen der Verschlusszeit. Er entspricht der Funktion "Ersetze Verschlusszeit" im CHDK-Menü "Extra-Foto-Einstellungen". Er wird immer die von der Kamera berechnete Zeit überschreiben. Man kann ihn in allen vier Methoden vor dem Shooting setzen. Konkrete Werte für bestimmte Verschlusszeiten sind im CHDK-Handbuch im Anhang gelistet.

set_tv96 kann man nur verwenden, nach dem die Kamera fokussiert und berechnet hat. Demzufolge kommen nur die Methoden 3 und 4 zum Einsatz.

set_user_tv96 ist wiederum nur für Kameras mit einem Tv-Modus interessant. Hier wird die Verschlusszeit für diesen Modus gesetzt.

Zusätzlich gibt es in Lua noch eine Möglichkeit, die Verschlusszeit zu steuern.
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
proptable=require "propcase"
set_prop(proptable.TV,wert)
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
Diese Methode setzt voraus, dass sich im CHDK-Unterordner LUALIB die Datei propcase.lua befindet. Damit lassen sich bei schwierigen Anwendungsfällen neue Verschlusszeiten zwischen Fokussieren und Auslösen setzen.

Blenden-Wert bestimmen
Syntax: [ Download ] [ Verstecken ]
Benutze uBasic Syntax Highlighting
get_nd_present
get_av96
get_user_av96
set_nd_filter
set_av96
set_av96_direct
set_user_av96
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
Zuerst sollte man feststellen, welches Blenden-System die Kamera verwendet. Hier kommen Iris-Blende und/oder ein ND-Filter zum Einsatz. Mit get_nd_present kann man feststellen, ob die Kamera einen ND-Filter hat.

Bei einer Iris-Blende können wir verschiedene Werte setzen, meistens zwischen 2.8 bis 8.0. Ein ND-Filter kann dagegen nur 2 Blenden-Werte einehmen, 2,8 und 8.0. Außerdem sollte auch beachtet werden, dass der Zoom Einfluss auf den Blenden-Wert hat. Je weiter in das Objekt hereingezoomt wird, desto geringer ist der Lichteinfall. Damit verringert sich auch der kleinste mögliche Blenden-Wert.

get_av96 gibt den Blenden-Wert als APEX-Wert aus.

get_user_av96 ist nur für Kameras mit Av-Modus anwendbar. Der Befehl gibt den in diesem Modus eingestellten Blenden-Wert zurück.

Mit set_nd_filter kan der ND-Filter ein- und ausgeklappt werden.

Die nächsten drei Befehle sind nur Kameras mit Iris-Blende nutzbar!

set_av96_direct ist der wichtigste Befehl zum Setzen der Blende. Er entspricht der Funktion "Ersetze Blenden-Wert" im CHDK-Menü "Extra-Foto-Einstellungen". Er wird immer die von der Kamera berechnete Blende in Abhängigkeit vom Zoom überschreiben. Man kann ihn in allen vier Methoden vor dem Shooting setzen. Konkrete Werte für bestimmte Blenden-Werte sind im CHDK-Handbuch im Anhang gelistet.

set_av96 kann man nur verwenden, nach dem die Kamera fokussiert und berechnet hat. Demzufolge kommen nur die Methoden 3 und 4 zum Einsatz.

set_user_av96 ist wiederum nur für Kameras mit einem Av-Modus interessant. Hier wird die Blende für diesen Modus gesetzt.

Belichtungsempfindlichkeit (ISO) beeinflussen
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
get_sv96()
set_sv96()
get_iso_real()
set_iso_real()
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9


Mit get_sv96 erhält man für den eingestellten oder automatisch ermittelten ISO-Wert den dazugehörigen Wert Belichtungsempfindlichkeit.

Mit set_sv96 kann man die Empfindlichkeit und damit auch den ISO-Wert bestimmen.

Die Befehle get_iso_real und set_iso_real lesen und setzen den real verwendeten Iso-Wert. Dieser ist nicht mit der Canon-eigenen ISO-Anzeige identisch! Das Setzen entspricht der Funktion "Ersetze ISO-Wert" im CHDK-Menü "Extra-Foto-Einstellungen".

Belichtung messen
Syntax: [ Download ] [ Verstecken ]
Benutze uBasic Syntax Highlighting
get_bv96
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
Dieser Wert ist wichtig, wenn man im Skript Verschlusszeit, Blende oder ISO-Wert berechnen möchte.

get_bv96 gibt den Wert der gemessenen Helligkeit als APEX-Wert zurück.


bestimmte Werte berechnen

Mit den bisher genannten Befehlen können wir nun einen bestimmten Wert berechnen. Dazu kommt die bereits genannte Formel
Code: Alles auswählen
Av+Tv=Bv+Sv
zum Einsatz. Um Fehler zu vermeiden, sollte die ISO-Einstellung der Kamera nicht auf AUTO oder HI stehen. Außerdem muss die Belichtungskorrektur auf 0 stehen.

Will man z.B. die notwendige Verschlusszeit ermitteln, wird die Formel entsprechend umgestellt.
Code: Alles auswählen
Tv=Bv+Sv-Av
Daraus folgend müssen die Werte für Bv, Sv und Av ermittelt werden. Deshalb wird per Skript einmal fokussiert.
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
press("shoot_half")
sleep(1000)
release("shoot_half")
A=get_av96()
B=get_bv96()
S=get_sv96()
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
Der Sleep-Befehl wird hier eingesetzt, damit die Kamera ausreichend Zeit hat, zu messen. Mit den aktuell ermittelten Werten wird nun die Verschlusszeit berechnet und ausgelöst.
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
set_tv96_direct(B+S-A)
shoot()
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
Wir gehen davon aus, dass Wert B (die gemessene Helligkeit) und A (der Blenden-Wert) unveränderlich sind. Wenn jetzt die Verschlusszeit zu groß ist, kann man diese verringern, indem man die Empfindlichkeit S erhöht.

Wer diese Abhängigkeiten einmal ausprobieren möchte, kann dazu das Skript "erweiterter Tv-Modus" ausprobieren.

Bisher haben wir immer für ein Gleichgewicht der Formel gesorgt. Deshalb bekommen wir bei der Abfrage der Belichtungskorrektur
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
E=get_ev()
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
das Ergebnis 0 für E. Wollen wir nun eine Belichtungskorrektur von einer Belichtungseinheit durchführen, sieht das wie folgt aus:
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
set_ev(E+96)
shoot()
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
Da B (gemessene Helligkeit) und S (Empfindlichkeit) festgelegt sind, hat die Belichtungskorrektur nur Einfluss auf Verschlusszeit und/oder Blende.



Weitere Möglichkeiten der Einflussnahme beim Shooting

Selbstverständlich können wir auch den Abstand zwischen Objektiv und Motiv (manuelles Fokussieren) selbst bestimmen. Dieses Thema ist aber so komplex, dass es dazu einen sehr umfangreichen Beitrag inkl. Skriptanwendung gibt.

Eine weitere interessante Möglichkeit ist das Einrechnen von Tonwertkurven. CHDK bietet damit Möglichkeiten, die es bisher nur in der elektronischen Bildverarbeitung (EBV) gab. Weiterführende Informationen dazu sindhier zu finden.

Sonderfall Videoaufzeichnung

Im Video-Modus kann eine Aufnahme mit folgender Sequenz gestartet und und beendet werden:
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
press("shoot_full")
sleep(300)
release("shoot_full")
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
Ein einfacher Shoot-Befehl funktioniert nicht, weil die Kamera die Fokussierungsprozedur in diesem Modus nicht versteht.


Wird (evt.) fortgesetzt ...
Zuletzt geändert von msl am 10.10.2010, 12:02, insgesamt 2-mal geändert.
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Alles rund um das Shooting beim Skripten

Beitragvon elektronikfreak » 13.12.2009, 18:21

msl hat geschrieben:Zu beachten ist auch, dass die die komplette Auslösung Zeit beansprucht. Insbesondere Beim Skripten mit Lua muss unbedingt darauf geachtet werden, dass das Shooting abgeschlossen wurde, bevor man weitere Befehle im Zusammenhang mit einer Auslösung abarbeiten lässt. Das wird unter Methode 3 bedingt und unter Methode 4 vollständig beachtet.

Hallo, erst mal vielen Dank für die schöne und ausführliche Erklärung. Das Zitat oben hört sich so an, als ob bei Methode 1 nicht sichergestellt sei, dass nach dem Auslösen lange genug gewartet wird. Das scheint aber nicht der Fall zu sein, ich habe das mit folgendem Skript ausprobiert:
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
print_screen(1)

t_vor=get_tick_count()
shoot()                                     -- sofort auslösen
t_nach1=get_tick_count()                    -- direkt nach shoot()
repeat until get_shooting() ~= true
t_nach2=get_tick_count()                    -- nach shoot() und warten
print("Meth1 direkt nach shoot:",t_nach1-t_vor)
print("Meth1 nach shoot/warten:",t_nach2-t_vor)
sleep(5000)     -- warte so lange, dass der Vorgang sicher beendet ist

t_vor=get_tick_count()
click("shoot_full")                         -- auslösen
t_nach1=get_tick_count()                    -- direkt nach Tastenfreigabe
repeat until get_shooting() ~= true     -- warten bis Belichtung fertig
t_nach2=get_tick_count()                    -- nach Tastenfreigabe und warten
print("Meth2 nach Tastenfreigabe:",t_nach1-t_vor)
print("Meth2 nach shoot/warten:",t_nach2-t_vor)
sleep(5000)     -- warte so lange, dass der Vorgang sicher beendet ist

press "shoot_half"                          -- AF ausführen
repeat until get_shooting() == true     -- warten bis AF fertig
t_vor=get_tick_count()
click("shoot_full")                         -- auslösen
release("shoot_half")
t_nach1=get_tick_count()                    -- direkt nach Tastenfreigabe
repeat until get_shooting() ~= true     -- warten bis Belichtung fertig
t_nach2=get_tick_count()                    -- nach Tastenfreigabe und warten
print("Meth4 nach Tastenfreigabe:",t_nach1-t_vor)
print("Meth4 nach shoot/warten:",t_nach2-t_vor)
 
Erstellt in 0.004 Sekunden, mit GeSHi 1.0.8.9

Bei einer Belichtungszeit von 1 s bekomme ich folgende Ausgabe:
Syntax: [ Download ] [ Verstecken ]
Benutze Diff Syntax Highlighting
Meth1 direkt nach shoot: 3990
Meth1 nach shoot/warten: 3990
Meth2 nach Tastenfreigabe: 120
Meth2 nach shoot/warten: 120
Meth4 nach Tastenfreigabe: 140
Meth4 nach shoot/warten: 3070
*** BEENDET ***
 
Erstellt in 0.001 Sekunden, mit GeSHi 1.0.8.9

Bei Methode1 geht es nach shoot() erst dann weiter, wenn der gesamte Vorgang beendet ist, es ist also kein zusätzliches Warten nötig.
Bei Methode2 geht es gleich nach dem Tastendruck weiter, erstaunlicherweise ist auch sofort get_shooting=false, so dass die Abfrage nicht weiterhilft.
Methode4 funktioniert dagegen wie erwartet. Die Ausführungszeit von Methode 4 ist kürzer als bei Methode1, da die Fokussierung ja schon vorher vorgenommen wird.

Gruß

elektronikfreak
A710IS, EOS500D
elektronikfreak
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 74
Registriert: 31.03.2009, 20:33
Wohnort: München

Shoot...

Beitragvon fe50 » 13.12.2009, 18:49

@msl
Guter Artikel !
Kleine Anmerkung noch zu SHOOT, Möglichkeit 1:

shoot unterscheidet sich von den anderen Möglichkeiten, hier wird z.B. bei den meisten Kameras auf propcase #205 (PROPCASE_SHOOTING) gewartet, bis es weitergeht - das verursacht das Problem mit dem shoot-Befehl bei manchen älteren Ixus Modellen (--> Ixus & der shoot - Befehl); das kann man/frau mit click/press umgehen.

shoot - also kbd_sched_shoot() in /core/kbd.c - beinhaltet auch weitere Abfragen (Flash - Blitz bereit) & Wartezeiten...

shoot ist also quasi der "Rundum-Sorglos-Knips" Befehl, der alles Nötige in Eigenregie regelt - nur bei den angesprochenen Ixus-Modellen macht der u.U. Probleme...

...was übrigens oftmals in Vergessenheit gerät: kbd_sched_shoot() fährt am Ende noch die Warteschleife mit dem Wert aus dem Script-Menü (conf.script_shoot_delay), früher per Default auf 20, heute auf 0 gesetzt (aber immer noch aktiv & verwendbar)...
◄"The grass was greener, The light was brighter"►  ◄fe50 home►  ◄TRAIL-Magazin►  ◄RTFM !►
Benutzeravatar
fe50
CHDK-Legende
CHDK-Legende
 
Beiträge: 1106
Registriert: 25.04.2008, 14:28
Wohnort: B'Württemberg
Kamera(s): Ixus50 101b, Ixus860 100c, SX10 101a

Beitragvon Stephan_T » 14.12.2009, 04:16

Hallo elektronikfreak,

ich habe dein Skript bei mir mal ausprobiert und mich zunächst auch darüber gewundert, wie bei "Methode 2" die Synchronisation schief geht. Wenn man sich msls Skript-Code der "verfeinerten ausführlichen Methode (4)" allerdings etwas näher anschaut, dann wird klar, worin da der Denkfehler liegt. Ein Shoot beinhaltet immer einen vorgeschalteten Shoot-Half, auch wenn er per click("shoot_full") ausgelöst wird.
Ähnlich wie beim shoot die Kamera die Synchronisation automatisch selbst übernimmt, wird auch hier der implizit durchgeführte Shoot-Half-Vorgang von der Kamera verwaltet. Das bedeutet aber, dass solange der Shoot-Half noch nicht abgeschlossen ist, die Abfrage "get_shooting" noch gar nicht auf true gesetzt wurde. Ich habe dein Skript mal dahingehend etwas erweitert, und dann kann man damit auch die Zeit des Shoot-Half messen:

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
t_vor=get_tick_count()
click("shoot_full")             -- auslösen
t_nach1=get_tick_count()            -- direkt nach Tastenfreigabe
repeat until get_shooting() == true     -- warten bis Belichtung startet
t_nach2=get_tick_count()  
repeat until get_shooting() ~= true     -- warten bis Belichtung beendet
t_nach3=get_tick_count()            -- nach Tastenfreigabe und warten
print("Meth2 nach Tastenfreigabe:",t_nach1-t_vor)
print("Meth2 nach shoot_half/warten:",t_nach2-t_vor)
print("Meth2 nach shoot_full/warten:",t_nach3-t_vor)
 
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9


Als Ausgabe erhalte ich dann:
Code: Alles auswählen
Meth1 direkt nach shoot%u3a 8040
Meth1 nach shoot/warten%u3a 8040
Meth2 nach Tastenfreigabe%u3a 90
Meth2 nach shoot_half/warten%u3a 570
Meth2 nach shoot_full/warten%u3a 7670
Meth4 nach Tastenfreigabe%u3a 150
Meth4 nach shoot/warten%u3a 7080
*** BEENDET ***


Das Shoot-Half benötigt hier also ca. 0,6s und ab dann ist erst get_shooting() == true
Dein Skript war da etwas zu ungeduldig und hat das Warten bereits abgebrochen, bevor überhaupt der eigentliche Shoot-Full (die Belichtung) gestartet wurde.

@msl: fe50 hat es ja bereits angesprochen: Der entscheidende Unterschied zwischen den Methoden liegt darin, dass der shoot-Befehl synchron abläuft, wärend man bei den UI-Befehlen (click, press und release) asynchrone Events auslöst, und man das Skript selbst zu synchronisieren hat. Die Pseudo-Synchronisation mittels Sleep-Aufrufen ist dabei allerdings eine etwas zwilichtige Schnellschusslösung. Damit kann man leicht Skripte basteln, die nur für kurze Belichtungszeiten funktionieren, aber die bei Langzeitauslösungen dann versagen. Aus meiner Sicht ist die Verwendung von Sleep-Befehlen immer eine Notlösung, die man tunlichst vermeiden sollte, wenn es auch besser geht.

Ich möchte hier noch ein paar Gedanken zum Thema Shoot anführen. Dazu zunächst eine Überlegung, was eigentlich alles (auch optional) zu einem vollständigen Shoot-Vorgang dazu gehört:

1. Zu jedem Shoot-Vorgang gehört IMMER ein vorgeschalteter Shoot-Half-Vorgang
1.1 Darin wird falls AF aktiv ist die Entfernung gemessen
1.2 Auch bei manueller Belichtungswahl werden manche Properties erst beim Shoot-Half korrekt initialisiert (Z.B. Ersetze ... Werte, siehe auch diesen Thread)
2. Nach Abschluss des Shoot-Halfs wird die Eigenschaft get_shooting auf wahr gesetzt.
3. Optional läuft hier der Selbstauslöser ab (bis hier läßt sich der Vorgang noch abbrechen)
4. Die eigentliche Belichtung beginnt
5. Optional (wenn nicht deaktiviert und die Belichtungszeit einen Bestimmten Wert übersteigt) folgt der Darkframe-Abzug, bei dem eine interne Belichtung mit gleicher Belichtungszeit, aber geschlossenem Verschluss stattfindet.
6. Optional (je nach dem ob und wie lange per Einstellung gewählt: 0, 2, 3, ...10, Halten) erfolgt die Rückschau. Dabei wird das erstellte Bild für den bestimmten Zeitraum angezeigt. Bei der Rückblick-Einstellung "Halten" wird im Skript nicht dauerhaft gehalten, sondern nur einige Sekunden.
7. Jetzt wird get_shooting wieder auf false geändert.

Beim manuellen Ablauf dieses Vorgangs (also wenn man's händisch und nicht per Skript durchführt) dann entscheidet man meist nach dem Shoot-Half, ob man wirklich den Shoot-Full auch auslösen will anhand der Statusrückmeldung für AF (spezieller Piepston und grünes Rechteck) und Belichtung (Zeit, bzw. Blende nicht rot)

Für die Skript-Programmierung wären dazu analoge Statusabfragen wünschenswert. Im Handbuch waren mir dazu aber keine passenden Funktionen aufgefallen.

Viele Grüße
Stephan
S3 IS (s3is-100a-1.0.0-DE-full rev.111)
Stephan_T
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 8
Registriert: 11.11.2009, 21:49

Beitragvon elektronikfreak » 14.12.2009, 08:06

Stephan_T hat geschrieben:Das bedeutet aber, dass solange der Shoot-Half noch nicht abgeschlossen ist, die Abfrage "get_shooting" noch gar nicht auf true gesetzt wurde.
Hallo Stephan, ich hatte das nicht weiter untersucht, weil für meine Zwecke ohnehin Methode4 interessanter ist. Aber deine Erklärung ist natürlich absolut plausibel. Gute Arbeit!

Ob der Fokus und die Belichtung ok sind, kannst du über die Properties abfragen, siehe hier, z.B. Property 67 für DigicII bzw. 18 für DigicIII/IV sagt, ob der AF erfolgreich war.

Gruß
elektronikfreak
A710IS, EOS500D
elektronikfreak
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 74
Registriert: 31.03.2009, 20:33
Wohnort: München

Beitragvon msl » 14.12.2009, 11:20

Hallo,

Danke für die sinnvollen Ergänzungen und Anmerkungen.

Mein ursprünglicher Gedanke war eine kurze Zusammenfassung der hier im Forum schon geschriebenen Informationen zum Thema Shooting im Skript, damit man bei entsprechenden Anfragen besser verweisen kann. Ab und zu wird ja kritisiert, insbesondere von jenen, die keine Lust zum Lesen und Stöbern im Forum haben, dass die "Insider" mit Ihrem Wissen zurückhalten.

Ein Befehl für die Statusabfrage wäre wünschenswert, ist aber nicht so einfach für alle Anwendungsfälle realisierbar. DigicII und III funktionieren hier zu unterschiedlich. Mit den schon genannten Propertycase-Variablen lässt sich aber eine Funktion erstellen, hier für Lua:
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
function af_ok()

    local af_state = 0

    if get_propset() == 1 then

        af_state = get_prop(67)

    else

        af_state = get_prop(18)

    end

return af_state

end
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9


Gibt die Funktion einen Wert größer 0 zurück, sollte der Autofokus in Ordnung sein. Mit einer Schleife
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
repeat

    until af_ok() == true
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
könnte man so lange warten, bis die Abfrage wahr ist. Hier läuft man aber Gefahr, in eine Endlosschleife zu geraten, wenn die Kamera nicht fokussieren kann. Deshalb ist es sinnvoll, in solche Schleifen eine Abbruchmöglichkeit einzubauen.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Stephan_T » 14.12.2009, 17:11

Hallo msl,

msl hat geschrieben:Gibt die Funktion einen Wert größer 0 zurück, sollte der Autofokus in Ordnung sein. Mit einer Schleife
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
repeat
    until af_ok() == true
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9
könnte man so lange warten, bis die Abfrage wahr ist. Hier läuft man aber Gefahr, in eine Endlosschleife zu geraten, wenn die Kamera nicht fokussieren kann. Deshalb ist es sinnvoll, in solche Schleifen eine Abbruchmöglichkeit einzubauen.


Das mit der Schleife verstehe ich ehrlich gesagt nicht so ganz. Um nach einem AF-Misserfolg nochmal einen neuen Versuch testen zu können, ist doch erst ein erneuter Shoot-Half (vielleicht sollte man es auch Pre-Shoot-Vorgang nennen) nötig.

Ich habe dazu mal mit deiner af_ok Funktion ein Beispielskript gebastelt:

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[
@title shoot
]]


function af_ok()
  local af_state = 0
  if get_propset() == 1 then
     af_state = get_prop(67)
    else
     af_state = get_prop(18)
    end
  if af_state>0 then
    af_state=true
   else
    af_state=false
   end
 return af_state
end


try_count=3

repeat
  try_count=try_count-1

  press("shoot_half")
  -- Begin of Preshoot Process (1.)
  repeat
  until get_shooting() == true
  -- End of Pre-Shoot-Process (2.)

  af_success=af_ok()
  if af_success~=true
    then release("shoot_half")
    sleep(100)
  end
     
until (af_success==true) or (try_count == 0)  

if af_success==true
 then
   press("shoot_full")
   -- Begin of Main Shoot Process (3. or 4.)
   release("shoot_full")
   release("shoot_half")
   repeat
   until get_shooting() ~= true
   -- End of Main Shoot Process (7.)
 else
   print "AF failed"
end
 
Erstellt in 0.004 Sekunden, mit GeSHi 1.0.8.9


Das sleep(100) wird benötigt, weil manchmal die zuschnelle Aufeinanderfolge von release und press anscheinend sonst nicht als zwischenzeitliches Loslassen erkannt wird.

Mit den original Return-Werten der af_ok() hatte ich bei den Abfragem "==true" allerdings anfänglich Probleme.


msl hat geschrieben:Mein ursprünglicher Gedanke war eine kurze Zusammenfassung der hier im Forum schon geschriebenen Informationen zum Thema Shooting im Skript, damit man bei entsprechenden Anfragen besser verweisen kann. Ab und zu wird ja kritisiert, insbesondere von jenen, die keine Lust zum Lesen und Stöbern im Forum haben, dass die "Insider" mit Ihrem Wissen zurückhalten.

Also ich möchte gerne meine Kritik ausschließlich als konstruktive Kritik verstanden wissen. Dabei geht es mir insbesondere darum, Anregungen zu geben, wo z.B. das Handbuch noch etwas verbessert und ergänzt werden könnte/sollte. Hat hier wirklich jemand behauptet, dass "Insider mit Ihrem Wissen zurückhalten"? Ich kenne es durchaus aus eigener Erfahrung, dass man als Insider (Entwickler) manchmal gedanklich etwas zu tief in einer Materie drinn steckt, um alle Verständnisklippen der Anfänger nachvollziehen zu können. Dazu dient ja gerade der Austausch innerhalb der Community. Von daher finde ich gerade diesen Thread und deinen Einstiegsbeitrag sehr wichtig und hilfreich. Insbesondere das Skript-Beispiel der "Methode 4" hat mir erst das Verständnis der Bedeutung von get_shooting() klar gemacht.
Die einzeiligen Beschreibungen im Handbuch "Info Auslösung, 1 während der Auslösung" reichen da halt doch nicht ganz um die ganze Semantik einer so bedeutsamen Funktion hinreichend zu erläutern.

Viele Grüße
Stephan
S3 IS (s3is-100a-1.0.0-DE-full rev.111)
Stephan_T
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 8
Registriert: 11.11.2009, 21:49

Beitragvon msl » 14.12.2009, 20:41

Hallo Stephan,

mein Hinweis zur Schleife war nur für diejenigen gedacht, die sich keine Gedanken zum Ausstieg aus der Schleife bei erfolglosem Fokussieren machen. Du hast es in Deinem Beispiel gezeigt, wie es gehen z.B. gehen könnte.

Die Kritik, von der ich sprach, betraf bestimmt nicht die konstruktiven Beiträge hier in diesem Thread. Wenn man sich hier aber einzelne Anfragen in diversen Themen durchliest, kommt man zu diesem Schluss. Und ja, die Behauptung stand im Raum! Ich möchte dazu hier jetzt aber nicht weiter eingehen und diesen interessanten Thread kaputt machen.

Noch eins zum Handbuch: Das Handbuch soll eine Übersicht und ein Einstieg in CHDK sein. Schon jetzt finden es viele zu umfangreich. Wenn man dann noch den Skript-Teil soweit ausbaut, dass jeder kameraspezifische Befehl ausführlich behandelt wird, würde das den Rahmen total sprengen. Ich denke aber, dass man hier im Forum oder evt. auf den Wiki-Seiten mit solchen speziellen Dingen besser aufgehoben ist.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon elektronikfreak » 14.12.2009, 22:32

msl hat geschrieben:Noch eins zum Handbuch: Das Handbuch soll eine Übersicht und ein Einstieg in CHDK sein. Schon jetzt finden es viele zu umfangreich. Wenn man dann noch den Skript-Teil soweit ausbaut, dass jeder kameraspezifische Befehl ausführlich behandelt wird, würde das den Rahmen total sprengen. Ich denke aber, dass man hier im Forum oder evt. auf den Wiki-Seiten mit solchen speziellen Dingen besser aufgehoben ist.
Gruß msl

Hallo msl,
da muss man unterscheiden zwischen CHDK-Einsteigern und Leuten, die sich schon etwas mit der Materie beschäftigt haben. Ich bin ja nun noch nicht so lange dabei und kann mich noch gut erinnern, wie ich das empfunden habe. Für einen Einsteiger ist vielleicht die Bedienung von vorhandenen Skripten interessant, aber wie man die erstellt, ist am Anfang "far off". Wer ansonsten (beruflich und privat) nichts mit Software zu tun hat, für den ist das alles sowieso Fremde Welt. Wer sich dagegen mit Skripting beschäftigt, hat wohl im Normalfall eine gewisse Affinität zu Software, und für so jemanden können Infos, wie sie z.B. in diesem Thread jetzt drinstehen, äußerst nützlich sein.
Aus der Erfahrung muss ich sagen, dass es ganz schön schwer sein kann, solche Infos zu finden. Z.B. beschäftige ich mich seit ein paar Tagen damit , dass get_dof nicht immer plausible Ergebnisse liefert. Natürlich weiß ich, dass die Funktion die Tiefenschärfe in mm zurückliefern soll, aber wie das realisiert ist und unter welchen Voraussetzungen es funktioniert, finde ich nirgends, also helfen nur eigene Versuche weiter. Die kann ich natürlich hier im Forum dokumentieren, aber dort stehen dann eben zuweilen auch meine Irrwege.
Alles in allem ist es teilweise mühsam, im Forum solche Infos zu finden, zumal die Suchfunktion des Forums irgendwie auch nicht immer richtig funktioniert.
Am besten wäre ein zweites Handbuch "CHDK-Skripting". Ich weiß, sowas macht eine Menge Arbeit - aber ich wäre auch bereit, meinen Teil beizusteuern.

Gruß

elektronikfreak
A710IS, EOS500D
elektronikfreak
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 74
Registriert: 31.03.2009, 20:33
Wohnort: München

Beitragvon msl » 15.12.2009, 00:06

Hallo elektronikfreak,

ich kann Deine Einwände verstehen. Du gehörst zu den Nutzern, die auch verstärkt hinter die Dinge schauen und nach Erklärungen suchen. Es gibt aber auch andere, die nicht ansatzweise versuchen, selbst Sachverhalte nachzulesen und herauszufinden - letztes Beispiel. Da fragt man sich dann, warum man überhaupt irgendeine Dokumentation schreibt.

Wir hatten auch schon diverse Überlegungen angestellt, dass Handbuch aufzuteilen, sind dann aber zu dem Entschluss gekommen, es in der vorliegenden Form zu belassen. Es wäre aber sehr schön, wenn jemand eine Art erweiterte Dokumentation insbesondere zum Thema Skripten in die Hand nehmen würde.

Im Übrigen wurde die Suchfunktion im Forum mit den Google-Möglichkeiten erweitert.

Wir sollten nun langsam wieder zum eigentlichen Thema zurück kommen. Der Thread ist ja schon mal ein Ansatz zu erweiterten Informationen zu Skript-Befehlen.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Alles rund um das Shooting beim Skripten

Beitragvon msl » 20.07.2011, 13:34

Hallo Skriptiker,

mit Revision 711 hat eine Ergänzung für das Shooting in Skripten Einzug gehalten, die besondere Bedeutung für Intervall-Aufnahmen (Zeitraffer) haben kann.

Es handelt sich dabei um den Tastatur-Befehl "shoot_full_only", der mit press, release und click angewendet werden kann. Mit diesem Befehl kann man eine schnelle Abarbeitung des Shootings erzwingen. Dabei werden aber keinerlei Werte gemessen. Deshalb sollte man zuvor ein "shoot_half" zum Ermitteln der notwendigen Werte ausführen.

Im Eingangsartikel zu diesem Thema wird dieser Anwendungsfall als Methode 5 beschrieben.

Mit der beschriebenen Methode lassen sich relativ kurze Zeitabstände realisieren. Erwartet aber keine Wunderdinge. Auch hier gilt, CHDK kann die Hardware-Grenze der Kamera nicht überwinden.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Alles rund um das Shooting beim Skripten

Beitragvon TÃœVtler » 27.08.2012, 21:45

Hallo MSL

Ich habe zwar schon einige schöne Sachen mit CHDK gemacht, nun aber bin ich mit meinem Latein am Ende.
Folgendes Problem:

Ich mache mit der Methode 1 Daueraufnahmen (Power Shot A800) von einem Modellflugzeug aus. Um das Verwackeln zu minimieren erzwinge ich mit dem "Ersetze Verschlußzeit" eine Belichtungszeit von 1/800. Damit bekomme ich keine wirklich guten Aufnahmen hin. Bei Mittagssonne ist alles Überbelichtet und nach Sonnenuntergang alles zu dunkel. Die ISO Werte ändern sich nur im Beriech 100 bis 200 in Programm Modus und bis zu 400 im Automatik Modus. Selbst wenn im Display Iso 800 angezeigt wird ist die Tatsächliche Iso der Aufnahme nur 200.
Ist hier eine Bertenzung eingebaut, oder habe ich einen totalen Blödsinn programmiert??

Das sind meine Einstellungen der Ersatzwerte:
Sperre Ersatzwerte - off
inkl. AutoISO ... nicht aktiv
ersetze verschlusszeit 1/800
..
Benutzer Iso nicht aktiv.

LG aus Oberösterreich
TÃœVtler
TÃœVtler
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 21
Registriert: 21.01.2011, 23:18
Wohnort: Oberösterreich
Kamera(s): Ixus 60 zerstört durch Absturz
PowerShot SX 200 IS
PowerShot A800
IXUS 220HS

Re: Alles rund um das Shooting beim Skripten

Beitragvon Knarf » 27.08.2012, 22:04

Meine Bescheidenes Wissen sagt mir das kann nicht funktionieren. Du schiebst der Automatik die die Verschlusszeit ausgesucht hat ein fach 1/800 sec unter da kommen immer verschieden Belichtete Bilder heraus.
Besser wäre vielleicht in einen Sport Modus zu gehen oder wenn nicht vorhanden in denn Kinder Modus und keine Verschlusszeit vor zugeben oder besser die Verschlusszeit wenn es bei einer A800 geht in der Kamera vorzugeben, nicht in CHDK.
Sehe gerade das die A800 nur im P Modus was ändern kann also das einzige ist der ISO Wert fest ein zu stellen z.b. ISO400 oder größer?
Bin gespannt was ein Scripter dazu sagt.

Gruß Knarf
Knarf
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 472
Bilder: 2
Registriert: 28.12.2011, 17:42
Kamera(s): SX130IS 101c
CHDK-DE-Modulversion

Re: Alles rund um das Shooting beim Skripten

Beitragvon msl » 27.08.2012, 22:44

Hallo,

das Problem hat erst mal nichts mit einem Skript zu tun, da der Befehl shoot() verwendet wird. Es wird nichts per Skript verändert, was die Belichtung beeinflusst.

Alle relevanten Werte für die Belichtung werden vorab eingestellt, AutoISO und feste Belichtungszeit 1/800s.

Die Einstellung AutoISO ist in diesem Fall kontraproduktiv. Der berechnete ISO-Wert bezieht sich auf die von der Kamera berechneten Verschlusszeit. Diese wird wiederum mit 1/800s überschrieben. Damit passt dann der ISO-Wert auch nicht mehr, mal davon abgesehen, dass die Kamera auch gerade zufällig 1/800s berechnet hatte.

Ersetzt man die Verschlusszeit, sollte ein fester niedriger ISO-Wert eingestellt werden. Damit wird aber auch klar, dass solche Einstellungen nicht für jede x-beliebige Situation anwendbar ist. Man muss die Einstellungen immer wieder auf gegenwärtigen Verhältnisse abstimmen.

Sollen unterschiedliche Lichtverhältnisse berücksichtigt werden, könnte man sich notfalls mit der CHDK-BenutzerautoISO-Funktion behelfen, da man hier eine minimale Untergrenze der Verschlusszeit einstellen kann. Dann darf aber "Ersetze Tv" nicht zur Anwendung kommen.

Wenn man sowieso ein Skript in Benutzung hat, wäre der bessere Weg, die notwendige Verschlusszeit zu berechnen. Unterschreitet diese einen bestimmten Wert, kann der ISO-Wert schrittweise angepasst werden. Das wird in ähnlicher Weise bei allen Skripten angewendet, die sich mit Intervallaufnahmen bei Tag und Nacht beschäftigen.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Alles rund um das Shooting beim Skripten

Beitragvon TÃœVtler » 28.08.2012, 21:46

Hallo zusammen

Vielen Dank für die Hilfe. Mein "Knoten" ist endlich gelöst.
Mit den Auto ISO Einstellungen komnnte ich 1/500 Belichtungszeit erzwingen und dennoch richtig gut beilichtete Bilder machen.
Manchmal benötigt man einfach Freunde die einem aus dem Chaos helfen.

Danke und LG aus OÖ
TÃœVtler
TÃœVtler
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 21
Registriert: 21.01.2011, 23:18
Wohnort: Oberösterreich
Kamera(s): Ixus 60 zerstört durch Absturz
PowerShot SX 200 IS
PowerShot A800
IXUS 220HS

Nächste

Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste

cron