WORKFLOW : Sortir des listes des rushs avec leur durée

Pour analyser ton fichier de plus prés tu vas dans le terminal et tu tapes

exiftool -g
un espace après le g et tu fais un glissé déposé de ton fichier , tu auras tout ce que lis exiftool....

Regarde notamment dans "Media duration" si tu as la bonne valeur ? ou dans "track duration" ?
 
Dernière édition:
J'ai réussi à trouver un fichier mov qui donne le temps en secondes soit : duration : 13.17 s
Sans pouvoir comprendre d' où vient cette différence de notation dans les exifs.
Donc j'ai adapté le script pour qu'il prenne en compte cette notation (en faisant abstraction des dixièmes et centièmes de seconde)

voilà donc le nouveau script :
Bloc de code:
property tothg : 0
property tmng : 0
property tsecg : 0
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à renommer"
   
    my inspecter(chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
       
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"dv", "DV", "mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter
        -- mise a 0 des variables duree fichier
        set toth to 0
        set totmn to 0
        set totsec to 0
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set duree to "" -- mise a blanc de la durée
                set lefichier to chaque_fichier as string
                if lextension is in FVideo then -- si fichier video
                    set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la duréeau format teste exiftool
                    set AppleScript's text item delimiters to {":"}
                   
                    set NB to count of text items of duree
                    if NB = 2 then
                        set lesseconde to text item 2 of duree
                        set AppleScript's text item delimiters to {"."}
                        set seconde to text item 1 of lesseconde
                        set minute to 0
                        set heure to 0
                        set AppleScript's text item delimiters to {":"}
                    else
                        set seconde to get last text item of duree as string -- récupère les secondes
                        set minute to text item 3 of duree as string -- récupère les minutes
                        set heure to text item 2 of duree as string --récupère les heures
                    end if
                    -- fait le total du dossier en cours
                    set toth to toth + heure as string
                    set totmn to totmn + minute as string
                    set totsec to totsec + seconde as string
                    -- fait total general
                    set tothg to tothg + heure
                    set tmng to tmng + minute
                    set tsecg to tsecg + seconde
                    my ecriture(lefichier, heure, minute, seconde) --appel pour ecriture dans fichier texte du fichier
                   
                end if
            end tell
        end repeat
        my total(nomdos, toth, totmn, totsec) --appel pour ecriture dans fichier texte total dossier
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier) -- dossier suivant
        end repeat
    end tell
end inspecter

on ecriture(nom, heure, minute, seconde)
    --Ecrit dans la fichier texte le nom + tabulation  + la durée   
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & return to lelog starting at eof
    close access lelog
end ecriture

on total(nomdos, toth, totmn, totsec)
    -- calcule le temps total heure-minutes-secondes et ecrit dans fichier texte total dossier+dans fichierprovisoire listh+listmn+listsec
    set toth to toth + totmn div 60 as string
    set totmn to totmn mod 60 + totsec div 60 as string
    set totsec to totsec mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write " total dossier " & nomdos & (ASCII character 9) & toth & " h " & totmn & " mn " & totsec & " sec" & (ASCII character 13) & return to lelog starting at eof
    close access lelog
end total

tell application "Finder"
    -- calcule le temps total heure-minutes-secondes
    set totgh to tothg + tmng div 60 as string
    set tmng to tmng mod 60 + tsecg div 60 as string
    set tsecg to tsecg mod 60 as string
    --Ecrit dans la fichier texte le nom + tabulation  + la durée   
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write " total général du dossier " & (ASCII character 9) & tothg & " h " & tmng & " mn " & tsecg & " sec" & return to lelog starting at eof
    close access lelog
end tell


tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
@igor
pour infos : Après plusieurs essais, il semblerai que la durée des vidéos inférieures à 30 secondes sont notées sous la forme 29.53 s (pour 29 secondes et 53 centièmes), alors que supérieure ou égale à 30 secondes elles sont notées 0:0:30 (pour 30 secondes).
Essais effectués sur fichiers ".mov" et ".mp4".
 
Salut zeltron,

En effet, j'observe les mêmes choses de mon côté !
En tout cas le nouveau script que tu as fait fonctionne... Mais me révèle un nouveau problème.

(l'avantage c'est que je teste le clip sur une telle quantité de rushs que quand on aura écarté tous les bugs auxquels je me heurte on aura un truc plutôt stable...)


Mon nouveau problème :

Schermata 2018-02-21 alle 16.42.36.png

le message est en italien mais je précise le pb : il y a des vidéos qui n'ont visiblement pas de métadata de durée qui apparaît dans les métadonnées. C'est super bizarre parce que pour la vidéo en question qui beugue, si je l'affiche dans le finder j'ai sa durée sans souci.

Tu as déjà rencontré ça avec des vidéos ?
Faudra que je comprenne si c'est une métadonnée qui s'est perdue lors d'un transcode...

A plus !
Igor
 
Salut Igor
je ne travaille pas sur des vidéos, donc je n'ai jamais rencontré ton problème.
Pourrais-tu soit me transmettre une vidéos qui à ce problème ou taper dans le terminal:
exiftool -g , un espace puis glisser ta vidéo tu vas obtenir la liste qui est lu par exiftool, puis faire ici un copié collé de ces résultats dans une balise code, que je puisse regarder ce qui peut être exploité.
 
A Igor
En attendant que tu me transmettes les éléments pour pouvoir éventuellement inclure le traitement de ce fichier dans le script, je t'ai inclu le traitement des erreurs dans le script, ce qui permet de pouvoir continuer l'analyse du dossiers après avec valider l'erreur.
Je te mets le script modifié.
Bloc de code:
property tothg : 0
property tmng : 0
property tsecg : 0
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à renommer"
   
    my inspecter(chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
       
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"dv", "DV", "mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter
        -- mise a 0 des variables duree fichier
        set toth to 0
        set totmn to 0
        set totsec to 0
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set duree to "" -- mise a blanc de la durée
                set lefichier to chaque_fichier as string
               
                try
                    if lextension is in FVideo then -- si fichier video
                        set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la duréeau format teste exiftool
                        set AppleScript's text item delimiters to {":"}
                       
                        set NB to count of text items of duree
                        if NB = 2 then
                            set lesseconde to text item 2 of duree
                            set AppleScript's text item delimiters to {"."}
                            set seconde to text item 1 of lesseconde
                            set minute to 0
                            set heure to 0
                            set AppleScript's text item delimiters to {":"}
                        else
                            set seconde to get last text item of duree as string -- récupère les secondes
                            set minute to text item 3 of duree as string -- récupère les minutes
                            set heure to text item 2 of duree as string --récupère les heures
                        end if
                        -- fait le total du dossier en cours
                        set toth to toth + heure as string
                        set totmn to totmn + minute as string
                        set totsec to totsec + seconde as string
                        -- fait total general
                        set tothg to tothg + heure
                        set tmng to tmng + minute
                        set tsecg to tsecg + seconde
                        my ecriture(lefichier, heure, minute, seconde) --appel pour ecriture dans fichier texte du fichier
                       
                    end if
                on error the errorMessage number the errorNumber
                    display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier
                end try
            end tell
        end repeat
        my total(nomdos, toth, totmn, totsec) --appel pour ecriture dans fichier texte total dossier
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier) -- dossier suivant
        end repeat
    end tell
end inspecter



on ecriture(nom, heure, minute, seconde)
    --Ecrit dans la fichier texte le nom + tabulation  + la durée   
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & return to lelog starting at eof
    close access lelog
end ecriture

on total(nomdos, toth, totmn, totsec)
    -- calcule le temps total heure-minutes-secondes et ecrit dans fichier texte total dossier+dans fichierprovisoire listh+listmn+listsec
    set toth to toth + totmn div 60 as string
    set totmn to totmn mod 60 + totsec div 60 as string
    set totsec to totsec mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write " total dossier " & nomdos & (ASCII character 9) & toth & " h " & totmn & " mn " & totsec & " sec" & (ASCII character 13) & return to lelog starting at eof
    close access lelog
end total

tell application "Finder"
    -- calcule le temps total heure-minutes-secondes
    set totgh to tothg + tmng div 60 as string
    set tmng to tmng mod 60 + tsecg div 60 as string
    set tsecg to tsecg mod 60 as string
    --Ecrit dans la fichier texte le nom + tabulation  + la durée   
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write " total général du dossier " & (ASCII character 9) & tothg & " h " & tmng & " mn " & tsecg & " sec" & return to lelog starting at eof
    close access lelog
end tell


tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Salut,
Merci !
Alors j'ai fait ce que tu m'as conseillé avec le ficher qui pose pb :
Bloc de code:
---- ExifTool ----
ExifTool Version Number         : 10.79
---- File ----
(...)
File Size                       : 205 MB
File Modification Date/Time     : 2017:10:13 10:15:52+02:00
File Access Date/Time           : 2018:02:26 11:34:32+01:00
File Inode Change Date/Time     : 2018:01:12 14:15:34+01:00
File Permissions                : rw-r--r--
File Type                       : MOV
File Type Extension             : mov
MIME Type                       : video/quicktime
---- QuickTime ----
Movie Data Size                 : 215162304
Movie Data Offset               : 16
Movie Header Version            : 0
Create Date                     : 2017:10:13 08:14:58
Modify Date                     : 2017:10:13 08:15:51
Time Scale                      : 25
Duration                        : 0:04:20
Preferred Rate                  : 1
Preferred Volume                : 100.00%
Preview Time                    : 0 s
Preview Duration                : 0 s
Poster Time                     : 0 s
Selection Time                  : 0 s
Selection Duration              : 0 s
Current Time                    : 0 s
Next Track ID                   : 3
Track Header Version            : 0
Track Create Date               : 2017:10:13 08:14:58
Track Modify Date               : 2017:10:13 08:15:51
Track ID                        : 1
Track Duration                  : 0:04:20
Track Layer                     : 0
Track Volume                    : 0.00%
Image Width                     : 768
Image Height                    : 576
Graphics Mode                   : ditherCopy
Op Color                        : 32768 32768 32768
Compressor ID                   : apco
Vendor ID                       : Apple
Source Image Width              : 768
Source Image Height             : 576
X Resolution                    : 72
Y Resolution                    : 72
Compressor Name                 : Apple ProRes 422 Proxy
Bit Depth                       : 24
Video Frame Rate                : 25
Matrix Structure                : 1 0 0 0 1 0 0 0 1
Media Header Version            : 0
Media Create Date               : 2017:10:13 08:14:58
Media Modify Date               : 2017:10:13 08:15:51
Media Time Scale                : 48000
Media Duration                  : 0:04:20
Balance                         : 0
Handler Class                   : Data Handler
Handler Type                    : Alias Data
Handler Vendor ID               : Apple
Handler Description             : Apple Alias Data Handler
Audio Format                    : twos
Audio Channels                  : 2
Audio Bits Per Sample           : 16
Audio Sample Rate               : 48000
---- Composite ----
Avg Bitrate                     : 6.6 Mbps
Image Size                      : 768x576
Megapixels                      : 0.442
Rotation                        : 0



Ce qui est bizarre c'est qu'avec ta méthode j'obtiens sans problème la durée de la vidéo ! Du coup je comprends pas pourquoi le scripte la lis pas...
Comme vous pouvez constater l'image size est biscornue mais je pense pas que ça pose problème, il n'y a pas de lien de cause à effet !
A plus,
I.
Igor
 
Coucou,
Donc les métadonnées sont bien présentes dans le fichier. Peut être que le nouveau script pourra te renseigner un peu sur la cause de l'erreur lorsqu'il l'affichera.
Je penche plus pour un problème de chemin du fichier, qui aurait un caractères non supporté ou le chemin trop long (plus de 255 caractères).
Pour tester, tu peux essayer de créer un dossier sur le bureau et d'y déplacer ton fichier, puis tu essais avec le script juste sur ce dossier.
j'attends ta réponse au différents tests.
 
Bah dis-donc t'as les idées claires...
J'ai donc placé ma vidéo dans un dossier tout seul sur le bureau et çca marche !
En effet les chemins sont assez longs...
Il n'y a rien à faire pour allonger la longueur autorisée d'un chemin ?
A plus !
I.
 
Et non ! c'est une restriction du système donc ! pas trop de sous - sous - sous- dossier pour exécuter un script.

Donc problème résolu... j'attends la prochaine demande de modification . . . :p :p :coucou:
 
Bon bah j'ai un nouveau fichier qui pose pb...

Ca me donne le message d'erreur comme quoi il n'y a pas de donnée de durée, sauf que cette fois c'est pas un problème de nbre de caractères on dirait !

Si je passe par le terminal j'obtiens seulement ça :
Bloc de code:
---- ExifTool ----
ExifTool Version Number         : 10.79
Warning                         : End of processing at large atom (LargeFileSupport not enabled)
---- File ----
File Name                       : C0016.MP4
Directory                       : /Volumes/backup 2/01/Jour 5/Image/Carte F/PRIVATE/M4ROOT/CLIP
File Size                       : 4.7 GB
File Modification Date/Time     : 2017:09:02 11:19:40+02:00
File Access Date/Time           : 2018:02:26 13:12:28+01:00
File Inode Change Date/Time     : 2017:09:02 11:19:40+02:00
File Permissions                : rwxrwxrwx
File Type                       : MP4
File Type Extension             : mp4
MIME Type                       : video/mp4
---- QuickTime ----
Major Brand                     : Sony XAVC
Minor Version                   : 100.1f.ff
Compatible Brands               : XAVC, mp42, iso2
File Function Flags             : Additional tracks
Audio Track ID                  : 2
Audio Codec                     : twos
Audio Attributes                : (none)
Audio Avg Bitrate               : 1.54 Mbps
Audio Max Bitrate               : 1.54 Mbps
Audio Sample Rate               : 48000
Audio Channels                  : 2
Video Track ID                  : 1
Video Codec                     : avc1
Video Attributes                : Variable bitrate, [16], [17]
Video Avg Bitrate               : 60 Mbps
Video Max Bitrate               : 60 Mbps
Video Avg Frame Rate            : 25
Video Max Frame Rate            : 25
Video Size                      : 3840x2160
Pixel Aspect Ratio              : 1:1

Pas d'info de durée donc...
C'est un fichier de 12 minutes mais je pense pas que ce soit le pb ! Fichier corrompu ?
Sachant que le fichier n'a jamais été transcodé et que les autres fichiers de la carte fonctionnent nickel!
 
Malheureusement ce fichier n'a pas la valeur dans ses métadonnées, donc exiftool et le script ne peuvent pas la récupérer.

Ce fichier est' il lisible et par quoi ?
La durée de 12 minutes que tu donnes est lue par quoi, finder ou fichier de lecture ?

Enfin avec le script qui gère les erreurs, tu peux toujours noter les fichiers qui posent problèmes et continuer l'exploration du dossier jusqu' à son terme.
 
@igor
suite à tes déboires, j'ai cherché une autre manière de lire la durée des fichiers. J'ai trouvé une commande du terminal sans passer par exiftool, j'ai donc modifié le script en espérant que de cette manière il puisse lire tes fichiers récalcitrant !
je te met la nouvelle version:
Bloc de code:
property tsecg : 0
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à renommer"
   
    my inspecter(chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
       
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"dv", "DV", "mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter
        -- mise a 0 des variables duree fichier
        set totsec to 0
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set duree to "" -- mise a blanc de la durée
                set lefichier to chaque_fichier as string
               
                try
                    if lextension is in FVideo then -- si fichier video
                        set lessecondes to do shell script "mdls -name kMDItemDurationSeconds " & quoted form of POSIX path of lefichier --récupère la durée en secondes format mdls
                        set duree to word 3 of lessecondes --extrait la durée en secondes dans la variable seconde
                        set AppleScript's text item delimiters to {"."}
                        set seconde to text item 1 of duree
                        -- fait le total du dossier en cours
                        set totsec to totsec + seconde as string
                        -- fait total general
                        set tsecg to tsecg + seconde
                        my ecriture(lefichier, seconde) --appel pour ecriture dans fichier texte du fichier
                    end if
                on error the errorMessage number the errorNumber
                    display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier
                end try
            end tell
        end repeat
        my total(nomdos, totsec) --appel pour ecriture dans fichier texte total dossier
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier) -- dossier suivant
        end repeat
    end tell
end inspecter



on ecriture(nom, secondes)
    -- calcule le temps total heure-minutes-secondes et Ecrit dans la fichier texte le nom + tabulation  + la durée
    set heure to secondes div 3600 as string
    set minute to secondes mod 3600 div 60 as string
    set seconde to secondes mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & return to lelog starting at eof
    close access lelog
end ecriture

on total(nomdos, totsec)
    -- calcule le temps total heure-minutes-secondes et ecrit dans fichier texte total dossier+dans fichierprovisoire listh+listmn+listsec
    set heure to totsec div 3600 as string
    set minute to totsec mod 3600 div 60 as string
    set seconde to totsec mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write " total dossier " & nomdos & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec" & (ASCII character 13) & return to lelog starting at eof
    close access lelog
end total

tell application "Finder"
    -- calcule le temps total heure-minutes-secondes
    set heure to tsecg div 3600 as string
    set minute to tsecg mod 3600 div 60 as string
    set seconde to tsecg mod 60 as string
   
    --Ecrit dans la fichier texte le nom + tabulation  + la durée   
    set lelog to open for access ((path to desktop folder as text) & "le dossier.txt") as text with write permission
    write " total général du dossier " & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec" & return to lelog starting at eof
    close access lelog
end tell


tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
  • J’aime
Réactions: JLB21
Bien joué ! Ca marche !
Le fichier qui n'avait pas de données affichées par exiftool était un fichier .mp4 tout ce qu'il y a de plus banal, je pouvais lire sa durée dans le finder ou grâce à aperçu ou sur VLC ou sur quicktime bref ... Un fichier qui aurait pas dû me poser de problème quoi !

En plus ça résout un pb de l'ancienne version (qui n'affichait pas les durée additionnées en heures mais sortait des valeurs genre 0h 129min... J'avais rien signalé parce que je voulais résoudre ce détail comme un grand lol)

J'ai l'impression qu'on tient une sacrée version là !
Au taf je réessayerai avec le gros projet que je gère en ce moment.
A plus !
Igor
 
Bien j'attends les retours, et n'hésite pas à demander si petits bugs ca peu également servir à d'autres ....
 
Salut !
Je m'essaye à deux trois modifs...
J'ai rajouté cette ligne :
set dossier to name of chemin

au début pour pouvoir faire en sorte qu'à la fin du document produit par le script, le nom du dossier s'affiche :

write " total général du dossier " & dossier & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec" & return to lelog starting at eof

Le truc c'est que je voudrais également que le nom du .txt produit porte le nom du dossier analysé...
Du coup j'ai remplacé
"le dossier.txt"
par
& dossier & ".txt"

Mais je me mange un message d'erreur comme quoi dossier n'est pas défini. Comment je peux faire pour que dans la rubrique "on ecriture" le programme se "souvienne" de ce que veut dire dossier ?

J'espère que c'est clair...
 
En gros ce que j'ai fait ça donne ça :

Bloc de code:
property tsecg : 0
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à renommer"
   
    my inspecter(chemin)
    set dossier to name of chemin
end tell

on inspecter(un_dossier)
    tell application "Finder"
       
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"dv", "DV", "mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4", "avi"} -- liste des extensions a traiter
        -- mise a 0 des variables duree fichier
        set totsec to 0
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set duree to "" -- mise a blanc de la durée
                set lefichier to chaque_fichier as string
               
                try
                    if lextension is in FVideo then -- si fichier video
                        set lessecondes to do shell script "mdls -name kMDItemDurationSeconds " & quoted form of POSIX path of lefichier --récupère la durée en secondes format mdls
                        set duree to word 3 of lessecondes --extrait la durée en secondes dans la variable seconde
                        set AppleScript's text item delimiters to {"."}
                        set seconde to text item 1 of duree
                        -- fait le total du dossier en cours
                        set totsec to totsec + seconde as string
                        -- fait total general
                        set tsecg to tsecg + seconde
                        my ecriture(lefichier, seconde) --appel pour ecriture dans fichier texte du fichier
                    end if
                on error the errorMessage number the errorNumber
                    display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier
                end try
            end tell
        end repeat
        my total(nomdos, totsec) --appel pour ecriture dans fichier texte total dossier
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier) -- dossier suivant
        end repeat
    end tell
end inspecter



on ecriture(nom, secondes)
    -- calcule le temps total heure-minutes-secondes et Ecrit dans la fichier texte le nom + tabulation  + la durée
    set heure to secondes div 3600 as string
    set minute to secondes mod 3600 div 60 as string
    set seconde to secondes mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
    write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & return to lelog starting at eof
    close access lelog
end ecriture

on total(nomdos, totsec)
    -- calcule le temps total heure-minutes-secondes et ecrit dans fichier texte total dossier+dans fichierprovisoire listh+listmn+listsec
    set heure to totsec div 3600 as string
    set minute to totsec mod 3600 div 60 as string
    set seconde to totsec mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
    write " total dossier " & nomdos & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec" & (ASCII character 13) & return to lelog starting at eof
    close access lelog
end total

tell application "Finder"
    -- calcule le temps total heure-minutes-secondes
    set heure to tsecg div 3600 as string
    set minute to tsecg mod 3600 div 60 as string
    set seconde to tsecg mod 60 as string
   
    --Ecrit dans la fichier texte le nom + tabulation  + la durée  
    set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
   
    write " total général du dossier " & dossier & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec" & return to lelog starting at eof
    close access lelog
end tell


tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Voilà le script modifié.
il fallait déclarer la variable globale avec "property" et lui donner la valeur avant l'appel à la routine "my inspecter" sinon elle changait à chaque changement de sous dossier.
De plus un bug dans mon script, j'avais oublié de réinitialiser la variable tsecg, donnait un mauvais total si on relançait le script sans le quitter.
Bloc de code:
property dossier : ""
property tsecg : 0
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à renommer"
    set tsecg to 0
    set dossier to name of chemin
    my inspecter(chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
      
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"dv", "DV", "mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter
        -- mise a 0 des variables duree fichier
        set totsec to 0
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set duree to "" -- mise a blanc de la durée
                set lefichier to chaque_fichier as string
              
                try
                    if lextension is in FVideo then -- si fichier video
                        set lessecondes to do shell script "mdls -name kMDItemDurationSeconds " & quoted form of POSIX path of lefichier --récupère la durée en secondes format mdls
                        set duree to word 3 of lessecondes --extrait la durée en secondes dans la variable seconde
                        set AppleScript's text item delimiters to {"."}
                        set seconde to text item 1 of duree
                        -- fait le total du dossier en cours
                        set totsec to totsec + seconde as string
                        -- fait total general
                        set tsecg to tsecg + seconde
                        my ecriture(lefichier, seconde) --appel pour ecriture dans fichier texte du fichier
                    end if
                on error the errorMessage number the errorNumber
                    display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier
                end try
            end tell
        end repeat
        my total(nomdos, totsec) --appel pour ecriture dans fichier texte total dossier
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier) -- dossier suivant
        end repeat
    end tell
end inspecter



on ecriture(nom, secondes)
    -- calcule le temps total heure-minutes-secondes et Ecrit dans la fichier texte le nom + tabulation  + la durée
    set heure to secondes div 3600 as string
    set minute to secondes mod 3600 div 60 as string
    set seconde to secondes mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
    write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & return to lelog starting at eof
    close access lelog
end ecriture

on total(nomdos, totsec)
    -- calcule le temps total heure-minutes-secondes et ecrit dans fichier texte total dossier+dans fichierprovisoire listh+listmn+listsec
    set heure to totsec div 3600 as string
    set minute to totsec mod 3600 div 60 as string
    set seconde to totsec mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
    write " total dossier " & nomdos & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec" & (ASCII character 13) & return to lelog starting at eof
    close access lelog
end total

tell application "Finder"
    -- calcule le temps total heure-minutes-secondes
    set heure to tsecg div 3600 as string
    set minute to tsecg mod 3600 div 60 as string
    set seconde to tsecg mod 60 as string
  
    --Ecrit dans la fichier texte le nom + tabulation  + la durée  
    set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
    write " total général du dossier " & dossier & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec" & return to lelog starting at eof
    close access lelog
end tell


tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Dernière édition:
Cool !
Deux petites choses :
1) avec les .dv et les .avi, la donnée de durée que trouve le programme est "none", donc il passe les lignes.
2) pour les dossier qui ne contiennent aucune vidéo, je voudrais qu'ils n'apparaissent pas dans le .txt. En gros il faudrait ajouter une condition à
my total(nomdos, totsec)
genre :
if totsec = 0
pass
else
my total(nomdos, totsec)
Sauf que ça c'est un genre de langage python un peu bâtard, je sais pas comment le faire en applescript !
 
pour ne pas noter les dossiers = à 0 modifie le script comme ça, à l'appel de "my total" ajouter le "if totsec>0 then et end if" je te mets le résultat final

end repeat
if totsec > 0 then
my total(nomdos, totsec) --appel pour ecriture dans fichier texte total dossier
end if
-- traitement des dossiers :
set les_dossiers to folders of un_dossier
repeat with chaque_dossier in les_dossiers
my inspecter(chaque_dossier) -- dossier suivant
end repeat
end tell
end inspecter

pour les avi et dv, je vais tester ..