Perte des dates des photos

  • Créateur du sujet Créateur du sujet e_lpt
  • Date de début Date de début
@ecatomb :coucou:
le 05/08/2018
Ou 25/02/2020 le create date de l'exiftool ?

Chaque marque d'appareil utilise un autre format dans les vidéos (pour les photos ça à l'air d'être standard)
 
Il y a plein de dates différentes et j'avais cherché celle qui me convenait pour les vidéos de l'iPhone. C'est pour cela que je mise sur la même ici (mais effectivement, ce n'est pas garanti à 100%) :p

Bloc de code:
[xxxxx@~/Downloads] $ exiftool 2020-01-25\ 16.47.19.mov | grep Date
File Modification Date/Time     : 2020:01:25 16:47:19+01:00
File Access Date/Time           : 2020:01:25 16:47:19+01:00
File Inode Change Date/Time     : 2020:05:10 13:52:49+02:00
Create Date                     : 2020:01:25 15:47:20
Modify Date                     : 2020:01:25 15:49:02
Track Create Date               : 2020:01:25 15:47:20
Track Modify Date               : 2020:01:25 15:49:02
Media Create Date               : 2020:01:25 15:47:20
Media Modify Date               : 2020:01:25 15:49:02
Creation Date                   : 2020:01:25 16:47:19+01:00
[xxxxx@~/Downloads] $ exiftool -CreationDate -S -s 2020-01-25\ 16.47.19.mov
2020:01:25 16:47:19+01:00
 
Le problème (voir en début de ce fil) c'est que en fonction de la marque de l'appareil Nikon, canon etc... il ne se serve pas de la même dénomination: createdate, creationdate, datetimeoriginal, etc...
Donc faire un script universel est difficile, à chaque fois que je rencontre un nouveau, j'essaie de l'intégrer au script, ...

Edit: j'attends la réponse, je le rajoute au script, j'en profite pour intégrer le renommage (tout en un).
Merci pour ton script shell de renommage...
 
D'ailleurs, quels marques d'appareils sont pris en compte par ton script ?
J'ai encore des fichiers raw d'un appareil Canon, sinon j'ai un Olympus. Donc je peux faire des tests si besoin.

Le Canon:
Bloc de code:
$ exiftool 2016-07-30\ 19.33.11.cr2 | grep Date
File Modification Date/Time     : 2016:07:30 19:33:11+02:00
File Access Date/Time           : 2019:08:18 14:03:07+02:00
File Inode Change Date/Time     : 2018:12:29 20:54:46+01:00
Modify Date                     : 2016:07:30 19:33:10
Date/Time Original              : 2016:07:30 19:33:10
Create Date                     : 2016:07:30 19:33:10
Create Date                     : 2016:07:30 19:33:10.55
Date/Time Original              : 2016:07:30 19:33:10.55
Modify Date                     : 2016:07:30 19:33:10.55

Le Olympus:
Bloc de code:
$ exiftool 2020-04-07\ 23.27.22.orf | grep Date
File Modification Date/Time     : 2020:04:07 23:27:22+02:00
File Access Date/Time           : 2020:04:20 11:46:02+02:00
File Inode Change Date/Time     : 2020:04:20 11:46:07+02:00
Modify Date                     : 2020:04:07 23:27:22
Date/Time Original              : 2020:04:07 23:27:22
Create Date                     : 2020:04:07 23:27:22
Date Time UTC                   : 0000:00:00 00:00:00
 
Je n'ai pas répertorié les types d'appareisl, d'autant qu'en plus, en fonction des formats vidéo choisis ça risque de changer (avi, mp4, hevc....) ! :banghead:

Comme le montre tes éléments ci-dessus, il y a datetimeoriginal et createdate, or, dans la copie d'écran de "Mathildee31" ce serait dans creationdate et poutant le createdate qui existe n'aurait pas le bonne date ...:banghead:.

Je crois que malheureusement il faut voir et adapter à chaque cas
 
Ok
alors je te remets un nouveau script qui devrait faire le job, y compris le renommage.

Un conseil, fais une copie de quelques fichiers pour faire un essai (on sait jamais un Bug !).
J'attends ton retour.

Bloc de code:
-- remplace date du fichier par la date exif creation et renomme les fichiers avec la date de création

tell application "Finder"
    set Chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à redater"
    my inspecter(Chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            
            set lefichier to chaque_fichier
            set AppleScript's text item delimiters to {""}
            set nom to name of chaque_fichier --récupère le nom du fichier
            set extens to document file nom in un_dossier --recupere l extension du fichier
            set lextension to name extension of extens
            set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
            set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
            set elements to text items of nom
            set nomcourt to (items 1 thru -2 of elements) as string
            set ancien_nom to nomcourt
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            
            set chaque_fichier to chaque_fichier as string
            
            try
                set datephoto to do shell script "/usr/local/bin/exiftool -DateTimeOriginal " & quoted form of POSIX path of chaque_fichier
                if datephoto is "" then set datephoto to do shell script "/usr/local/bin/exiftool -CreationDate " & quoted form of POSIX path of chaque_fichier
                if datephoto is "" then set datephoto to do shell script "/usr/local/bin/exiftool -CreateDate " & quoted form of POSIX path of chaque_fichier
                
                
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur chargement date
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le fichier ne contient pas de date  : " & chaque_fichier & return to lelog starting at eof
                close access lelog
                
                set datephoto to ""
            end try
            
            if length of datephoto > 20 then
                set x to (length of datephoto) - 33
                set DateOriginale to text -x thru -1 of datephoto
                set ladate to text 1 thru 5 of DateOriginale
                set lannee to ladate
                set ladate to ladate & text 7 thru 8 of DateOriginale
                set lemois to text 7 thru 8 of DateOriginale
                set ladate to ladate & text 10 thru 11 of DateOriginale
                set lejour to text 10 thru 11 of DateOriginale
                set ladate to ladate & text 13 thru 14 of DateOriginale
                set lheure to text 13 thru 14 of DateOriginale
                set ladate to ladate & text 16 thru 17 of DateOriginale
                set lesminutes to text 16 thru 17 of DateOriginale
                set ladate to ladate & "." & text 19 thru 20 of DateOriginale
                set lessecondes to text 19 thru 20 of DateOriginale
                set newnom to lannee & "-" & lemois & "-" & lejour & " " & lheure & "." & lesminutes & "." & lessecondes
                
                set xxx to ladate as string
                
                if xxx is " 000000000000.00" then
                    -- Ecrit un fichier erreur sur le bureau si erreur chargement date(=0000...)
                    set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                    write "Le fichier ne contient pas de date : " & chaque_fichier & return to lelog starting at eof
                    close access lelog
                else
                    do shell script "touch -t " & ladate & " " & quoted form of POSIX path of chaque_fichier
                end if
            end if
            
            
            set aa to container of lefichier as string
            set numero to 1
            set lenewnom to newnom
            repeat
                if exists aa & lenewnom & "." & lextension then
                    set lenewnom to newnom & "(" & numero & ")"
                    set numero to numero + 1
                else
                    set newnom to lenewnom
                    exit repeat
                end if
            end repeat
            set name of lefichier to newnom & "." & lextension
        end repeat
        
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
    
end inspecter
tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Je viens de lancer ton script sur les quelques fichiers de test que j'avais laissé sur le bureau, ça a fonctionné ! vraiment trop doué !
l'ensemble des fichiers (vidéos et photos) ont été renommés dans le format convenu ensemble. et ça a aussi modifié les informations "créé le" et "modifié le".
Je vais lancer le script sur mon disque dur externe du coup :D
je vous tiens au courant
merci merci merci !!!
Capture d’écran 2020-05-10 à 16.44.18.png
 
Tu avais beaucoup de fichiers?
toujours Pas de fichier erreur.txt sur le bureau? C’est que tout ce passe bien!

Patience ....
 
Ah oui quand même. Il n’y a plus qu‘a patienter. Surtout sur un disque externe les accès sont assez long.

edit: en regardant dans les dossiers, tu peux éventuellement voir où tu en es! En regardant les noms des fichiers (bien sur sans les ouvrir).
 
Quand même curieux, je viens de tester sur un dossier de 3800 photos il a mis 14 minutes. c' est long mais chez toi plusieurs heures ???
 
Bonjour ! j'ai laissé l'ordi allumé toute la nuit pour que le script puisse terminer, et malheureusement en me levant je me suis rendue compte que le disque dur s'est éjecté tout seul pendant la nuit a priori... j'ai alors vérifié si les fichiers avaient été tous modifiés, et une petite partie seulement a été traitée (environ 5792 photos). Il reste 7343 fichiers à traiter. Et toujours pas de fichiers d'erreur.txt sur le bureau !
J'ai alors relancé le script il y a 20 min, et un message d'erreur long comme ma main s'est affiché (voir capture d'écran).
D'où peut provenir ce problème ? est-ce mon disque dur qui est pourri (pourtant neuf acheté il y a 3 mois...).Capture d’écran 2020-05-11 à 10.18.47.png
 
Alors vu d'ici impossible à dire.
J'espère que tu n'a pas relancé le script sur la totalité des photos (y compris celles déjà traitées).

Je te conseille de lancer le script dossier par dossier (en sachant que quand il traite un dossier, il traite également les sous dossiers.
En faisant par petits morceaux , tu pourras voir dans quel dossier cela plante et surtout ne pas attendre des heures sans savoir ce qui se passe.
 
Merci pour le retour...
Content pour toi !