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

rebonsoir, désolé j'étais offline.
J'avoue, j'ai développé ce script sous Linux, du coup je vois pas trop pourquoi ca déconne sous MacOS, j'ai pas de mac sous la main ce soir chez moi.

Y'a pas d'espace dans le nom d'un des répertoires menant au fichier .mlv quand meme !?
Dans ce cas faut le mettre entre " dans la ligne de commande, mais j'imagine que vous le savez, ça.

Sinon, pour faire du pas à pas dans le code :

python -m pdb mlv_info.py "/Users/....etc .../fichier.mlv "

Puis 'n' pour executer ligne après ligne le script
 
P'tet un probleme d'encodage unicode? Terminal est configuré sur UTF-8 par défaut ?

Sinon, faut modifier l'avant dernière ligne ainsi :

with open(sys.argv[1].decode('utf-8'), 'rb') as f:

et p'tet rajouté ceci tout au début :

Bloc de code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
@byte_order

Merci, c'est bon j'ai télécharger le script python sur le site et j'ai réussi à le lancer depuis applescript.
je peux donc maintenant proposer un script applescript à Igorbatchev et lui transmettre le script python (modifié pour qu'il ne donne que la durée).
 
Dernière édition:
@ igorbatchev

Grace au script python de "byte_order" on peut obtenir la durée des fichier mlv.
pour cela il faut que le fichier python nommé "mlv_duree.py" soit sur le bureau.
je te joins le script du fichier python et le script applescript modifié.

le pyhon
Bloc de code:
import struct
import sys

mlv_block_hdr = struct.Struct('< 4s I Q')
mlv_file_hdr = struct.Struct('< 4s I 8s Q H H I H H I I I I')
mlv_vers_hdr = struct.Struct('< 4s I Q I')
mlv_rawi_hdr = struct.Struct('< 4s I Q H H')
mlv_rtci_hdr = struct.Struct('< 4s I Q H H H H H H H H H H 8s')

def parse_rtci_block(block):
    _, _, _, s, m, h, day, month, year, _, _, _, gmt, tz = mlv_rtci_hdr.unpack_from(block)
    year += 1900

def parse_vers_block(block):
    _, _, _, length = mlv_vers_hdr.unpack_from(block)
    versions = struct.unpack_from("< %ds" % length, block, mlv_vers_hdr.size)

def parse_rawi_block(block):
    _, _, _, xres, yres = mlv_rawi_hdr.unpack_from(block)

def parse_info_block(block):
    _, blocksize, _ = mlv_block_hdr.unpack_from(block)
    infos = struct.unpack_from("< %ds" % (blocksize - mlv_block_hdr.size),
                               block, mlv_block_hdr.size)

def parse_mlvi_block(block):
    videoClasses = {0: 'none', 1: 'RAW', 2: 'YUV', 3: 'JPEG', 4: 'H.264'}
    audioClasses = {0: 'none', 1: 'WAV'}

    _, _, file_version, \
        file_guid, file_num, file_count, file_flags, \
        video_class, audio_class, \
        video_frame_count, audio_frame_count, \
        source_fps_nominator, source_fps_denominator = mlv_file_hdr.unpack(block)
    fps = float(source_fps_nominator / source_fps_denominator)
    duration = float(video_frame_count / fps)
    print " %.3fs" % duration


def parse_block(block):
    blocktype, blocksize, timestamp = mlv_block_hdr.unpack_from(block)
    if blocktype == 'NULL':
        # skip padding blocks
        return

    if blocktype == 'MLVI':
        parse_mlvi_block(block)
    elif blocktype == 'INFO':
        parse_info_block(block)
    elif blocktype == 'RAWI':
        parse_rawi_block(block)
    elif blocktype == 'VERS':
        parse_vers_block(block)
    elif blocktype == 'RTCI':
        parse_rtci_block(block)
    else:
        pass

def read_block(f):
    while True:
        # read block header
        try:
            block_header = f.read(mlv_block_hdr.size)
            blocktype, blocksize, timestamp = mlv_block_hdr.unpack_from(block_header)
            f.seek(-mlv_block_hdr.size, 1);
            block = f.read(blocksize)
            yield block
        except:
            return

with open(sys.argv[1], 'rb') as f:
    [parse_block(block) for block in read_block(f)]

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

on inspecter(un_dossier)
    tell application "Finder"
       
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"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 fichier_mlv_info to quoted form of POSIX path of (path to desktop folder) & "mlv_duree.py" 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) --appel pour ecriture dans fichier texte du fichier
                       
                    end if
                   
                    if lextension is in FVideo then -- si fichier video
                        set lessecondes to do shell script "mdls -name kMDItemDurationSeconds " & quoted form of POSIX path of lefichier --récupère la durée en secondes format mdls
                        set duree to word 3 of lessecondes --extrait la durée en secondes dans la variable seconde
                        set AppleScript's text item delimiters to {"."}
                        set seconde to text item 1 of duree
                        -- fait le total du dossier en cours
                        set totsec to totsec + seconde as string
                        -- fait total general
                        set tsecg to tsecg + seconde
                        my ecriture(lefichier, seconde) --appel pour ecriture dans fichier texte du fichier
                    end if
                    if lextension is in FVideo_dv_avi then
                        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) --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) --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)
    -- calcule le temps total heure-minutes-secondes et Ecrit dans la fichier texte le nom + tabulation  + la durée
    set heure to secondes div 3600 as string
    set minute to secondes mod 3600 div 60 as string
    set seconde to secondes mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
    write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & return to lelog starting at eof
    close access lelog
end ecriture

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

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


tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
les fichiers MLV étant en général énorme, mon script parse tous les blocks, alors que seul le MLVI, normalement obligatoirement le premier, est suffisant. Y'a moyen donc d'etre plus performant en terminant brutalement des qu'on a vu le block MLVI.
 
OK
mais mes connaissances en python étant nulle, je suis incapable de le modifier, je n'ai fait que supprimer les affichages autre que la durée, durée que je récupère dans mon script.
Encore merci.
 
OK
mais mes connaissances en python étant nulle, je suis incapable de le modifier, je n'ai fait que supprimer les affichages autre que la durée, durée que je récupère dans mon script.
Encore merci.

Une version plus compact (et avec un shebang et l'encoding...) qui ne lit que l'entête et retourne que la durée sans parcourir tous les blocks suivants d'un MLV :

Bloc de code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import struct
import sys

mlv_block_hdr = struct.Struct('< 4s I Q')
mlv_file_hdr = struct.Struct('< 4s I 8s Q H H I H H I I I I')

def get_mlv_duration(f):
    # read first  block header
    try:
        block_header = f.read(mlv_block_hdr.size)
        blocktype, blocksize, timestamp = mlv_block_hdr.unpack_from(block_header)
        if blocktype != 'MLVI':
            # not a valid Magic Lantern Movie file, as first block MUST be a MLVI block
            sys.exit(1)

        f.seek(-mlv_block_hdr.size, 1);
        block = f.read(blocksize)
        _, _, file_version, \
            file_guid, file_num, file_count, file_flags, \
            video_class, audio_class, \
            video_frame_count, audio_frame_count, \
            source_fps_nominator, source_fps_denominator = mlv_file_hdr.unpack(block)
        fps = float(source_fps_nominator / source_fps_denominator)
        duration = float(video_frame_count / fps)
        print "%.3f" % duration
    except:
        sys.exit(2)

with open(sys.argv[1], 'rb') as f:
    get_mlv_duration(f)
 
@ byte_order
Magnifique, testé et approuvé.
C'est Igorbatchev qui sera content.:D
Merci encore pour ce script.
 
@ Igorbatchev
Suite à l'excellent script python de Byte_order qui est à récupérer et à enregistrer sous le nom de "duree_mlv.py" et à placer au même endroit que le script ( dans le même dossier), je t'ai modifié mon script pour qu'il le prenne en compte et donne la durée des .lmv.
Les fichiers .lmv dont la durée est inférieure à 1 seconde sont marqués 1 seconde.
J'attends ton retour .

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

on inspecter(un_dossier)
    tell application "Finder"
      
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"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 chemin to container of (path to me) as string
                        set chemin to chemin & "duree_mlv.py" as string
                        set fichier_mlv_info to quoted form of POSIX path of chemin 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) --appel pour ecriture dans fichier texte du fichier
                      
                    end if
                  
                    if lextension is in FVideo then -- si fichier video
                        set lessecondes to do shell script "mdls -name kMDItemDurationSeconds " & quoted form of POSIX path of lefichier --récupère la durée en secondes format mdls
                        set duree to word 3 of lessecondes --extrait la durée en secondes dans la variable seconde
                        set AppleScript's text item delimiters to {"."}
                        set seconde to text item 1 of duree
                        -- fait le total du dossier en cours
                        set totsec to totsec + seconde as string
                        -- fait total general
                        set tsecg to tsecg + seconde
                        my ecriture(lefichier, seconde) --appel pour ecriture dans fichier texte du fichier
                    end if
                    if lextension is in FVideo_dv_avi then
                        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) --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) --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)
    -- calcule le temps total heure-minutes-secondes et Ecrit dans la fichier texte le nom + tabulation  + la durée
    set heure to secondes div 3600 as string
    set minute to secondes mod 3600 div 60 as string
    set seconde to secondes mod 60 as string
    set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
    write nom & (ASCII character 9) & heure & " h " & minute & " mn " & seconde & " sec " & return to lelog starting at eof
    close access lelog
end ecriture

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

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


tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Salut,

J'ai testé, c'est du lourd !

Par contre c'est approximatif...

En fait j'ai essayé sur un dossier avec une dizaine de vidéos MLV et sur un dossier avec les même vidéo transcodées en proxy quicktime... et j'ai pas obtenue la même longeur globale ! D'une vidéo à l'autre ça peut varier jusqu'à deux secondes, souvent ce sont les MLV qui sont trop longs.

Je me suis demandé si j'avais pas raté mes transcodes du coup, mais en fait en ouvrant une vidéo qui m'est affiché à 29 sec dans le doc créé par le script je me suis aperçu qu'elle faisait en fait 695 frames, soit 28 secondes approx (vu que c'est du 25 frames/secondes). Bref pour une raison que j'ignore c'est pas précis à mort. MAIS c'est quand même de la bombe !
J'ai juste eu le temps de tester, par encore eu le temps de mettre le nez dedans,et j'ai un autre pb à régler (bientôt un post sur le forum) mais j'ai hâte de capter comment vous avez fait.

Sinon quelqu'un sait comment on obtient la taille d'un dossier via applescript ? Histoire d'ajouter une donnée au délire... héhé.

A plus !

Igor
 
Salut,
Sinon quelqu'un sait comment on obtient la taille d'un dossier via applescript ? Histoire d'ajouter une donnée au délire... héhé.
J'ai fait un script dernièrement sur le forum pour avoir la liste des dossiers contenus dans un dossier avec leurs tailles, il faut que je retrouve!
Tu veux obtenir quoi exactement?
 
Bah en plus du temps avoir aussi des données de taille . Genre ça donnerait :
Bloc de code:
Macintosh HD:Users:igor:Desktop:dossier sans titre 2:OURS_19.mov    0 h 7 mn 46 sec      170Mo
Macintosh HD:Users:igor:Desktop:dossier sans titre 2:OURS_20.mov    0 h 8mn 45 sec       205Mo
total dossier dossier sans titre 2    0 h 7 mn 46 sec   375Mo

total général du dossier dossier sans titre 2    0 h 7 mn 46 sec     375Mo
 
Une petite question !
Pour les fichiers pas de problème, mais pour les dossiers tu veux la taille du dossier complet (y compris les fichiers non vidéo ou cachés) ou la somme des vidéos qu'il contient qui sont listées juste au dessus ?
 
Le dossier entier ! (Le plus souvent c'est la même chose mais bon au moins comme ça j'ai pas de mauvaise surprise. Et surtout comme ça si quelqu'un veut utiliser le script juste pour les infos sur les dossiers sans les détails de chaque fichier je pense que c'est plus facile de modifier le script.
En revanche pour la taille des fichiers MLV ça risque d'être compliqué, je pense que plutôt que de repasser par Python on doit pouvoir se contenter d'obtenir via applescript la taille du dossier analysé, tant pis pour les détails fichier par fichier non ?
 
Je regarde ça!
autre chose la taille en quelle unité (octets, Ko, Mo) et avec quel arrondi ?
 
Bien alors voilà ton script avec la taille des fichiers et des dossiers

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

on inspecter(un_dossier)
    tell application "Finder"
       
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"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 chemin to container of (path to me) as string
                        set chemin to chemin & "duree_mlv.py" as string
                        set fichier_mlv_info to quoted form of POSIX path of chemin 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 KO1 to character 1 of KO & character 2 of KO
    set lataille to MO & "." & KO1
    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 KO1 to character 1 of KO & character 2 of KO
    set lataille to MO & "." & KO1
   
    -- 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 un_dossier to chemin 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 KO1 to character 1 of KO & character 2 of KO
    set lataille to MO & "." & KO1
   
    --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
 
Une nouvelle version légèrement modifiée.
j'attends le retour !

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

on inspecter(un_dossier)
    tell application "Finder"
       
        set nomdos to name of un_dossier -- recupere le nom du dossier
        set FVideo to {"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 chemin to container of (path to me) as string
                        set chemin to chemin & "duree_mlv.py" as string
                        set fichier_mlv_info to quoted form of POSIX path of chemin 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 un_dossier to chemin 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
   
    --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