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. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    Bonjour,

    je regarde ça dés que j'ai un moment ! surtout qu'il faut que je me replonge dedans, depuis mars ...
     
  2. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Oui j'imagine ^^
    Moi même j'ai mis du temps à me remettre dedans !
    A très vite alors :)
     
  3. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    J'ai un problème pour tester, je n'ai pas trouvé de vidéo mp4 ou avi qui ne soit pas lu correctement par Exiftool.
    J' en aurais besoin pour voir ce que renvoi exiftool dans la variable après avoir essayé d'en extraire la durée.
    Aurais-tu un lien vers un fichier de ce type, ou as-tu la possibilité de faire un essai sur un fichier.
     
  4. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Alors là tout de suite le message d'erreur que ça me donne c'est le suivant : CAPTURE_ 2018-10-09 à 16.12.41.png


    Tu veux que je t'envoie le fichier en MP ? C'est du mov encodé en H264
     
  5. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Attends, je crois que j'ai pas été assez clair : le problème c'est pas que les avi les mp4 sont pas lus par exiftool...
    En fait histoiriquement on avait commencé par confier toutes les lectures à Exiftool. Ca marchait. Puis on a rencontré certains fichiers dont on n'arrivait pas à extraire certaines données via exiftool. TDu coup tu as trouvé le moyen d'extraire les données de durée par un autre moyen, sans passer par exiftool.
    Mais ensuite il s'est avéré que cette nouvelle manière ne convenait pas pour les avi et les dv. Du coup dans ta dernière version, on prend les données par exiftool pour ces deux formats, et on utilise la manière sans exiftool pour tout le reste.

    Sauf qu'il s'avère que pour tous les mp4, que leur capsule soit .mp4 ou .mov, on rencontre le même problème que pour les avi et les dv.

    Du coup l'idée c'est de tout reconfier à exiftool, mais en lui disant que si jamais il reçoit le message "null" quand il extrait la durée, alors il essaye avec la deuxième solution (celle qui passe pas par exiftool).
    Du coup c'est plus l'extension qui fait qu'on passe par exiftool ou non, mais c'est seulement pour les fichiers où exiftool plante qu'on essaye la deuxième solution.
     
  6. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Par exemple le fichier "A" qui beugue comme expliqué dans mon poste #104 est très bien pris en charge si je passe par exciftool, c'est à dire si j'enlève les .mov de la liste FVideo et que je les palce dans la liste FVideo_dv_avi
     
  7. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    Ok j'ai bien compris , donc pour vérifier si après le passage dans exiftool, il n'a pas réussi à extraire de durée, je veux savoir ce qu'il renvoi pour tester et l'envoyer vers l'autre méthode.
    Donc ce dont j'ai besoin c'est du résultat après avoir essayer dans exiftool pour savoir vers où continuer.
    Donc je veux bien un fichier qui ne passe pas dans exiftool.
    Ou si tu peux faire le test avec ce fichier dans le terminal je te passerais la commande.

    Edit: je viens de réencoder un fichier en .mov avec du h264 et du AAC et exiftool récupère bien la durée ! Donc j'ai besoin de ton fichier ou de ton essai.
     
    #107 zeltron54, 9 Octobre 2018
    Dernière édition: 9 Octobre 2018
  8. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Bah là à l'heure qu'il est je trouve pas de fichier qui pose problème...
    En fait on avait décidé de passer par autre chose que exiftool suite à mon poste 31, et j'avais sorti les infos sur le fichier. Tout simplement la durée ne s'affichait pas...

    Du coup qu'on se comprenne : pour l'instant je m'en sors très bien avec un script qui fait passer tous les encapsulages par la méthode exiftool, mais pour la beauté de l'art, j'aimerais pouvoir dire au programme : "si il y a une erreur avec la durée, essaye une autre solution".
    A un moment j'avais essayé l'inverse : faire passer toutes les extensions par la méthode sans exciftool . L'aventage c'est que dans ce cas là on connaît le message d'erreur qui est renvoyé quand ça ne marche pas :

    CAPTURE_ 2018-10-09 à 16.18.05.png

    du coup c'était ça mon idée :
    if errorMessage is "Il est impossible de rendre "null" en type number"
    then --> essayer la solution via exciftool.

    Le problème c'est que le message d'erreur contient des guillemets, et que donc pour le script ça revient à fermer les guillemets...
    Bref c'est probablement maladroit comme manière de faire, mais c'est là où je beugue !

    Voilà j'espère que c'est clair...
    Igor
     

    Pièces jointes:

  9. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    Au lieu d'analyser le message d'erreur, j'aurai analysé ce que contient la variable "duree" et au vue du résultat, j'aurai soit continué le script si valeur durée trouvé soit, repasser le fichier dans l'autre méthode pour obtenir la durée.
    Cela me semble plus facile et plus cohérent que d' analyser le message d'erreur.
    Donc si tu as un fichier qui passe pas dans exiftool on regarde.
     
  10. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Oui !
    Je viens d'essayer exiftool - g avec le fichier avi mentionné dans mon dernier post.
    Ca donne ça :

    Ce qui est super bizarre c'est que pour le coup la durée apparaît !
     
  11. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    Dans ton post #104 le message d'erreur semble être un problème d'accès au fichier..
    Et de plus le fichier est un .mov alors que là c'est un .avi

    Edit: il faut essayer avec un fichier qui pose problème dans exiftool
     
  12. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Pour ce qui est du fichier .mov en 104 ça semble en effet être ça... Mais le problème ne se pose pas quand je passe par exiftool. C'est bizare qu'il y a it un problème d'accès avec qu'une des deux méthodes non ?
    Pour ce qui est de fichier qui pose problème dans exiftool, je n'an ai plus sous la main !
    Mais on a les infos sur le fichier qui avait posé problème dans le post 31. On avait tout simplement pas de durée qui apparaissait.
     
  13. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    Oui , mais je n'ai pas ce qu'il retourne dans la variable lors d'essai d'extraction, est-ce vide ou Null ou 0 ou autre chose ? ? ?
    C' est cette valeur qu'il me faut tester !
     
  14. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    Pour le avi qui donne un message d'erreur "none", ce qui est bizarre c'est qu'il affiche une durée dans "duration" quand on fait exiftool -g.
    Pour ce qui est du Mp4 qui posait problème, quand on faisait exiftool -g il n'y avait tout simplement pas de duration qui apparaissait, rien du tout !
    C'est bien ça que tu me demandes ?

    A part ça il n'y aurait pas moyen de lui faire essayer la méthode sans exiftool même sans connaître le message d'erreur renvoyé par exiftool ? Je veux dire à partit du moment où exiftool ne trouve pas la durée et indique une erreur, on passerait à la deuxième méthode.
    Je me dis que c'est pas mal parce que comme ça des fichiers qui auraient des beugs différents ne me feraient pas revenir sur le code à chaque fois...
     
  15. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    Non ce n'est pas ce qu'il y a dans dans "exiftool -g" mais le retour lorsque dans le terminal on écrit : /usr/local/bin/exiftool -Duration suivi du chemin du fichier .
    Dans le script c'est la valeur retournée qui est mis dans la variable "duree" puis analysée, pour récupérer la durée de la vidéo.
    Je ne suis pas sur que s'il ne trouve pas de valeur il mette un message d'erreur et si oui lequel ?
     
  16. igorbatchev

    igorbatchev Membre confirmé

    Inscrit:
    22 Novembre 2009
    Messages:
    220
    J'aime reçus:
    1
    J'ai essayé avec le .avi déjà évoqué en #108 et ça done ça :
    Duration : 0:49:15

    Aucun problème pour lire la durée, visiblement !
     
  17. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    OK
    Donc pour le moment laisser uniquement la méthode par exiftool et dés que tu tombes sur un fichier récalcitrant, tu reviens sur ce fils et on analyse le fichier et on modifiera le script au vu du retour de la commande.
     
  18. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    @ igorbatchev

    Me revoilà, j'ai enfin réussi à trouver un fichier vidéo ou exiftool ne trouve pas de durée, ainsi qu'un fichier inférieur à 1 seconde qui posait également problème.
    J'ai donc adapter le script.
    Il traite lesMLV, puis essai de traiter tous les fichiers avec exiftool et s'il ne trouve pas de valeur alors il essai avec "mdls".


    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 {"dv", "avi", "mp4", "mov", "vob", "divx", "mkv"} -- 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
                        -- Traitement des fichier video sauf MLV
                        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 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
                         
                            -- traitement si valeur trouve avec exiftool
                            if duree is not "" then
                                set AppleScript's text item delimiters to {":"} --defini le séparateur
                             
                                -- Traitement de durée inférieur a 1 seconde ecris 0
                                if text item 2 of duree = " 0 s" then
                                    set duree to "duration : 0.0"
                                end if
     
     
  19. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    la Suite
    Code (Text):

                                -- Traitement des fichiers > 1 sec et <30 sec
                                set NB to count of text items of duree -- verifi sur duree est inférieur à 30 secondes (notation différente)
                                if NB = 2 then --recup 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
                            end if
                           
                            -- traitement des fichiers non lus par exiftool
                            if duree = "" then
                                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
                            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


     
     
  20. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 373
    J'aime reçus:
    201
    et suite et 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...

iOccasion - Achetez un produit Apple d'occasion

refurb Apple