module inscription newsletter haut de page forum mobile

Rejeter la notice

Nouvelle Formation Prise de son : les inscriptions sont ouvertes !
Maîtrisez la qualité de vos prises de son avec notre formation théorique et pratique de 3 jours ! Du 14 au 16 mai 2024 à Paris.

'Premiere Pro Moulinette récupération prproj victime bug ''Time.cpp - 328'' ou ''Keyframe.h - 138'''

'Premiere Pro Moulinette récupération prproj victime bug ''Time.cpp - 328'' ou ''Keyframe.h - 138'''

Publié par gribouille le 26 Septembre 2007 dans Tutos
► Commentaires 0
    Recos : 0
    Vues : 16 991
  1. gribouille

    Contexte 

    Devant quelques demandes ces derniers temps... et des résultats probants... voici la moulinette de réparation des fichiers projets d'Adobe Première Pro victimes du bug "erreur Time.cpp - 328" ou "Keyframe.h - 138" publiée en première mondiale sur le repaire, sous licence LGPL (free software library).

    Post traitant de ce sujet sur le repaire, et permettant le téléchargement de la moulinette dans un .zip:

    http://www.repaire.net/forums/adobe-premiere-pro/101494-bug-premiere-besoin-dassistance-time.html

    Mise en oeuvre 

    C'est un shell unix contenant une unique commande awk. PPro tourant sous Windows, et peu de repairenautes disposant d'un dual boot Linux, le plus simple est d'utiliser cygwin:

    1. Récupérer et installer cygwin: http://www.cygwin.com lien "Install or update now!". Choisir lors de l'installation le monde de compatibilité MS-DOS/Windows et non Unix (sinon, il faut convertir au format unix le script proproj_virgule.sh avec dos2unix pour pouvoir l'utiliser).

    2. Choix 1: Copier le texte ci-après dans un fichier texte (Notepad) en l'enregistrer sous le nom "prproj_virgules.sh" dans un répertoire c:\temp par exemple, sans ligne vide au début (la première ligne doit impérativement être "#!/bin/sh")

    2bis. Choix 2: récupérer le fichier prproj_virgules_v1.1.zip sur le post indiqué ci-dessus, et décompresser le fichier: il contient le fichier prproj_virgules.sh

    3. Copier dans ce même répertoire votre fichier toto.proproj endommagé

    4. Lancer cygwin

    5. Aller dans le répertoire c:\temp avec la commande "cd /cygdrive/c/temp"

    6. Rendre executable la mounlinette avec la commande: "chmod a+x prproj_virgules.sh"

    7. Lancer la moulinette avec la commande "./proproj_virgule.sh <toto.prproj >toto_new.prproj"

    8. Rapatrier toto_new.prproj dans le répertoire d'origine et l'ouvrir avec PPro pour voir si ça marche...

    Fichier proproj_virgule.sh

    #!/bin/sh
    #======================
    # Syntaxe:
    #    ./prproj_virgules.sh <toto.prproj >toto_new.prproj
    #
    #======================
    # Historique des révisions:
    #
    # v1.1: ajout prise en compte tag CurrentValue par gribouille le 30.11.2007. Merci ogt pour la decouverte du bug !
    #
    # v1.0: développement initial, mise au point et documentation intégrée par gribouille du 13.09.2006 au 26.09.2007.
    #
    #======================
    # Objet:
    # Ce programme est destiné (sans aucune garantie) à récupérer des fichiers .prproj d'Adobe Premiere Pro 1.5 et 2.0
    # victimes du problème connu sous le nom de "erreur Time.cpp - 328" ou "Keyframe.h - 138"
    # se produisant parfois sous une version Française de Windows (séparateur , au lieu de . dans
    # les settings de Windows).
    # Lien utile: http://www.repaire.net/forums/adobe-premiere-pro/101494-bug-premiere-besoin-dassistance-time.html
    #
    #======================
    # Mini-HOWTO de mise en oeuvre sous Windows:
    #   1. Récupérer et installer cygwin: http://www.cygwin.com/ lien "Install or update now!"
    #   2. Placer le présent fichier "prproj_virgules.sh" dans un répertoire c:\temp par exemple.
    #   3. Copier dans ce même répertoire votre fichier toto.proproj endommagé
    #   4. Lancer cygwin
    #   5. Aller dans le répertoire c:\temp avec la commande "cd /cygdrive/c/temp"
    #   6. Rendre executable la présent fichier avec la commande: "chmod a+x prproj_virgules.sh"
    #   7. Lancer la moulinette avec la commande "./proproj_virgule.sh <toto.prproj >toto_new.prproj"
    #   8. Rapatrier toto_new.prproj dans le répertoire d'origine et l'ouvrir avec PPro pour voir si ça marche...
    #
    #======================
    # License:
    # Ce programme est un logiciel libre. Vous pouvez l'utiliser, le modifier, le redistribuer
    # dans les termes de la LGPL v3.0 ou ultérieure.
    # Détails: http://www.gnu.org/licenses/lgpl.html
    ##################################################################
    # prproj_virgules.sh
    # Copyright (c) 2007 gribouille
    # This library is free software; you can redistribute it and/or
    # modify it under the terms of the GNU Lesser General Public
    # License as published by the Free Software Foundation; either
    # version 3 of the License, or (at your option) any later version.
    # This library is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    # Lesser General Public License for more details.
    # http://www.gnu.org/licenses/lgpl.html
    #
    ##################################################################

    awk 'BEGIN{bDebug=0;
    }

    function AfficherErreur(szUnMess, szUneLgn)
    {
        print "WARNING <", szUnMess, "> ligne <", szUneLgn, ">." >"/dev/stderr"
        print szUneLgn;
        next;
    }

    function RemplacerVirgules(szUneLgn, nUnNbArguments)
    {
        szTmp=szUneLgn; nVirgules=gsub(",", "", szTmp);
        szTmp=szUneLgn; nPoints=gsub("\\.", "", szTmp);
        szTmp=szUneLgn; nDeuxPoints=gsub(":", "", szTmp);
        if(nVirgules <= nUnNbArguments-1) {
            # Pas de virgule en trop: tout va bien
            szLgn=szUneLgn;
        } else {
            # trop de virgules: on reconstitue les , et les .
            if(nUnNbArguments == 1) {
                # facile: tout en .
                szLgn=szUneLgn;
                gsub(",", ".", szLgn);
                if(bDebug) print "%%%1", szUneLgn, "-->", szLgn;
            } else if(nUnNbArguments == 2) {
                # cas du EndPosition
                # step 1: tout en ,
                if(nVirgules+nPoints != 3) AfficherErreur("bug +!=3", szUneLgn);
                szLgn=szUneLgn;
                gsub("\\.", ",", szLgn);
                # step 2: on passe la premiere , en .
                sub(",", "\\.", szLgn);
                # step 3: on passe la troisieme , en .
                sub(",", "£", szLgn);
                sub(",", ".", szLgn);
                sub("£", ",", szLgn);
                if(bDebug) print "%%%2", szUneLgn, "-->", szLgn;
            } else {
                AfficherErreur("Laborieux", szUneLgn);
                # laborieux
                szLgn=szUneLgn;
                szDeb=substr(szLgn, 1, index(szLgn, ">"));
                szArgs=substr(szLgn, index(szLgn, ">")+1, length(szLgn));
                szFin=substr(Args, index(szArgs, "<"), length(szArgs));
                szArgs=substr(szArgs, 1, index(szLgn, "<")-1);
                if(bDebug) print "%%%0", szUneLgn, "-->", szDeb, szArgs, szFin;
                # step 1: tout en ,
                gsub("\\.", ",", szLgn);
                # step 2: on passe la premiere , en .
                nArgs=split(szLgn, tszArgs, ",");
                ###for(nIter=1; nIter <= nArgs; nIter++) print ":::", tszArgs[nIter];


                if(bDebug) print "%%%3\n", szUneLgn, "\n-->\n", szLgn;
            }
        }
        print szLgn;

        szLgn=szUneLgn;
        #if(bDebug) print "===1", szLgn;
        szLgn=substr(szLgn, index(szLgn, ">")+1, length(szLgn));
        #if(bDebug) print "===2", szLgn;
        szLgn=substr(szLgn, 1, index(szLgn, "<")-1);
        #if(bDebug) print "===3", szLgn;
        nArgs=split(szLgn, tszArgs, ",");
        ###for(nIter=1; nIter <= nArgs; nIter++) print ":::", tszArgs[nIter];


        if(bDebug) printf("### nVirgules=%d, nPoints=%d, nArgs=%d, szLgn=%c%s%c.\n", nVirgules, nPoints, nUnNbArguments, 34, szUneLgn, 34);
        if(bDebug) printf("=== index>=%d\n", index(szUneLgn, ">"));
    }


    function RemplacerVirgulesPath(szUneLgn, szUnReplacePathInit, szUnReplacePath)
    {
        # szReplacePath = "0010...1001" pour lequel 0=on ne remplace pas; et 1=on remplace; cyclique

        # Tant qu"a faire, on se complique la vie meme si c"etait deja bon
        szLgn=szUneLgn; gsub("\\.", ",", szLgn);
        szReplacePath=szUnReplacePathInit;

        # Metriques
        szTmp=szLgn; nVirgules=gsub(",", "", szTmp);
        szTmp=szLgn; nPointVirgules=gsub(";", "", szTmp);

        if(bDebug) printf("kk1  nVirgules=%d, szRP=%c%s%c, szLgn=%c%s%c.\n", nVirgules, 34, szReplacePath, 34, 34, szLgn, 34);

        while(nVirgules >= 1) {
            if(szReplacePath == "") szReplacePath=szUnReplacePath;
            if(substr(szReplacePath, 1, 1) == "1") {
                # on remplace par un .
                sub(",", ".", szLgn);
            } else {
                # on remplace par une virgule (£ temporairement)
                sub(",", "£", szLgn);
                if(bDebug) printf("kk3 kjsdgfkjsdhf\n");
            }
            szReplacePath=substr(szReplacePath, 2, length(szReplacePath))
            nVirgules=nVirgules-1;
            if(bDebug) printf("kk2  nVirgules=%d, szRP=%c%s%c, szLgn=%c%s%c.\n", nVirgules, 34, szReplacePath, 34, 34, szLgn, 34);
        }
        gsub("£", ",", szLgn);
        printf("%s", szLgn);
    }


    function RemplacerVirgulesKeyframes(szUneLgn)
    {
        nArgs=split(szUneLgn, tszArgs, ";");
    ###    if(bDebug) print ":::", sztszArgs[nIter];


        # Pour chaque portion entre ;
        for(nIter=1; nIter <= nArgs; nIter++) {
            szLgn=tszArgs[nIter];

            szTmp=szLgn; nDeuxPoints=gsub(":", "", szTmp);
            szTmp=szLgn; gsub("\\.", ",", szTmp); nVirgules=gsub(",", "", szTmp);

            if(nDeuxPoints == 0) {
                if(nVirgules % 12 == 0)     RemplacerVirgulesPath(szLgn, "", "010001010101");
                else if(nVirgules % 11 == 0) RemplacerVirgulesPath(szLgn, "", "00001010101");
                else AfficherErreur("Nombre de virgules RemplacerVirgulesKeyframes inattendu.", szLgn);
            } else if(nDeuxPoints == 1) RemplacerVirgulesPath(szLgn, "011", "0001010101");
            else AfficherErreur("Nombre de deux points RemplacerVirgulesKeyframes inattendu.", szUneLgn);

            if(nIter < nArgs) printf(";");
        }
        printf("\n");
    }

    function RemplacerVirgulesStartKeyframe(szUneLgn)
    {
        szTmp=szUneLgn; nDeuxPoints=gsub(":", "", szTmp);
        szTmp=szUneLgn; gsub("\\.", ",", szTmp); nVirgules=gsub(",", "", szTmp);

        if(nDeuxPoints == 0) {
            if(nVirgules == 2) szInit="00";            # PPro 1.5
            else if(nVirgules == 3) szInit="010";      # PPro 1.5
            else if(nVirgules % 10 == 2) szInit="01";  # PPro 2.0
            else if(nVirgules % 10 == 1) szInit="0";   # PPro 2.0
            else AfficherErreur("Nombre de virgules RemplacerVirgulesKeyframes inattendu.", szUneLgn);
        } else if(nDeuxPoints == 1) szInit="011";
        else AfficherErreur("Nombre de deux points RemplacerVirgulesKeyframes inattendu.", szUneLgn);

        RemplacerVirgulesPath(szUneLgn, szInit, "0001010101");
        printf("\n");
    }

    function RemplacerVirgulesCurrentValue(szUneLgn)
    {
        # Exception du <CurrentValue>0,0<CurrentValue> à ne pas modifier
        szTmp=szUneLgn; nToto=gsub(">0,0<", "", szTmp);
        if(nToto > 0) print szUneLgn;
        else RemplacerVirgules(szUneLgn, 1);
    }


    /<CurrentValue>/    { RemplacerVirgulesCurrentValue($0); next; }
    /<PlaybackSpeed>/    { RemplacerVirgules($0, 1); next; }
    /<TL.SQTimePerPixel>/    { RemplacerVirgules($0, 1); next; }
    #/<DateShot>/        { RemplacerVirgules($0, 1); next; }
    /<StartKeyframe>/        { RemplacerVirgulesStartKeyframe($0); next; }
    /<Keyframes>/        { RemplacerVirgulesKeyframes($0); next; }
    /<LowerBound>/        { RemplacerVirgules($0, 1); next; }
    /<UpperBound>/        { RemplacerVirgules($0, 1); next; }
    /<Gain>/            { RemplacerVirgules($0, 1); next; }
    /<BorderWidth>/        { RemplacerVirgules($0, 1); next; }
    /<EndPosition>/        { RemplacerVirgules($0, 2); next; }
    /<StartPercent>/        { RemplacerVirgules($0, 1); next; }
    /<ActionSafeHeight>/    { RemplacerVirgules($0, 1); next; }
    /<TitleSafeHeight>/    { RemplacerVirgules($0, 1); next; }
    /<TitleSafeWidth>/    { RemplacerVirgules($0, 1); next; }
    /<ActionSafeWidth>/     { RemplacerVirgules($0, 1); next; }

    //
    '

Partager cette page

► Commentaires 0

Vous ne souhaitez rien louper du Repaire ?