Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

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

Discussion dans 'Vidéo' créé par igorbatchev, 23 Janvier 2018.

  1. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Salut !
    Ca fonctionne du tonnerre pour les dossiers dans le dossier que je choisis. Par contre visiblement il y a un pb dans l'addition des valeurs de tailles des fichiers pour ce qui est du total à le fin : j'obtiens un nombre ridicule, plus petit que la taille de certains fichiers contenus dans les dossiers...
     
  2. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    Je ne comprend pas de quelle valeur tu parles.
    Je ne fais pas de total !
    La dernière ligne affiche normalement la taille du dossier choisi au départ !
    Tu peux préciser ce qui ne va pas ?
     
  3. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Deso c'était pas clair.
    En gros ce qui ne fonctionne pas c,est la dernière ligne :

    total général du dossier 13_02_18 0 h 57 mn 47 sec 1.43 Mo

    alors que le dossier fait 13 gigas... Sachant que le dossier en question contient bcp de sous dossiers et sous sous dossiers. Si j essye avec un dossier qui a simplement deux sous dossiers et des files dedans ca me sort la bonne valeur. Je comprends pas ! Je viens de regarder le script et en effet c'est pas un d'addition puisque tu es allé chercher la taille direct... Je precise que si je fais
    du -h \chemin dans le terminale j'ai bien une valeur de 13 gigas.
     
  4. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    je viens de vérifier, je n'arrive pas à reproduire ton problème.
    j'ai quand même modifié le nom de la variable car il pourrai y avoir une confusion.
    essai avec ça.
    Code (Text):
    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 {"mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter
            set FVideo_dv_avi to {"dv", "DV", "avi", "AVI"}
            -- 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 "mlv" then
                            set infoRec to info for file lefichier
                            set lataille to size of infoRec
                            set lechemin to container of (path to me) as string
                            set lechemin to lechemin & "duree_mlv.py" as string
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string
                            set AppleScript's text item delimiters to {"."}
                            set seconde to text item 1 of infos
                            set seconde to seconde as number
                            if seconde = 0 then
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo then -- si fichier video
                            set infoRec to info for file lefichier
                            set lataille to size of infoRec
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                        if lextension is in FVideo_dv_avi then
                            set infoRec to info for file lefichier
                            set lataille to size of infoRec
                            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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            -- 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, lataille) --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
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --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



    on ecriture(nom, secondes, lataille)
        -- 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 lataille to lataille / 1000000
        set taille to lataille as string
        set AppleScript's text item delimiters to {","}
        set MO to text item 1 of taille
        set KO to text item 2 of taille
        set KO to text 1 thru 2 of text item 2 of taille
        set lataille to MO & "." & KO
        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 " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog
    end ecriture

    on total(nomdos, totsec, un_dossier)
       
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier
        set lataille to size of infoRec
        set lataille to lataille / 1000000
        set taille to lataille as string
        set AppleScript's text item delimiters to {","}
        set MO to text item 1 of taille
        set KO to text item 2 of taille
        set KO to text 1 thru 2 of text item 2 of taille
        set lataille to MO & "." & KO
       
        -- 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 9) & lataille & " Mo" & (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
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
        set lataille to lataille / 1000000
        set taille to lataille as string
        set AppleScript's text item delimiters to {","}
        set MO to text item 1 of taille
        set KO to text item 2 of taille
        set KO to text 1 thru 2 of text item 2 of taille
        set lataille to MO & "." & KO
       
        --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" & (ASCII character 9) & lataille & " Mo" & 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
     
  5. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Je viens d'essayer, ca e change rien...
     
  6. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    Voir en conversation privée ...
     
  7. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    Coucou !
    Voila une version qui gère les dossier de plus de 10 Go

    Code (Text):
    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 {"mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter
            set FVideo_dv_avi to {"dv", "DV", "avi", "AVI"}
            -- 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 "mlv" then
                            set infoRec to info for file lefichier
                            set lataille to size of infoRec
                            set lechemin to container of (path to me) as string
                            set lechemin to lechemin & "duree_mlv.py" as string
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string
                            set AppleScript's text item delimiters to {"."}
                            set seconde to text item 1 of infos
                            set seconde to seconde as number
                            if seconde = 0 then
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo then -- si fichier video
                            set infoRec to info for file lefichier
                            set lataille to size of infoRec
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                        if lextension is in FVideo_dv_avi then
                            set infoRec to info for file lefichier
                            set lataille to size of infoRec
                            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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            -- 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, lataille) --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
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --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



    on ecriture(nom, secondes, lataille)
        -- 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 lataille to lataille / 1000000
        set taille to lataille as string
        set AppleScript's text item delimiters to {","}
        set MO to text item 1 of taille
        set KO to text item 2 of taille
        set KO to text 1 thru 2 of text item 2 of taille
        set lataille to MO & "." & KO
        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 " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog
    end ecriture

    on total(nomdos, totsec, un_dossier)
       
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille
        set KO to taille mod MO
        set KO to KO as string
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO as string
       
       
        -- 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 9) & lataille & " Mo" & (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
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille
        set KO to taille mod MO
        set KO to KO as string
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO 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" & (ASCII character 9) & lataille & " Mo" & 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
     
  8. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Trop cool !
    Je viens d'essayer avec un gros fichier chez moi, et ça marche !
    (BTW en fait les mp4 il faut les mettre dans la liste FVideo_dv_avi sinon ça renvoie "null" comme valeur)
    Du coup t'as fait comment ? Je viens de comparer les deux scripts pour essayer de capter mais je suis un peu perdu... C'est quoi la différence entre mod et div par exemple ? Et surtout : comment t'as fait pour résoudre le pb :) ?
     
  9. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    Alors div te renvoi le résultat de la division alors que mod te renvoi le reste de la division.
    pour résoudre le problème j'ai récupérer l'entier de la division et le reste avant de transformer la valeur en chaine de caractères.

    Bref , l'important c'est que ça fonctionne.

    Edit: par contre je n'ai aucun problème avec les mp4 dans l'une ou l'autre des méthodes d'extraction ils fonctionnent dans l'une ou l'autre des listes.
     
  10. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    coucou
    je vois que tu es intéressé pour comprendre le script, donc je l'ai commenté, afin que tu puisses le comprendre et le modifié à ta convenance.

    Code (Text):
    property dossier : "" --déclaration de variables globales
    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 -- initialise la variable total general des secondes
        set dossier to name of chemin -- récupère le nom du dossier choisi pour écrire la dernière ligne du log
        my inspecter(chemin) -- appel routine inspecter
    end tell

    on inspecter(un_dossier)
        tell application "Finder"
         
            set nomdos to name of un_dossier -- recupere le nom du dossier
            set FVideo to {"mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter dans FVideo avec fonction mdls
            set FVideo_dv_avi to {"dv", "DV", "avi", "AVI"} -- liste des extension à traiter dans FVideo_de_avi avec exftool
            -- mise a 0 des variables duree fichier
            set totsec to 0
            -- traitement des fichiers :
            set les_fichiers to files of un_dossier --réupère tous les fichiers du dossier
            repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
                -- 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 --récupère le chemin du fichier au format chaine de caractères
                 
                 
                    try --bloc si erreur
                        --traitement des fichiers MLV
                        if lextension is "mlv" then
                            set infoRec to info for file lefichier --recup infos du fichier par le finder
                            set lataille to size of infoRec -- recup la taille dans les infos
                            set lechemin to container of (path to me) as string -- recup chemin du dossier qui contient le fichier, donc le .py au format chaine chaine
                            set lechemin to lechemin & "duree_mlv.py" as string --fabrique le chemin du fichier .py
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string --chemin au format unix
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string --execute fichier .py
                            set AppleScript's text item delimiters to {"."} --défini le séparateur de chaine
                            set seconde to text item 1 of infos -- recup le temps en secondes partie avant la virgule
                            set seconde to seconde as number -- converti en nombre
                            if seconde = 0 then -- si le durée est inférieure à la seconde met la durée à 1
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                     
                        if lextension is in FVideo then -- si fichier video de la liste FVideo
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            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 les secondes
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                     
                        if lextension is in FVideo_dv_avi then -- si fichier video de la liste FVideo_dv_avi
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la durée au format texte exiftool
                            set AppleScript's text item delimiters to {":"} --defini le séparateur
                            set NB to count of text items of duree -- verifi sur duree est inférieur à 30 secondes (notation différente)
                            if NB = 2 then --recuo duree en secondes
                                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 -- recup duree si supérieure à 30 sec (format hh : mn : sec )
                                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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                    on error the errorMessage number the errorNumber --recup message si erreur
                        display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier --affiche message si erreur
                    end try
                end tell
            end repeat -- fichier suivant
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --appel pour ecriture dans fichier texte total dossier si supérieur à 0
            end if
            -- traitement des dossiers :
            set les_dossiers to folders of un_dossier
            repeat with chaque_dossier in les_dossiers -- dossier suivant
                my inspecter(chaque_dossier) -- appel pour dossier suivant
            end repeat
        end tell
    end inspecter -- fin routine inspecter



    on ecriture(nom, secondes, lataille)
        -- 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 taille to lataille / 1000000 -- la taille en octets divisée par 1 000 000
        set MO to round taille -- recup dans MO l'entier  du resultat soit les Mo
        set KO to taille mod MO -- recup dans KO le resultat du reste de la division de la taille en Mo par l'entier (nommbre de Mo)
        set KO to KO as string -- le résutat du reste ( 0.xxxxxxxxxx) au format chaine
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO as string --confection de la valeur taille (Mo + les caractères 3 et 4 de Ko)
        set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
        write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog -- ferme le fichier log
    end ecriture

    on total(nomdos, totsec, un_dossier)
        -- idem écriture pour les dossiers
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille
        set KO to taille mod MO
        set KO to KO as string
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO as string
     
     
        -- 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 9) & lataille & " Mo" & (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
        -- recup de la taille du dossier initial choisi
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille
        set KO to taille mod MO
        set KO to KO as string
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO 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" & (ASCII character 9) & lataille & " Mo" & 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
     
  11. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    Décidément, j'avais pas vu un petit bug d'affichage des tailles, correction faite.

    Code (Text):
    property dossier : "" --déclaration de variables globales
    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 -- initialise la variable total general des secondes
        set dossier to name of chemin -- récupère le nom du dossier choisi pour écrire la dernière ligne du log
        my inspecter(chemin) -- appel routine inspecter
    end tell

    on inspecter(un_dossier)
        tell application "Finder"
           
            set nomdos to name of un_dossier -- recupere le nom du dossier
            set FVideo to {"mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter dans FVideo avec fonction mdls
            set FVideo_dv_avi to {"dv", "DV", "avi", "AVI"} -- liste des extension à traiter dans FVideo_de_avi avec exftool
            -- mise a 0 des variables duree fichier
            set totsec to 0
            -- traitement des fichiers :
            set les_fichiers to files of un_dossier --réupère tous les fichiers du dossier
            repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
                -- 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 --récupère le chemin du fichier au format chaine de caractères
                   
                   
                    try --bloc si erreur
                        --traitement des fichiers MLV
                        if lextension is "mlv" then
                            set infoRec to info for file lefichier --recup infos du fichier par le finder
                            set lataille to size of infoRec -- recup la taille dans les infos
                            set lechemin to container of (path to me) as string -- recup chemin du dossier qui contient le fichier, donc le .py au format chaine chaine
                            set lechemin to lechemin & "duree_mlv.py" as string --fabrique le chemin du fichier .py
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string --chemin au format unix
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string --execute fichier .py
                            set AppleScript's text item delimiters to {"."} --défini le séparateur de chaine
                            set seconde to text item 1 of infos -- recup le temps en secondes partie avant la virgule
                            set seconde to seconde as number -- converti en nombre
                            if seconde = 0 then -- si le durée est inférieure à la seconde met la durée à 1
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo then -- si fichier video de la liste FVideo
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            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 les secondes
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo_dv_avi then -- si fichier video de la liste FVideo_dv_avi
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la durée au format texte exiftool
                            set AppleScript's text item delimiters to {":"} --defini le séparateur
                            set NB to count of text items of duree -- verifi sur duree est inférieur à 30 secondes (notation différente)
                            if NB = 2 then --recuo duree en secondes
                                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 -- recup duree si supérieure à 30 sec (format hh : mn : sec )
                                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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                    on error the errorMessage number the errorNumber --recup message si erreur
                        display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier --affiche message si erreur
                    end try
                end tell
            end repeat -- fichier suivant
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --appel pour ecriture dans fichier texte total dossier si supérieur à 0
            end if
            -- traitement des dossiers :
            set les_dossiers to folders of un_dossier
            repeat with chaque_dossier in les_dossiers -- dossier suivant
                my inspecter(chaque_dossier) -- appel pour dossier suivant
            end repeat
        end tell
    end inspecter -- fin routine inspecter



    on ecriture(nom, secondes, lataille)
        -- 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 taille to lataille / 1000000 -- la taille en octets divisée par 1 000 000
        set taille to taille as string -- recup au format chaine
        set AppleScript's text item delimiters to {","} -- defini le separateur avec la ","
        set MO to text item 1 of taille -- recup la partie avant la virgule
        set KO to text 1 thru 2 of text item 2 of taille -- recup les 2 premiers caractères apres la virgule
        set lataille to MO & "." & KO -- confection de la variable lataille
       
        set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
        write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog -- ferme le fichier log
    end ecriture

    on total(nomdos, totsec, un_dossier)
        -- idem écriture pour les dossiers
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille -- recup dans MO l'entier  du resultat soit les Mo
        set KO to taille mod MO -- recup dans KO le resultat du reste de la division de la taille en Mo par l'entier (nommbre de Mo)
        set KO to KO as string -- le résutat du reste ( 0.xxxxxxxxxx) au format chaine
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO as string --confection de la valeur taille (Mo + les caractères 3 et 4 de Ko)
       
        -- 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 9) & lataille & " Mo" & (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
        -- recup de la taille du dossier initial choisi
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille
        set KO to taille mod MO
        set KO to KO as string
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO 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" & (ASCII character 9) & lataille & " Mo" & 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
     
  12. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    C'est trop cool merci ! Je suis en train d'apprendre plein de trucs en ce moment qui font que je réussis à me marrer avec des missions en soi pas très drôles...
     
  13. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    Encore un bug de dévoilé !
    le calcul de la taille des dossiers pouvait être faux car il arrondi la valeur en Mo (supérieur ou inférieur suivant xx.49 ou xx.51)
    donc il faut lui forcer l'arrondi inférieur avec l'option rounding down.
    je te remet un script ! :D

    Code (Text):
    property dossier : "" --déclaration de variables globales
    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 -- initialise la variable total general des secondes
        set dossier to name of chemin -- récupère le nom du dossier choisi pour écrire la dernière ligne du log
        my inspecter(chemin) -- appel routine inspecter
    end tell

    on inspecter(un_dossier)
        tell application "Finder"
           
            set nomdos to name of un_dossier -- recupere le nom du dossier
            set FVideo to {"mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter dans FVideo avec fonction mdls
            set FVideo_dv_avi to {"dv", "DV", "avi", "AVI"} -- liste des extension à traiter dans FVideo_de_avi avec exftool
            -- mise a 0 des variables duree fichier
            set totsec to 0
            -- traitement des fichiers :
            set les_fichiers to files of un_dossier --réupère tous les fichiers du dossier
            repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
                -- 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 --récupère le chemin du fichier au format chaine de caractères
                   
                   
                    try --bloc si erreur
                        --traitement des fichiers MLV
                        if lextension is "mlv" then
                            set infoRec to info for file lefichier --recup infos du fichier par le finder
                            set lataille to size of infoRec -- recup la taille dans les infos
                            set lechemin to container of (path to me) as string -- recup chemin du dossier qui contient le fichier, donc le .py au format chaine chaine
                            set lechemin to lechemin & "duree_mlv.py" as string --fabrique le chemin du fichier .py
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string --chemin au format unix
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string --execute fichier .py
                            set AppleScript's text item delimiters to {"."} --défini le séparateur de chaine
                            set seconde to text item 1 of infos -- recup le temps en secondes partie avant la virgule
                            set seconde to seconde as number -- converti en nombre
                            if seconde = 0 then -- si le durée est inférieure à la seconde met la durée à 1
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo then -- si fichier video de la liste FVideo
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            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 les secondes
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo_dv_avi then -- si fichier video de la liste FVideo_dv_avi
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la durée au format texte exiftool
                            set AppleScript's text item delimiters to {":"} --defini le séparateur
                            set NB to count of text items of duree -- verifi sur duree est inférieur à 30 secondes (notation différente)
                            if NB = 2 then --recuo duree en secondes
                                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 -- recup duree si supérieure à 30 sec (format hh : mn : sec )
                                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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                    on error the errorMessage number the errorNumber --recup message si erreur
                        display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier --affiche message si erreur
                    end try
                end tell
            end repeat -- fichier suivant
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --appel pour ecriture dans fichier texte total dossier si supérieur à 0
            end if
            -- traitement des dossiers :
            set les_dossiers to folders of un_dossier
            repeat with chaque_dossier in les_dossiers -- dossier suivant
                my inspecter(chaque_dossier) -- appel pour dossier suivant
            end repeat
        end tell
    end inspecter -- fin routine inspecter



    on ecriture(nom, secondes, lataille)
        -- 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 taille to lataille / 1000000 -- la taille en octets divisée par 1 000 000
        set taille to taille as string -- recup au format chaine
        set AppleScript's text item delimiters to {","} -- defini le separateur avec la ","
        set MO to text item 1 of taille -- recup la partie avant la virgule
        set KO to text 1 thru 2 of text item 2 of taille -- recup les 2 premiers caractères apres la virgule
        set lataille to MO & "." & KO -- confection de la variable lataille
       
        set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
        write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog -- ferme le fichier log
    end ecriture

    on total(nomdos, totsec, un_dossier)
        -- idem écriture pour les dossiers
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille rounding down -- recup dans MO l'entier  du resultat soit les Mo
        set KO to taille mod MO -- recup dans KO le resultat du reste de la division de la taille en Mo par l'entier (nommbre de Mo)
        set KO to KO as string -- le résutat du reste ( 0.xxxxxxxxxx) au format chaine
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO as string --confection de la valeur taille (Mo + les caractères 3 et 4 de Ko)
       
        -- 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 9) & lataille & " Mo" & (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
        -- recup de la taille du dossier initial choisi
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille rounding down
        set KO to taille mod MO
        set KO to KO as string
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & text 3 thru 4 of KO 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" & (ASCII character 9) & lataille & " Mo" & 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
     
  14. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    coucou, je continu à traquer les bugs :D
    il y avait un mauvais calcul de taille si un fichier dépassait 10 Go.

    Code (Text):
    property dossier : "" --déclaration de variables globales
    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 -- initialise la variable total general des secondes
        set dossier to name of chemin -- récupère le nom du dossier choisi pour écrire la dernière ligne du log
        my inspecter(chemin) -- appel routine inspecter
    end tell

    on inspecter(un_dossier)
        tell application "Finder"
           
            set nomdos to name of un_dossier -- recupere le nom du dossier
            set FVideo to {"mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter dans FVideo avec fonction mdls
            set FVideo_dv_avi to {"dv", "DV", "avi", "AVI"} -- liste des extension à traiter dans FVideo_de_avi avec exftool
            -- mise a 0 des variables duree fichier
            set totsec to 0
            -- traitement des fichiers :
            set les_fichiers to files of un_dossier --réupère tous les fichiers du dossier
            repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
                -- 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 --récupère le chemin du fichier au format chaine de caractères
                   
                   
                    try --bloc si erreur
                        --traitement des fichiers MLV
                        if lextension is "mlv" then
                            set infoRec to info for file lefichier --recup infos du fichier par le finder
                            set lataille to size of infoRec -- recup la taille dans les infos
                            set lechemin to container of (path to me) as string -- recup chemin du dossier qui contient le fichier, donc le .py au format chaine chaine
                            set lechemin to lechemin & "duree_mlv.py" as string --fabrique le chemin du fichier .py
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string --chemin au format unix
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string --execute fichier .py
                            set AppleScript's text item delimiters to {"."} --défini le séparateur de chaine
                            set seconde to text item 1 of infos -- recup le temps en secondes partie avant la virgule
                            set seconde to seconde as number -- converti en nombre
                            if seconde = 0 then -- si le durée est inférieure à la seconde met la durée à 1
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo then -- si fichier video de la liste FVideo
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            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 les secondes
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo_dv_avi then -- si fichier video de la liste FVideo_dv_avi
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la durée au format texte exiftool
                            set AppleScript's text item delimiters to {":"} --defini le séparateur
                            set NB to count of text items of duree -- verifi sur duree est inférieur à 30 secondes (notation différente)
                            if NB = 2 then --recuo duree en secondes
                                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 -- recup duree si supérieure à 30 sec (format hh : mn : sec )
                                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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                    on error the errorMessage number the errorNumber --recup message si erreur
                        display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier --affiche message si erreur
                    end try
                end tell
            end repeat -- fichier suivant
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --appel pour ecriture dans fichier texte total dossier si supérieur à 0
            end if
            -- traitement des dossiers :
            set les_dossiers to folders of un_dossier
            repeat with chaque_dossier in les_dossiers -- dossier suivant
                my inspecter(chaque_dossier) -- appel pour dossier suivant
            end repeat
        end tell
    end inspecter -- fin routine inspecter



    on ecriture(nom, secondes, lataille)
        -- 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 taille to lataille / 1000000 -- la taille en octets divisée par 1 000 000
        set MO to round taille rounding down -- partie avant la virgule arrondi inferieur
        set KO to round ((taille mod MO) * 100) rounding down -- recup dans KO arrondi inferieur du reste de la division  (taille /Mo) * 100
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & KO -- confection de la variable lataille
       
        set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
        write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog -- ferme le fichier log
    end ecriture

    on total(nomdos, totsec, un_dossier)
        -- idem écriture pour les dossiers
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille rounding down -- recup dans MO l'entier  du resultat soit les Mo
        set KO to round ((taille mod MO) * 100) rounding down -- recup dans KO arrondi inferieur du reste de la division  (taille /Mo) * 100
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & KO --confection de la valeur taille (Mo + les caractères 3 et 4 de Ko)
       
        -- 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 9) & lataille & " Mo" & (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
        -- recup de la taille du dossier initial choisi
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille rounding down
        set KO to round ((taille mod MO) * 100) rounding down -- recup dans KO arrondi inferieur du reste de la division  (taille /Mo) * 100
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & KO
       
        --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" & (ASCII character 9) & lataille & " Mo" & 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
     
  15. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    La résolution d'un bug en provoque un autre :D, quand on est mauvais ! ! !
    Si la taille après la virgule commençait par un 0 (xxxx.01) alors le 0 était supprimé !
    Code (Text):
    property dossier : "" --déclaration de variables globales
    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 -- initialise la variable total general des secondes
        set dossier to name of chemin -- récupère le nom du dossier choisi pour écrire la dernière ligne du log
        my inspecter(chemin) -- appel routine inspecter
    end tell

    on inspecter(un_dossier)
        tell application "Finder"
         
            set nomdos to name of un_dossier -- recupere le nom du dossier
            set FVideo to {"mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter dans FVideo avec fonction mdls
            set FVideo_dv_avi to {"dv", "DV", "avi", "AVI"} -- liste des extension à traiter dans FVideo_de_avi avec exftool
            -- mise a 0 des variables duree fichier
            set totsec to 0
            -- traitement des fichiers :
            set les_fichiers to files of un_dossier --réupère tous les fichiers du dossier
            repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
                -- 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 --récupère le chemin du fichier au format chaine de caractères
                 
                 
                    try --bloc si erreur
                        --traitement des fichiers MLV
                        if lextension is "mlv" then
                            set infoRec to info for file lefichier --recup infos du fichier par le finder
                            set lataille to size of infoRec -- recup la taille dans les infos
                            set lechemin to container of (path to me) as string -- recup chemin du dossier qui contient le fichier, donc le .py au format chaine chaine
                            set lechemin to lechemin & "duree_mlv.py" as string --fabrique le chemin du fichier .py
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string --chemin au format unix
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string --execute fichier .py
                            set AppleScript's text item delimiters to {"."} --défini le séparateur de chaine
                            set seconde to text item 1 of infos -- recup le temps en secondes partie avant la virgule
                            set seconde to seconde as number -- converti en nombre
                            if seconde = 0 then -- si le durée est inférieure à la seconde met la durée à 1
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                     
                        if lextension is in FVideo then -- si fichier video de la liste FVideo
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            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 les secondes
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                     
                        if lextension is in FVideo_dv_avi then -- si fichier video de la liste FVideo_dv_avi
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la durée au format texte exiftool
                            set AppleScript's text item delimiters to {":"} --defini le séparateur
                            set NB to count of text items of duree -- verifi sur duree est inférieur à 30 secondes (notation différente)
                            if NB = 2 then --recuo duree en secondes
                                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 -- recup duree si supérieure à 30 sec (format hh : mn : sec )
                                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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                    on error the errorMessage number the errorNumber --recup message si erreur
                        display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier --affiche message si erreur
                    end try
                end tell
            end repeat -- fichier suivant
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --appel pour ecriture dans fichier texte total dossier si supérieur à 0
            end if
            -- traitement des dossiers :
            set les_dossiers to folders of un_dossier
            repeat with chaque_dossier in les_dossiers -- dossier suivant
                my inspecter(chaque_dossier) -- appel pour dossier suivant
            end repeat
        end tell
    end inspecter -- fin routine inspecter



    on ecriture(nom, secondes, lataille)
        -- 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 taille to lataille / 1000000 -- la taille en octets divisée par 1 000 000
        set MO to round taille rounding down -- partie avant la virgule arrondi inferieur
        set KO to round ((taille mod MO) * 100) rounding down -- recup dans KO arrondi inferieur du reste de la division  (taille /Mo) * 100
        if KO < 10 then -- si Ko est inférieur à 10 alors il y à un 0 devant (9 --> 09)
            set KO to KO as string
            set KO to "0" & KO
        end if
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & KO -- confection de la variable lataille
     
        set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
        write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog -- ferme le fichier log
    end ecriture

    on total(nomdos, totsec, un_dossier)
        -- idem écriture pour les dossiers
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille rounding down -- recup dans MO l'entier  du resultat soit les Mo
        set KO to round ((taille mod MO) * 100) rounding down -- recup dans KO arrondi inferieur du reste de la division  (taille /Mo) * 100
        if KO < 10 then
            set KO to KO as string
            set KO to "0" & KO
        end if
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & KO --confection de la valeur taille (Mo + les caractères 3 et 4 de Ko)
     
        -- 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 9) & lataille & " Mo" & (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
        -- recup de la taille du dossier initial choisi
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
        set taille to lataille / 1000000
        set MO to round taille rounding down
        set KO to round ((taille mod MO) * 100) rounding down -- recup dans KO arrondi inferieur du reste de la division  (taille /Mo) * 100
        if KO < 10 then
            set KO to KO as string
            set KO to "0" & KO
        end if
        set AppleScript's text item delimiters to {"."}
        set lataille to MO & KO
     
        --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" & (ASCII character 9) & lataille & " Mo" & 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
     
    #95 zeltron54, 4 Mars 2018
    Dernière édition: 4 Mars 2018
  16. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 376
    J'aime reçus:
    201
    Coucou Igor,
    Allez une manière beaucoup plus simple, de calculer la taille en Mo . o_O
    Code (Text):
    property dossier : "" --déclaration de variables globales
    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 -- initialise la variable total general des secondes
        set dossier to name of chemin -- récupère le nom du dossier choisi pour écrire la dernière ligne du log
        my inspecter(chemin) -- appel routine inspecter
    end tell

    on inspecter(un_dossier)
        tell application "Finder"
           
            set nomdos to name of un_dossier -- recupere le nom du dossier
            set FVideo to {"mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4"} -- liste des extensions a traiter dans FVideo avec fonction mdls
            set FVideo_dv_avi to {"dv", "DV", "avi", "AVI"} -- liste des extension à traiter dans FVideo_de_avi avec exftool
            -- mise a 0 des variables duree fichier
            set totsec to 0
            -- traitement des fichiers :
            set les_fichiers to files of un_dossier --réupère tous les fichiers du dossier
            repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
                -- 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 --récupère le chemin du fichier au format chaine de caractères
                   
                   
                    try --bloc si erreur
                        --traitement des fichiers MLV
                        if lextension is "mlv" then
                            set infoRec to info for file lefichier --recup infos du fichier par le finder
                            set lataille to size of infoRec -- recup la taille dans les infos
                            set lechemin to container of (path to me) as string -- recup chemin du dossier qui contient le fichier, donc le .py au format chaine chaine
                            set lechemin to lechemin & "duree_mlv.py" as string --fabrique le chemin du fichier .py
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string --chemin au format unix
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string --execute fichier .py
                            set AppleScript's text item delimiters to {"."} --défini le séparateur de chaine
                            set seconde to text item 1 of infos -- recup le temps en secondes partie avant la virgule
                            set seconde to seconde as number -- converti en nombre
                            if seconde = 0 then -- si le durée est inférieure à la seconde met la durée à 1
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo then -- si fichier video de la liste FVideo
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            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 les secondes
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo_dv_avi then -- si fichier video de la liste FVideo_dv_avi
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la durée au format texte exiftool
                            set AppleScript's text item delimiters to {":"} --defini le séparateur
                            set NB to count of text items of duree -- verifi sur duree est inférieur à 30 secondes (notation différente)
                            if NB = 2 then --recuo duree en secondes
                                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 -- recup duree si supérieure à 30 sec (format hh : mn : sec )
                                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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                    on error the errorMessage number the errorNumber --recup message si erreur
                        display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier --affiche message si erreur
                    end try
                end tell
            end repeat -- fichier suivant
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --appel pour ecriture dans fichier texte total dossier si supérieur à 0
            end if
            -- traitement des dossiers :
            set les_dossiers to folders of un_dossier
            repeat with chaque_dossier in les_dossiers -- dossier suivant
                my inspecter(chaque_dossier) -- appel pour dossier suivant
            end repeat
        end tell
    end inspecter -- fin routine inspecter



    on ecriture(nom, secondes, lataille)
        -- 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 lataille to (round lataille / 10000 rounding down) / 100 -- la taille en Mo et 2 chiffres representatifs apres la virgule
       
        set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
        write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog -- ferme le fichier log
    end ecriture

    on total(nomdos, totsec, un_dossier)
        -- idem écriture pour les dossiers
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier -- recupère la taille du dossier en octets
        set lataille to size of infoRec
       
        set lataille to (round lataille / 10000 rounding down) / 100 -- la taille en Mo et 2 chiffres representatifs apres la virgule
       
       
        -- 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 9) & lataille & " Mo" & (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
        -- recup de la taille du dossier initial choisi
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
       
        set lataille to (round lataille / 10000 rounding down) / 100
       
        --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" & (ASCII character 9) & lataille & " Mo" & 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
     
  17. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Salut !
    Me revoilà pour continuer à essayer d'améliorer le script :)
    En gros comme je l'avais écrit à un moment, les .mp4 ont le même problème que les .avi et les .dv : quand on essaye de prendre leur durée sans passer par exiftool, la valeur retournée est "null".
    Et il y a quelques jours, j'ai dévouvert qu'il en était de même pour les .mov encodés en H264 !
    Donc pour l'instant j'en suis resté à une solution qui consiste à placer les .mov et les .mp4 dans la liste FVideo_dv_avi (qu'on peut d'ailleurs renommer du coup), mais au final je me suis mis à rêver d'une autre solution...

    Pour rappel, suite à mon poste 31, on avait cherché à ne pas passer par exiftool pour la durée parce que le logiciel n'arrivait pas à la lire sur certains mp4... Mais on avait séparé les DV et les avi parce que la nouvelle manière ne trouvait pas les métadonnées.
    Là je suis en train de me rendre compte qu'en fait la plupart du temps, il faut aussi mettre les lp4 et les mov via exiftool parce que sinon je n'ai pas les données de temps...
    Du coup ça me donne l'idée d'une autre manière de faire :
    On ferait une seule liste avec les mov dv avi divx etc etc (tout ce qu'on veut sauf les mlv quoi), et on passe par exiftool. Mais on ajoute un "if" : "si jamais par exiftool on n'obtient pas la valeur de la durée", alors "on essaye l'autre méthode".
     
  18. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Voilà où j'en suis mais je galère...
    Code (Text):
    property dossier : "" --déclaration de variables globales
    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 -- initialise la variable total general des secondes
        set dossier to name of chemin -- récupère le nom du dossier choisi pour écrire la dernière ligne du log
        my inspecter(chemin) -- appel routine inspecter
    end tell

    on inspecter(un_dossier)
        tell application "Finder"
           
            set nomdos to name of un_dossier -- recupere le nom du dossier
            set FVideo to {"VOB", "vob", "divx", "dv", "DV", "avi", "AVI", "mp4", "MP4", "mov", "MOV"} -- liste des extensions a traiter dans FVideo avec fonction mdls
            -- mise a 0 des variables duree fichier
            set totsec to 0
            -- traitement des fichiers :
            set les_fichiers to files of un_dossier --réupère tous les fichiers du dossier
            repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
                -- 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 --récupère le chemin du fichier au format chaine de caractères
                   
                   
                    try --bloc si erreur
                        --traitement des fichiers MLV
                        if lextension is "mlv" then
                            set infoRec to info for file lefichier --recup infos du fichier par le finder
                            set lataille to size of infoRec -- recup la taille dans les infos
                            set lechemin to container of (path to me) as string -- recup chemin du dossier qui contient le fichier, donc le .py au format chaine chaine
                            set lechemin to lechemin & "duree_mlv.py" as string --fabrique le chemin du fichier .py
                            set fichier_mlv_info to quoted form of POSIX path of lechemin as string --chemin au format unix
                            set infos to do shell script "python " & fichier_mlv_info & " " & quoted form of POSIX path of lefichier as string --execute fichier .py
                            set AppleScript's text item delimiters to {"."} --défini le séparateur de chaine
                            set seconde to text item 1 of infos -- recup le temps en secondes partie avant la virgule
                            set seconde to seconde as number -- converti en nombre
                            if seconde = 0 then -- si le durée est inférieure à la seconde met la durée à 1
                                set seconde to 1
                            end if
                            -- 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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
                       
                        if lextension is in FVideo then -- si fichier video de la liste FVideo
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            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 les secondes
                            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, lataille) --appel pour ecriture dans fichier texte du fichier
                        end if
     
  19. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    La suite du code (je peux pas poster des messages de plus de 5000 caractères)
    Code (Text):
       
                        if errorMessage then -- c'est ici que je galère... Je voudrais que si jamais je n'ai pas de durée en seconde, je passe par l'autre méthode. J'ai essayé en écrivant if errorMessage is "il est impossible de rendre "null" en type number." then etcetc
                            -- mais le problème de cette tentative, c'est que les guillemets de "null" ferment ce du début. Bref pour l'instant je beugue ici, et c'est relou...
                            display dialog "erreur: " & errorMessage & " sur le  fichier " & lefichier & "du coup on va essayer une autre méthode" --affiche message si erreur
                            set infoRec to info for file lefichier --recup taille
                            set lataille to size of infoRec
                            set duree to do shell script "/usr/local/bin/exiftool -Duration " & quoted form of POSIX path of lefichier --récupère la durée au format texte exiftool
                            set AppleScript's text item delimiters to {":"} --defini le séparateur
                            set NB to count of text items of duree -- verifi sur duree est inférieur à 30 secondes (notation différente)
                            if NB = 2 then --recuo duree en secondes
                                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 -- recup duree si supérieure à 30 sec (format hh : mn : sec )
                                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
                                set seconde to seconde + (minute * 60) + (heure * 3600)
                            end if
                            display dialog "Voila c'est resolu, le fichier qui affichait null fait en fait  " & seconde & " secondes "
                            set totsec to totsec + seconde as string
                            -- fait total general
                            set tsecg to tsecg + seconde
                            my ecriture(lefichier, seconde, lataille) --appel pour ecriture dans fichier texte du fichier
                           
                        end if
                       
                    end try
                end tell
            end repeat -- fichier suivant
            if totsec > 0 then
                my total(nomdos, totsec, un_dossier) --appel pour ecriture dans fichier texte total dossier si supérieur à 0
            end if
            -- traitement des dossiers :
            set les_dossiers to folders of un_dossier
            repeat with chaque_dossier in les_dossiers -- dossier suivant
                my inspecter(chaque_dossier) -- appel pour dossier suivant
            end repeat
        end tell
    end inspecter -- fin routine inspecter
     
     
  20. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    et la fin :

    Code (Text):


    on ecriture(nom, secondes, lataille)
        -- 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 lataille to (round lataille / 10000 rounding down) / 100 -- la taille en Mo et 2 chiffres representatifs apres la virgule
       
        set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
        write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & (ASCII character 9) & lataille & " Mo" & return to lelog starting at eof
        close access lelog -- ferme le fichier log
    end ecriture

    on total(nomdos, totsec, un_dossier)
        -- idem écriture pour les dossiers
        set un_dossier to un_dossier as string
        set infoRec to info for file un_dossier -- recupère la taille du dossier en octets
        set lataille to size of infoRec
       
        set lataille to (round lataille / 10000 rounding down) / 100 -- la taille en Mo et 2 chiffres representatifs apres la virgule
       
       
        -- 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 9) & lataille & " Mo" & (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
        -- recup de la taille du dossier initial choisi
        set chemin to chemin as string
        set infoRec to info for file chemin
        set lataille to size of infoRec
       
        set lataille to (round lataille / 10000 rounding down) / 100
       
        --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" & (ASCII character 9) & lataille & " Mo" & 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
     
Chargement...