• Bonjour Visiteur. Bienvenue sur les nouveaux forums de MacGeneration. La peinture est encore fraiche, quelques boulons doivent être resserrés, plus d’informations demain !

Perte des dates des photos

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Tu sélectionnes ta photo en cliquant dessus puis en maintenant le clic tu glisses sur la fenêtre du terminal ! En lâchant le clic , le chemin de la photo s'affiche dans le terminal et la tu valides.
 
Dernière édition:

adriska

Nouveau membre
15 Mai 2019
3
0
22
Bonjour zeltron54, j'ai essaye votre méthode pour les photos uniquement mais lorsque je lance l'exécution, le message d'erreur suivant s'affiche "
error "La variable ladate n’est pas définie." number -2753 from "ladate" " je ne sais pas pourquoi... Pourriez-vous m'aider ?
Merci d'avance
 

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Bonjour,
Tu as lancé quel script ? que je vois je qui cloche !.
De plus si tu pouvais décrire exactement ce que tu fais.
 

adriska

Nouveau membre
15 Mai 2019
3
0
22
Tu sélectionnes ta photo en cliquant dessus puis en maintenant le clic tu glisses sur la fenêtre du terminal ! En lâchant le clic , le chemin de la photo s'affiche dans le terminal et la tu valides.
Bonjour,
Tu as lancé quel script ? que je vois je qui cloche !.
De plus si tu pouvais décrire exactement ce que tu fais.
Bonjour!
J'ai mis dans un dossier FINDER toutes les photos d'un chantier démarré fin 2017, j'aimerais avoir les dates de ces photos en tant que date de création des fichiers afin de pouvoir les partager avec d'autres gens et avoir visuellement les dates de prises de vues, j'ai donc utilisé votre script :
-- remplace date du fichier par la date exif creation

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 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 -- avec exiftool installé

on error
set datephoto to ""
end try


if length of datephoto > 20 then
set DateOriginale to text -20 thru -1 of datephoto
set ladate to text 1 thru -16 of DateOriginale
set ladate to ladate & text 7 thru -13 of DateOriginale
set ladate to ladate & text 10 thru -10 of DateOriginale
set ladate to ladate & text 13 thru -7 of DateOriginale
set ladate to ladate & text 16 thru -4 of DateOriginale
set ladate to ladate & "." & text 19 thru -1 of DateOriginale
do shell script "touch -t " & ladate & " " & quoted form of POSIX path of chaque_fichier
end if


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

en ayant pris le soin d'installer exiftool.
Mais le message d'erreur sur "ladate" apparait...
J'espère avoir été clair...

Cordialement,
 

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Pour le script , c'est le bon avec exiftool installé.

Ensuite tu procèdes comment ?

Tu as bien collé le script dans une fenêtre de l'éditeur de script ?
tu lances ce script en cliquant sur la flêche en haut à gauche marquée Exécuter.
Le script te demande de sélectionner le dossier contenant les photos.

Si c'est là que tu obtiens le message, il doit y avoir une ligne de surlignée dans le script, dis moi laquelle .
 

adriska

Nouveau membre
15 Mai 2019
3
0
22
Je ne comprends pas, j'ai refait exactement les mêmes manipulations et ça a fonctionné!
Je te remercie quand même! aha certaines choses m'échappent! bonne journée!
 

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Content pour toi !

Bonne journée !
 

claudebo

Nouveau membre
1 Janvier 2013
3
0
Bonjour,
J'ai trouvé votre solution miracle pour récupérer les dates de fichiers après un download de vidéos provenant d'iCloud .
Ce matin, le script a très bien marché à la suite d'un essai.
J'ai donc download toutes mes vidéos, mais le script ne marche plus !! Je suis perdu .
Merci si vous pouvez m'aider
Ci joint copie de la fenêtre éditeur de script .
Claude
 

Fichiers joints

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Bonjour,

Le script que tu utilises est destiné uniquement au vidéo (pas de photos, voir en début de ce post).
Par contre pour certaines vidéo , pas de solution (voir post #30). l'erreur de la ligne du script à l'air de dire que la vidéo n'a pas de date de création .

Pour le vérifier dans une fenêtre terminal tapes:
Exiftool -g
puis un espace et fais un glissé déposé du fichier qui pose problème après validation tu pourras voir toutes les données exif du fichier.
 

claudebo

Nouveau membre
1 Janvier 2013
3
0
Zeltron, bonjour, et merci de ta réponse rapide,
Effectivement, Comme le montre mes captures de terminal ( 2 fenêtres du haut à gauche photo, à droite vidéo avec dates de création, fenêtres du bas sans date de création.
Ce qui est étrange, c'est que le script pour les photos ne fait pas d'erreurs et ne stoppe pas à l'encontre d'une photo sans date de création, par contre le script pour vidéos stoppe et donne le message d'erreur de mon post précédent.
Bon, je ne sais pas quoi faire, j'ai 1500 vidéos à traiter pour rétablir la bonne date :(
Bonne continuation à toi :)
 

Fichiers joints

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Pour les photos il est préférable de ce servir du script message #14 qui , s'il n'y a pas de date passe à la photo suivante.

Pour les vidéo si la date n'est pas renseignée (pas de CreateDate) alors il passe à la suivante, mais dans ton cas la date est renseignée mais avec "0000:00:00 00:00:00" donc il plante, je n'avais jamais vu ce cas, donc pas pris en compte dans la script.
Je vais regarder si je peux adapter le script.
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Bon voila le script modifié qui continu si la date est renseignée avec 0000:00:00 00:00:00
en espèrant que cela te convienne.

Bloc de code:
-- remplace date du fichier par la date exif creation

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 chaque_fichier to chaque_fichier as string
            
            
            try
                set datephoto to do shell script "/usr/local/bin/exiftool -CreateDate " & quoted form of POSIX path of chaque_fichier -- avec exiftool installé
                
            on error
                set datephoto to ""
            end try
            
            
            if length of datephoto > 20 then
                set DateOriginale to text -20 thru -1 of datephoto
                set ladate to text 1 thru -16 of DateOriginale
                set ladate to ladate & text 7 thru -13 of DateOriginale
                set ladate to ladate & text 10 thru -10 of DateOriginale
                set ladate to ladate & text 13 thru -7 of DateOriginale
                set ladate to ladate & text 16 thru -4 of DateOriginale
                set ladate to ladate & "." & text 19 thru -1 of DateOriginale
                
                set xxx to ladate as string
                if xxx is not " 000000000000.00" then
                    do shell script "touch -t " & ladate & " " & quoted form of POSIX path of chaque_fichier
                end if
            end if
            
            
        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
 

claudebo

Nouveau membre
1 Janvier 2013
3
0
Yessssss Zeltron, ça marche.
De temps en temps ça plante, donc pour l'instant je procède par "paquet de 50 vidéos" que je mets dans le dossier qui va passer à la moulinette de ton script, quand c'est bon, je les déplace dans le dossier final. Quand ça plante, j'isole celles qui restent, les mets dans un autre dossier, puis à la fin, j'essayerai de comprendre la ou elles bloquent.
Merci beaucoup, je te tiens au courant.
 

rabouz4167

Nouveau membre
23 Mars 2013
6
0
@zelton54 merci bcp, j'utilise ton script pour les videos. Je cherchais depuis longtemps quelque chose capable de reprendre la date de creation (idem encoded date) pour la copier dans la date de creation du finder. Cependant j'ai un message d erreur qui apparait lorsque j'applique à un bacth de fichiers important:
error "Erreur dans Finder : touch: out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]" number 1

avec quelques fichiers ça marchait très bien. Avec plusieurs dizaines j'ai ce message. Et donc je n'arrive pas à comprendre si ça vient d'un fichier en particulier ou du fait du nbre de fichier trop important à traiter. Tous mes fichiers sont mp4 ou m4v. merci.
 

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Bonjour,
Le nombre de fichiers n'a rien à voir.
Le script que j'ai adapté pour les vidéos pose des problèmes pour certains fichiers vidéo.
En effet les fichiers vidéo ont des structures différentes en fonction de leurs origines. codecs vidéo, codecs audio et les 2 empaquetés dans un conteneur. Ils n'ont donc pas tous la date de création renseignées de la même manière, donc difficile d'avoir une solution universelle.
Pour analyser le problème il faudrait voir avec un des fichiers qui provoque l'erreur et regarder avec exiftool comment est renseigné la date.
 

rabouz4167

Nouveau membre
23 Mars 2013
6
0
Bonjour,
Le nombre de fichiers n'a rien à voir.
Le script que j'ai adapté pour les vidéos pose des problèmes pour certains fichiers vidéo.
En effet les fichiers vidéo ont des structures différentes en fonction de leurs origines. codecs vidéo, codecs audio et les 2 empaquetés dans un conteneur. Ils n'ont donc pas tous la date de création renseignées de la même manière, donc difficile d'avoir une solution universelle.
Pour analyser le problème il faudrait voir avec un des fichiers qui provoque l'erreur et regarder avec exiftool comment est renseigné la date.
merci pour la réponse. effectivement, après analyse, il s'agissait de certains fichiers qui n'avaient aucune "encoded date". Je les ai rajouté avec ffworks (super outil que je recommande, même si payant). Merci encore pour le script, top !
 

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Bonjour,
Afin de voir un peu plus clair, j'ai modifié le script qui maintenant crée un log sur le bureau avec la liste des fichiers pour lesquels il n' a pas trouver de date (ni dans TimeDateOriginal ni dans CreateDate)

le script modifié:

Bloc de code:
-- remplace date du fichier par la date exif creation

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 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 -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 ladate to ladate & text 7 thru 8 of DateOriginale
                set ladate to ladate & text 10 thru 11 of DateOriginale
                set ladate to ladate & text 13 thru 14 of DateOriginale
                set ladate to ladate & text 16 thru 17 of DateOriginale
                set ladate to ladate & "." & text 19 thru 20 of DateOriginale
                
                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
            
            
        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
 

rabouz4167

Nouveau membre
23 Mars 2013
6
0
Bonjour,
Afin de voir un peu plus clair, j'ai modifié le script qui maintenant crée un log sur le bureau avec la liste des fichiers pour lesquels il n' a pas trouver de date (ni dans TimeDateOriginal ni dans CreateDate)

le script modifié:

Bloc de code:
-- remplace date du fichier par la date exif creation

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 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 -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 ladate to ladate & text 7 thru 8 of DateOriginale
                set ladate to ladate & text 10 thru 11 of DateOriginale
                set ladate to ladate & text 13 thru 14 of DateOriginale
                set ladate to ladate & text 16 thru 17 of DateOriginale
                set ladate to ladate & "." & text 19 thru 20 of DateOriginale
               
                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
           
           
        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
encore mieux, merci!
pour info pour ceux qui ont le même obj que moi : j utilise le script de zeltron54 pour modifier les creation date du finder avec les dates d'encodage originale. Au préalable je vérifie ou modifie toutes les dates d'encodage grace à ffworks. Ensuite, je copie les dates de creation du finder et les ajoute en préfixe au nom du fichier grace à "a better finder rename", appli super qui permet de faire cela. A la fin toutes mes videos ont la bonne date d'encodage = date de creation finder et la date incluse dans le nom du fichier.
Au passage, "a better finder name" permet de changer/modifier les exif date pour une photo et les intégrer directement dans le nom du fichier mais ça ne marchait pas pour les video car il n y a pas de "exif date" pour les video. Il me manquait le script de zeltron54.
 

zeltron54

Membre d’élite
29 Mars 2008
1 507
230
Lorraine
Content pour toi ! Bonne journée et bonne fêtes de fin d’année