IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

sequence d'images vegas pro [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 8
    Par défaut sequence d'images vegas pro
    Bonjour,
    j'aurai besoin d'une petite aide pour unscript que j'aimerai utiliser dans le logiciel de montage vegas pro (10 ++).
    J'aimerai qu'en lui indiquant le chemin d'acces d'un dossier en local, il parcours de manière récurente tous les sous dossiers pour y trouver les suites d'images qui s'y trouvent pour les importer comme "media" dans le "chutier" de mon projet vegas ouvert.

    J'ai trouver comment faire la récurence et récupérer les informations dont j'ai besoin pour importer la suite d'image (le chemin d'acces de la première image, le nombre d'image de la suite et le frame rate une fois la séquence devenue média).

    La où je bloque c'est dans l'utilisation de la class permettant d'importer dans le logiciel.

    Mon script cs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Net.Mail;
    using System.IO;
    using System.Diagnostics;
    using System.Drawing;
    using System.Text;
    using Sony.Vegas;
     
    public class EntryPoint
    {
        Vegas myVegas;
    	String dirToScan = "E:\\Script_ImageSequence"; 
    	static System.Collections.Specialized.StringCollection log = new System.Collections.Specialized.StringCollection();
    	public void FromVegas(Vegas vegas)
        {
     
    	System.IO.DirectoryInfo rootDir = new System.IO.DirectoryInfo(dirToScan);
        WalkDirectoryTree(rootDir);
    	}
     
    	static void WalkDirectoryTree(System.IO.DirectoryInfo root)
        {
            System.IO.FileInfo[] files = null;
            System.IO.DirectoryInfo[] subDirs = null;
     
     
            try
            {
                files = root.GetFiles("*.*");
            }
     
            catch (UnauthorizedAccessException e)
            {
                log.Add(e.Message);
            }
     
            catch (System.IO.DirectoryNotFoundException e)
            {
                Console.WriteLine(e.Message);
            }
     
            if (files != null)
            {
    		 int num = 1;
    		 String fileName = "";
                foreach (System.IO.FileInfo fi in files)
                {
    				if(num == 1)
    					{fileName = fi.FullName;}
    				num++;
                }
    			num--;
     
    			if(num > 1 && !String.IsNullOrEmpty(fileName))
    				{
    				double fps = 25;
    				MessageBox.Show("le premier fichier s\'appelle : "+fileName+" et il y a "+num+" fichiers dans le dossier "+root);
    				Sony.Vegas.MediaPool.AddImageSequence(fileName,num,fps);
    				}
     
                subDirs = root.GetDirectories();
     
                foreach (System.IO.DirectoryInfo dirInfo in subDirs)
                {
                    WalkDirectoryTree(dirInfo);
                }
     
    		}
    			}
    }
    le logiciel me retourne l'erreur :
    \import_image_sequence.cs(61) : Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'Sony.Vegas.MediaPool.AddImageSequence(string, int, double)'
    je ne comprends pas bien ce que signifie l'erreur et encore moins ce que je dois modifier.

    dans les API de vegas, voici la définition de la classe AddImageSequence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Media AddImageSequence
    (
    String path, 
    Int32 imageCount, 
    Double fps
     
    Media
    (
    String path
    )
    )
    Creates and adds an image sequence to the project media pool.
    Parameters:
    path: full path of the fisrt image in the sequence
    imageCount: number of image files in the sequence
    fps: frame rate of the image sequence

    Une idée ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Salut,

    L'erreur signifie que ta méthode est "static" et que du coup tu ne peux pas l'appeler en passant par la classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaClasse.MaMethodePasStatic(); // NON
    MaClasse.MaMethodeStatic(); // OUI
    MaClasse monObjet = new MaClasse();
    monObjet.MaMethodePasStatic(); // OUI
    monObjet.MaMethodeStatic(); // OUI
    bref tout ça pour dire qu'il ne faut pas que tu fasses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sony.Vegas.MediaPool.AddImageSequence(fileName,num,fps);
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myVegas.AddImageSequence(fileName,num,fps);
    (à condition que ta variable soit bien initialisée quelque part).

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 8
    Par défaut
    du coup j'ai utilisé ma classe avec myVegas que j'ai définit plus haut comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Vegas myVegas = new Vegas();
    [...]
    myVegas.AddImageSequence(fileName,num,fps);
    au lieu de
    j'ai maintenant ceci comme erreur :
    import_image_sequence.cs(63) : Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'EntryPoint.myVegas'
    import_image_sequence.cs(63) : 'Sony.Vegas.Vegas' ne contient pas de définition pour 'AddImageSequence'
    import_image_sequence.cs(14) : Aucun constructeur n'est défini pour le type 'Sony.Vegas.Vegas'
    Je commence à me rendre compte que je n'ai pas beaucoup de notion de c# ><

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    C'est normal car ta méthode WalkDirectoryTree est static. Il faut donc que tu mettes le membre myVegas en static également :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    static Vegas myVegas;
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 8
    Par défaut
    C'est ce que j'avais fini par faire avant de voir ta réponse ^^

    je reposte le code modifié car il se compile mais plante lors de l'execution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Net.Mail;
    using System.IO;
    using System.Diagnostics;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Sony.Vegas;
     
    public class EntryPoint
    {
        static Vegas myVegas ;
    	String dirToScan = "E:\\Script_ImageSequence"; 
    	static System.Collections.Specialized.StringCollection log = new System.Collections.Specialized.StringCollection();
     
    	public void FromVegas(Vegas vegas)
        {
    	System.IO.DirectoryInfo rootDir = new System.IO.DirectoryInfo(dirToScan);
    	try{
        WalkDirectoryTree(rootDir);
    	}
    	catch (System.IO.DirectoryNotFoundException e)
    		{
    		MessageBox.Show(e.Message);
    		}
    	}
     
    static void WalkDirectoryTree(System.IO.DirectoryInfo root)
        {
            System.IO.FileInfo[] files = null;
            System.IO.DirectoryInfo[] subDirs = null;
     
            try
            {
                files = root.GetFiles("*.*");
            }
            catch (UnauthorizedAccessException e)
            {
                log.Add(e.Message);
            }
            catch (System.IO.DirectoryNotFoundException e)
            {
                Console.WriteLine(e.Message);
            }
     
            if (files != null)
            {
    		 int num = 1;
    		 String fileName = "";
                foreach (System.IO.FileInfo fi in files)
                {
    				if(num == 1)
    					{fileName = fi.FullName;}
    				num++;
                }
    			num--;
     
    			if(num > 1 && !String.IsNullOrEmpty(fileName))
    				{
    				double fps = 25;
    				MessageBox.Show("le premier fichier s\'appelle : "+fileName+" et il y a "+num+" fichiers dans le dossier "+root);
    				myVegas.Project.MediaPool.AddImageSequence(fileName,num,fps);
    				}
     
                subDirs = root.GetDirectories();
     
                foreach (System.IO.DirectoryInfo dirInfo in subDirs)
                {
                    WalkDirectoryTree(dirInfo);
                }
    		}
    	}
    }
    avec le message d'erreur suivant :
    System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
    à EntryPoint.WalkDirectoryTree(DirectoryInfo root)
    à EntryPoint.WalkDirectoryTree(DirectoryInfo root)
    à EntryPoint.FromVegas(Vegas vegas)
    --- Fin de la trace de la pile d'exception interne ---
    à System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
    à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
    à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
    à Sony.Vegas.ScriptHost.ScriptManager.Run(Assembly asm, String className, String methodName)
    à Sony.Vegas.ScriptHost.RunScript(Boolean fCompileOnly)
    ca affiche les bonnes infos une première fois puis ca plante.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 8
    Par défaut
    J'ai finalement résolu le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    public void FromVegas(Vegas vegas)
        {
    	myVegas=vegas;
    ...
    Ma variable myVegas était bien initialisée mais ne contenait absolument rien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problem avec sony vegas pro 8
    Par ikichie dans le forum Vidéo
    Réponses: 0
    Dernier message: 27/09/2008, 01h17
  2. Enregistrement de sequences d'images
    Par Kro86 dans le forum Images
    Réponses: 20
    Dernier message: 13/06/2008, 15h11
  3. sequences d'images avec flash
    Par irnatene dans le forum Flash
    Réponses: 2
    Dernier message: 23/04/2008, 11h59
  4. Détection de mouvement dans une sequence d'image
    Par soforan dans le forum Images
    Réponses: 3
    Dernier message: 25/01/2008, 17h58
  5. sequences d'image en C
    Par milad dans le forum C
    Réponses: 3
    Dernier message: 22/03/2007, 12h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo