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

Pour les avi et dv, exiftool les lit très bien... Donc au pire on peut passer par exiftool en cas d'erreur avec la méthode que tu as trouvée.

Ah et sinon l'idée c'est qu'à partir de mon fichier .txt je peux dérusher, c'est à dire regarder les vidéos et écrire ce que j'en ai pensé. Donc en cas d'erreur il me faut quand même une ligne dans le .txt ! Ca donne une ligne en plus :

on error the errorMessage number the errorNumber
display dialog "erreur: " & errorMessage & " sur le fichier " & lefichier
my ecritureerror(lefichier)

avec :

on ecritureerror(nom)
set lelog to open for access ((path to desktop folder as text) & dossier & ".txt") as text with write permission
write nom & " duree inconnue" & return to lelog starting at eof
close access lelog
end ecritureerror
 
ok donc par exiftool pour les dv et avi
cela nous donne:
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 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

Attention éditer suite à erreur
 
Dernière édition:
Il y avait un problème avec la gestion .avi et les .dv : dans ton précédent scripte seules les secondes sont prises en comtpte, mais pas les minutes ni les heures.
J'ai rectifié, ça donne :



Bloc de code:
if lextension is in FVideo_dv_avi_vob 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_num to get last text item of duree as integer -- récupère les secondes
                            set minute to text item 3 of duree as integer
                            if minute > 0 then set seconde_num to seconde_num + 60 * minute
                            set heure to text item 2 of duree as integer
                            if heure > 0 then set seconde_num to seconde_num + 3600 * heure
                            set seconde to seconde_num as string
                            --récupère les heures
                        end if

Bonne nuit !
I
 
Effectivement je l'avais vu, j'avais édité le script et je l'avais modifié en ajoutant une seule ligne de transformation des temps en secondes (en évitant trop de "if").

Ok j'attends ton retour après tes différents tests .
 
Tu avais fait comment pour éviter les "if" ?

Je viens de sortir une liste de rush à partir du film sur lequel je travaille... Ca a fonctionné sans problème !

Nouveau défi : intérgrer les .mlv dans le script.
exiftool ne lis pas leur métadata, pas plus que l'autre solution que tu as trouvée...
 
Pour éviter les if, récupère mon dernier script c'est dedans.
pour les .mlv, je ne connait pas , je ne possède pas de fichier .mlv pour analyser, il proviennent d'où ? où je pourrai en télécharger un ?
 
Ok c'est bien le format raw de Magic Lantern, mais ou pourrais-je télécharger un fichier de ce format pour l'analyser, et voir comment on pourrai récupérer la durée de la vidéo.
 
Oui en effet je parle du raw de Magic Lantern.
Je sais pas où on en trouve et je n'en ai pas avec moi mais si tu trouves pas je t'en passe un via wetransfer en MP demain ou après-demain !
J'avais pas capté que tu avais édité ton poste sur le site, et en effet ta manière de faire est plus simple et plus élégante :)
A plus,
IGOR
 
C'est un format de fichier à la RIFF, à base de sequences de blocs identifiés par un type et une taille.

Le premier bloc est censé etre 'MVLI', et structuré ainsi :

https://github.com/ilia3101/MLV-App/blob/ec25c1d2237a3020eb86e6846a9f1bdfa0df73fd/src/mlv/mlv.h#L50

Pour extraire la durée, il faut extraire les champs videoFrameCount (offset 36, 4 octets), sourceFpsNom (offset 44, 4 octets) et sourceFpsDenom (offset 48, 4 octets).
La nombre de frame / le fps donnant la durée en seconde de la séquence capturée.

En python, avec le module struct, je saurais faire ça, mais en AppleScript, là...
 
Igor,
Je viens de récupérer un .mlv, fichier énorme pour un toute petite durée, et avec peu de logiciel capable de les lire, Là je ne vois pas comment intégrer ce format dans le script !
Peut être devrais-tu les réencoder en .mov avec "MlRawViewer 1.3.3" en fonction de l'usage que tu en as.
 
Oui oui bien sûr pour les transcodes c'est déjà fait (et d'ailleirs je recommande MLV.app plus que MIRawViewer, j'ai moins de bug avec et il gère plutôt bien le dual iso de MagicLantern, mais c'est une autre histoire :)
Je me demandais juste si il y avait moyen de faire fonctionner le schmilblik avec les MLV pour pouvoir avoir une idée du temps de rushs avant de les transcoder.
Je vais essayer de trouver !
A plus,
I.
 
Je me demandais juste si il y avait moyen de faire fonctionner le schmilblik avec les MLV pour pouvoir avoir une idée du temps de rushs avant de les transcoder.
Je vais essayer de trouver !
A plus,
I.

Vous avez souvent des MLV ? C'est de plus en plus utilisé de nos jours j'ai l'impression...
Quand vous en avez, est-ce souvent une série de plusieurs fichiers numéroté en séquence ?
 
Je n'y connait rien en python, et en mettant "python mlv_info.py chemin_fichier.mlv" dans le terminal j' ai "No such file or directory"

Peux me dire comment utiliser "python mlv_info.py"
merci
 
Réponse du terminal : Python 2.7.10
Et bien sur je met le chemin du fichier après la commande par glissé déposé de mon fichier .mlv
ce qui donne:
python mlv_info.py /Users/jNom_utilisateur/Desktop/M11.mlv
 
Toujours pas trouvé !
Python fonctionne: j'ai créé un fichier.py avec un petit script ("print "test ") là pas de problème, à l'appel du fichier depuis le terminal il exécute bien.
dans ce même fichier j'ai ajouté ta commande (mlv_info) avec le chemin du fichier et j'ai une erreur : (NameError: name 'mlv_info' is not defined)

Je sais je suis nul en python... Mais j'espère que tu vas m'aider sur ce coup.
merci d'avance

Edit: Ok j'ai trouvé le script sur le site, je vais regarder ça.
 
Dernière édition: