noch immer nicht gelöst.
Code: Alles auswählen
;MEXDatum Modifiziere EXif DaTum von Video-Dateien mit EXiftool
;exiftool.exe "-filemodifydate<createdate" "-filecreatedate<createdate" *.MP4 =>> Zeiten kopieren
;exiftool.exe "-filemodifydate<createdate" "-filecreatedate<createdate" G*.MP4
;-------------------------------------------------------------------------------------------------------
EnableExplicit
#Mainwindow = 1
Enumeration Gadgets
#Button_Pfad_Wahl ; Pfadwahl
#Button_Start_Datumsaenderung ; Start Zeit ändern
#Button_Ende_Prgr ; Programmende
#Button_Exif_Start ; Start ExifTool
#Button_Exif_Verzeichnis_suchen ; Verzeichnis mit dem ExifTool
#combogadg_DaT_Art ; Erstell- / Änderungddatum
#combogadg_DaT_Std ; Anzahl Stundenverschiebung
#Combogadget_Datei_Wildcards ; Dateiart Wildcards einstellen G*.MP4 / *.MP4 / *.*
#EDGadget_Text_Ausgabe ; Anzeige Exifverzeichnis
#TxtGadg_Std_Korr ; Anzeige der Stundenkorrektur
#Textgadget_Arbeistsverzeichnis ; Zeigt den Pfad an
#TxtGadget_Zeit ; Zeigt die aktuelle Dateizeit
#TextGadget_Exif_Pfad ; Anzeige ExifPfad
#ProzessbarGadget
#CheckboxSticky
EndEnumeration
Enumeration #PB_Event_FirstCustomValue
#EventBeginProcessing
#EventProcessingFinished
EndEnumeration
#TxtRunProgLaufzeit = "Laufzeit "
#TxtZeiteinheit$ = " ms"
#TxtRunPrgOK$ = "OK"
#TxtRunPrgError$ = "Fehlercode: "
#TxtRunPrgFATAL$ = "Fataler Fehler "
#TxtProg_nicht_gefunden$ = "Programm nicht gefunden: "
#NewLine=#CRLF$ ;Windows neue Zeile
Structure Pfade
Exif_Pfad$ ; Pfad zum ExifTool einschließlich #EXIF_Executable$
EXIF_Executable$ ; "ExifTool.exe"
Exif_Kommando$ ; Exiftool Parameter
Arbeitsverzeichnis$ ; Arbeitsverzeichnnis mit den Dateien
Datei_Parameter$ ; Wildcards G*.MP4, *.MP4, *.MOV
WatchDogTime.i ; check on working tool
EndStructure
Global Parameter.Pfade
Global datum$ = FormatDate("%dd.%mm.%yyyy.%hh:%mm:%ss",Date())
Global datums_flag = #PB_Date_Created
Global shift_hour_flag = 0 ; Stundendifferenz (-2)-(-1)- 0 - (+1) -(+2)
Global Ausgabetext$ ; "Datenausgabe"
Global Top = 5
Global Hoehe = 30
Global Neu = 1
Global Ende, i, fertig
Procedure InitParameter()
Protected Pfad$, ArbVerz$, Wildcards$, State.i, Watch.i, Thr.i, Abbr.i
Pfad$ = GetGadgetText(#TextGadget_Exif_Pfad)
ArbVerz$ = GetGadgetText(#Textgadget_Arbeistsverzeichnis)
State = GetGadgetState(#Combogadget_Datei_Wildcards)
If State = 0 : Wildcards$ = "G*.MP4" : EndIf
If State = 1 : Wildcards$ = "*.MP4" : EndIf
If State = 2 : Wildcards$ = "*.MOV" : EndIf
;init Struct
With Parameter
\Exif_Pfad$ = Pfad$
\EXIF_Executable$ = "ExifTool.exe"
\Exif_Kommando$ = " -filemodifydate<createdate" + " -filecreatedate<createdate "
\Datei_Parameter$ = Wildcards$
\Arbeitsverzeichnis$ = ArbVerz$
EndWith
EndProcedure
;-------------------------------
Procedure.s ExifRun(*Parameter)
Protected Exitcode, NoErrText
Protected NewErrorText$, AllErrorText$ =""
Protected start = ElapsedMilliseconds()
Protected Program.i
Protected path$, Cmd$, WorkDir$, WildCard$
Protected Flags =#PB_Program_Open | #PB_Program_Read | #PB_Program_Error | #PB_Program_Hide ;| #PB_Program_Wait
With Parameter
path$ = \Exif_Pfad$ + \EXIF_Executable$
Cmd$ = \Exif_Kommando$
WorkDir$ = \Arbeitsverzeichnis$
WildCard$ = \Datei_Parameter$
EndWith
cmd$ = Cmd$ + WorkDir$ + WildCard$
Program = RunProgram(path$, Cmd$, WorkDir$, Flags)
fertig = PostEvent(#EventBeginProcessing)
If Program
While ProgramRunning(Program)
If AvailableProgramOutput(Program)
Ausgabetext$ = WildCard$ +" "+ ReadProgramString(Program) + #NewLine
EndIf
NewErrorText$=ReadProgramError(Program)
While NewErrorText$<>""
NoErrText+1
AllErrorText$ + Str(NoErrText)+":"+NewErrorText$+#NewLine
NewErrorText$=ReadProgramError(Program)
Wend
i = i+2 : SetGadgetState (#ProzessbarGadget, i) : Delay(40)
If i => 100 : i= 0 : EndIf
Wend
Ausgabetext$+" "+#TxtRunProgLaufzeit+":"+Str(ElapsedMilliseconds()-start)+#TxtZeiteinheit$+#NewLine
If ElapsedMilliseconds()-start
Exitcode=ProgramExitCode(Program)
If Exitcode<>0
If 0=Exitcode
Ausgabetext$+#TxtRunPrgOK$
Else
Ausgabetext$ + #TxtRunPrgError$ + Str(Exitcode) + #NewLine
Ausgabetext$ + AllErrorText$
EndIf
EndIf
Else
If 0<>IsProgram(Program)
KillProgram(Program)
CloseProgram(Program)
Ausgabetext$ = Ausgabetext$ +" " + #NewLine +AllErrorText$ +" "
EndIf
EndIf
fertig = PostEvent(#EventProcessingFinished)
i = 0
SetGadgetState (#ProzessbarGadget, i)
ProcedureReturn Ausgabetext$
CloseProgram(Program)
Else
MessageRequester(#TxtRunPrgFATAL$,#TxtProg_nicht_gefunden$+" "+ path$)
EndIf
EndProcedure
Procedure AendereDatum()
Protected Zeit$, Pfad$
Protected ArbVerz$, Para$
Protected DatumsWert.i, DW_neu.i, gefunden.i
With Parameter
ArbVerz$ = \Arbeitsverzeichnis$
Para$ = \Datei_Parameter$
EndWith
gefunden = ExamineDirectory(#PB_Any,ArbVerz$,Para$)
If gefunden
While NextDirectoryEntry(gefunden)
If DirectoryEntryType(gefunden) = #PB_DirectoryEntry_File
Para$ = DirectoryEntryName(gefunden)
If FileSize(Pfad$) = FileSize(Para$)
Para$ = ArbVerz$ + Para$
DatumsWert = GetFileDate(Para$,datums_flag)
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",Datumswert)
DW_neu = AddDate(DatumsWert,#PB_Date_Hour,shift_hour_flag)
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",DW_neu)
DW_neu = DatumsWert + (3600 * shift_hour_flag)
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",DW_neu)
SetFileDate(Para$,datums_flag,ParseDate("%dd.%mm.%yyyy:%hh.%ii",zeit$))
SetGadgetText(#TxtGadget_Zeit, Zeit$)
Ausgabetext$ = Para$ + " " + Zeit$
AddGadgetItem(#EDGadget_Text_Ausgabe, -1, Ausgabetext$) ; +#NewLine
Else
Ausgabetext$ = "keine Datei gefunden"
AddGadgetItem(#EDGadget_Text_Ausgabe, -1, Ausgabetext$ + #NewLine)
EndIf
EndIf
Wend
FinishDirectory(gefunden)
Else
Ausgabetext$ = "Datei nicht gefunden, Arbeitsverzeichnis gesetzt?"
AddGadgetItem(#EDGadget_Text_Ausgabe, -1, Ausgabetext$ + #NewLine)
EndIf
EndProcedure
; Erstellt eine Preference-Datei namens MEXDatum.pref ------------------------------
If OpenPreferences("MEXDatum.pref")
PreferenceGroup("Global")
With Parameter ; initialisiere
\Exif_Pfad$ = ReadPreferenceString("Exif_Pfad$","")
\Arbeitsverzeichnis$ = ReadPreferenceString("Arbeitsverzeichnis$","")
\Datei_Parameter$ = ReadPreferenceString("Datei_Parameter$","")
EndWith
ClosePreferences()
Else
CreatePreferences("MEXDatum.pref")
ClosePreferences()
EndIf
; ----------------------------------
;--- Window
OpenWindow(#Mainwindow, 0,0,500,420,"MEXDatum = Modifiziere EXif-Datum mit dem Exiftool von Phil Harvey",
#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StickyWindow(#Mainwindow,#True)
TextGadget(#TxtGadg_Std_Korr, 10,Top+10,180,20,"Datum lesen, Zeit ändern",#PB_Text_Center) : Top =Top + 30
ComboBoxGadget(#combogadg_DaT_Art,10,Top,180,30) : Top = Top + 40
AddGadgetItem(#combogadg_DaT_Art,0,"Zeit -2 Std")
AddGadgetItem(#combogadg_DaT_Art,1,"Zeit -1 Std")
AddGadgetItem(#combogadg_DaT_Art,2,"Datum +/-0 Std")
AddGadgetItem(#combogadg_DaT_Art,3,"Zeit +1 Std")
AddGadgetItem(#combogadg_DaT_Art,4,"Zeit +2 Std")
SetGadgetState(#combogadg_DaT_Art,2)
If #combogadg_DaT_Art = 2
GadgetToolTip(#combogadg_DaT_Art, "das Datum wird nicht verändert")
EndIf
; keine Korrektur, nicht verändert, es wird nur die Zeit ausgelesen
ComboBoxGadget(#combogadg_DaT_Std,10,Top,180,30) : Top = Top + 40
AddGadgetItem(#combogadg_DaT_Std,0,"Setzen: Datum erstellt")
AddGadgetItem(#combogadg_DaT_Std,1,"Setzen: Datum geändert")
SetGadgetState(#combogadg_DaT_Std,0)
GadgetToolTip(#combogadg_DaT_Std,"Wählt welches Datum korrigiert werden soll")
TextGadget(#TxtGadget_Zeit, 10,Top,180,30,datum$,#PB_Text_Border|#PB_Text_Center) : Top = Top + 40
ButtonGadget(#Button_Pfad_Wahl, 10,Top,180,30,"Setzen: Arbeitsverzeichnis",#PB_Text_Center) : Top = Top + 40
TextGadget (#Textgadget_Arbeistsverzeichnis, 10,Top,180,35,"",#PB_Text_Border|#PB_Text_Center) : Top = Top + 45 ; zeigt den Pfad
SetGadgetText(#Textgadget_Arbeistsverzeichnis,Parameter\Arbeitsverzeichnis$)
GadgetToolTip(#Button_Pfad_Wahl,"Wählt dasArbeitsverzeichnis mit den Dateien")
ComboBoxGadget(#Combogadget_Datei_Wildcards,10, Top, 180, Hoehe) : Top = Top+40
AddGadgetItem(#Combogadget_Datei_Wildcards,0,"Gopro: G* . MP4")
AddGadgetItem(#Combogadget_Datei_Wildcards,1,"Video: * . MP4")
AddGadgetItem(#Combogadget_Datei_Wildcards,2,"Video: * . MOV")
SetGadgetState(#Combogadget_Datei_Wildcards,0)
ButtonGadget(#Button_Exif_Verzeichnis_suchen, 10,Top,180,30,"Setzen: Exifverzeichnis",#PB_Text_Center) : Top = Top + 40
GadgetToolTip(#Button_Exif_Verzeichnis_suchen, "Stellt das Verzeichnis mit dem ExifTool ein")
TextGadget(#TextGadget_Exif_Pfad, 10,Top,180,30,"",#PB_Text_Border|#PB_Text_Center) : Top = Top + 65 ; zeigt den Pfad
SetGadgetText(#TextGadget_Exif_Pfad,Parameter\Exif_Pfad$)
ButtonGadget(#Button_Start_Datumsaenderung, 10, Top, 120, 30,"Start: Zeit",#PB_Text_Center) ; #Button_Start_Datumsaenderung,5,200,60,30
GadgetToolTip(#Button_Start_Datumsaenderung, "startet einen Durchlauf, kann auch mehrfach betätigt werden")
ButtonGadget(#Button_Exif_Start, 270,Top,120,30,"Exiftool",#PB_Text_Center) ; #Button_Start_Datumsaenderung,5,200,60,30
GadgetToolTip(#Button_Exif_Start, "startet das ExifTool")
ButtonGadget(#Button_Ende_Prgr, 140,Top,120,30,"Ende",#PB_Text_Center) ;#Button_Ende_Prgr,135,200,60,30,
SetGadgetColor(#Button_Ende_Prgr, #PB_Gadget_FrontColor, $0000FF)
GadgetToolTip(#Button_Ende_Prgr, "beendet das Programm")
ProgressBarGadget(#ProzessbarGadget, 10, Top -15, 480, 8, 0, 100)
CheckBoxGadget(#CheckboxSticky, 400, Top , 100, 20, "Fenster oben")
SetGadgetState(#CheckboxSticky,1)
If #CheckboxSticky = 1 : StickyWindow(#Mainwindow,#True) : EndIf
EditorGadget(#EDGadget_Text_Ausgabe, 205,8,285, 355,#PB_Editor_ReadOnly|#PB_Editor_WordWrap)
Ausgabetext$ = " Das ExifTool von von Phil Harvey muss auf dem Rechner installiert sein " + #NewLine +
" ------------------------------------------" + #NewLine +
" 1. Pfade setzen " + #NewLine +
" 2. Dateiart wählen " + #NewLine +
" 3. ExifTool starten " + #NewLine +
" 4. Zeitänderung wählen " + #NewLine +
" 5. Zeit starten " + #NewLine +
" 6. Freuen " + #NewLine +
"------------------------------------------" + #NewLine +
" Das Programm speichert die aktuellen Einstellungen in einer MEXDatum.pref " + #NewLine +
" Die Funktionen Start und ExifTool können mehrfach aufgerufen werden " + #NewLine +
" Der Button ExifTool setzt die Änderungen Im FileDate wieder zurück auf das Erstelldatum der Kamera."
If Neu
SetGadgetText(#EDGadget_Text_Ausgabe,Ausgabetext$)
Neu = 0
EndIf
StartDrawing(WindowOutput(#Mainwindow)) ;Rahmen zeichnen
DrawingMode(#PB_2DDrawing_Outlined)
Box( 5, 5, 190, 360, RGB(255, 0, 0) )
Box( 202, 5, 290, 360, RGB(255, 0, 0))
StopDrawing()
;--- Main -------------
Repeat
Select WaitWindowEvent() ;auf Ereignis im Window warten
Case #PB_Event_CloseWindow ;Fenster schließen
Ende=1
;-TODO Warum funktioniert die Checkbox nicht???
Case #CheckboxSticky
If #PB_Checkbox_Checked
StickyWindow(#Mainwindow,1)
Else
StickyWindow(#Mainwindow,0)
EndIf
Case #PB_Event_Gadget ; Ende-Taste drücken
Select EventGadget()
Case #Button_Ende_Prgr
Ende=1
;- Arbeitsordner wählen
Case #Button_Pfad_Wahl
With Parameter
\Arbeitsverzeichnis$=PathRequester("Arbeitsordner wählen",\Arbeitsverzeichnis$)
SetGadgetText(#Textgadget_Arbeistsverzeichnis,\Arbeitsverzeichnis$)
InitParameter()
EndWith
;- Exif-Pfad auswählen
Case #Button_Exif_Verzeichnis_suchen
With Parameter
\Exif_Pfad$= PathRequester("ExifTool Pfad wählen", \Exif_Pfad$)
SetGadgetText(#TextGadget_Exif_Pfad,\Exif_Pfad$)
InitParameter()
EndWith
;- FileDate wählen
Case #combogadg_DaT_Std
Select GetGadgetState(#combogadg_DaT_Std)
Case 0 : datums_flag = #PB_Date_Created: ; gibt das Erstellungsdatum der Datei zurück
Case 1 : datums_flag = #PB_Date_Modified: ; gibt das Änderungsdatum der Datei zurück
EndSelect
;- Stunden +/- wählen
Case #combogadg_DaT_Art
Select GetGadgetState(#combogadg_DaT_Art) ; das Datum korrigiert werden soll
Case 0 : shift_hour_flag = -2
Case 1 : shift_hour_flag = -1
Case 2 : shift_hour_flag = 0
Case 3 : shift_hour_flag = 1
Case 4 : shift_hour_flag = 2
EndSelect
;- Parameter wählen
Case #Combogadget_Datei_Wildcards ; Auswählen welche Dateien korrigiert werden sollen
With Parameter
Select GetGadgetState(#Combogadget_Datei_Wildcards)
Case 0 : \Datei_Parameter$ = "G*.MP4"
Case 1 : \Datei_Parameter$ = "*.MP4"
Case 2 : \Datei_Parameter$ = "*.MOV"
EndSelect
EndWith
InitParameter()
Case #PB_Event_CloseWindow : End
;- Start Datumsänderung
Case #Button_Start_Datumsaenderung ; Zeitänderung starten
ClearGadgetItems(#EDGadget_Text_Ausgabe)
AendereDatum()
;- ExifTool Start
Case #Button_Exif_Start ; Exif Datum nach Filedatum verschieben
ClearGadgetItems(#EDGadget_Text_Ausgabe)
;-TODO Warum funktioniert CleargadgetItems hier nur mit der nächsten Zeile
While WindowEvent() : Wend
With Parameter
If GetGadgetState(#Combogadget_Datei_Wildcards) = 0 : \Datei_Parameter$ = "G*.MP4" : EndIf
If GetGadgetState(#Combogadget_Datei_Wildcards) = 1 : \Datei_Parameter$ = "*.MP4" : EndIf
If GetGadgetState(#Combogadget_Datei_Wildcards) = 2 : \Datei_Parameter$ = "*.MOV" : EndIf
If GetGadgetState(#Combogadget_Datei_Wildcards) = 2 : \Datei_Parameter$ = "*.*" : EndIf
EndWith
InitParameter()
ExifRun(@Parameter) ; CreateThread
AddGadgetItem(#EDGadget_Text_Ausgabe,-1,Ausgabetext$+#NewLine)
SetGadgetState(#combogadg_DaT_Art,2) ;TODO diese 2 Zeilen entfallen, wenn die Zeit
shift_hour_flag = 0 ;unmittelbar nach dem ExiTool korrigiert werden soll
AendereDatum() ; ruft anschließEnd das Programm Ändere Datum auf
EndSelect
EndSelect
Until Ende
;-Preferenzdatei schreiben
OpenPreferences("MEXDatum.pref")
PreferenceGroup("Global")
With Parameter
WritePreferenceString("Exif_Pfad$", \Exif_Pfad$)
WritePreferenceString("Exif_Executable$", \EXIF_Executable$)
WritePreferenceString("Exif_Kommando$", \Exif_Kommando$)
WritePreferenceString("Arbeitsverzeichnis$",\Arbeitsverzeichnis$)
WritePreferenceString("Datei_Parameter$", \Datei_Parameter$)
EndWith
ClosePreferences()
End
Zeile 374. Ich habe alles versucht aber ohne
geht es nicht.
-Gadget Zeile 315 nicht ans laufen. Was ist da falsch?
Ich weiß nicht mehr weiter - wer kann mir da helfen.