Question

J'ai un répertoire de bitmaps qui ont tous la même dimension. Je voudrais convertir ces bitmaps dans un fichier vidéo. Peu m'importe si le fichier vidéo (codec) est wmv ou avi. Ma seule exigence est que je spécifie la fréquence d'images. Cela ne doit pas nécessairement être multiplateforme, Windows (Vista et XP) uniquement. J'ai lu quelques informations sur l'utilisation du Kit de développement logiciel (SDK) Windows Media ou DirectShow, mais aucune d'entre elles n'est aussi explicite sur la fourniture d'échantillons de code.

Quelqu'un pourrait-il fournir des informations ou des ressources précieuses qui pourraient m'aider à le faire en C #?

Était-ce utile?

La solution

Au risque d'être rejeté, je proposerai une alternative possible: une animation bitmap en mémoire tampon.

double framesPerSecond;
Bitmap[] imagesToDisplay;     // add the desired bitmaps to this array
Timer playbackTimer;

int currentImageIndex;
PictureBox displayArea;

(...)

currentImageIndex = 0;
playbackTimer.Interval = 1000 / framesPerSecond;
playbackTimer.AutoReset = true;
playbackTimer.Elapsed += new ElapsedEventHandler(playbackNextFrame);
playbackTimer.Start();

(...)

void playbackNextFrame(object sender, ElapsedEventArgs e)
{
    if (currentImageIndex + 1 >= imagesToDisplay.Length)
    {
            playbackTimer.Stop();

            return;
    }

    displayArea.Image = imagesToDisplay[currentImageIndex++];
}

Une telle approche fonctionne bien si l'utilisateur qui visualise a accès aux images, dispose de suffisamment de ressources pour conserver les images en mémoire, ne veut pas attendre qu'une vidéo soit encodée et qu'il peut être nécessaire de procéder à une lecture différente. vitesses.

... jetez-le simplement là-bas.

Autres conseils

Vous pouvez utiliser Splicer pour le faire.

Veuillez vous reporter à l'exemple 3 sur http: // www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home

Modifier:

using (ITimeline timeline = new DefaultTimeline(25))
{
    IGroup group = timeline.AddVideoGroup(32, 160, 100);

    ITrack videoTrack = group.AddTrack();
    IClip clip1 = videoTrack.AddImage("image1.jpg", 0, 2);
    IClip clip2 = videoTrack.AddImage("image2.jpg", 0, 2);
    IClip clip3 = videoTrack.AddImage("image3.jpg", 0, 2);
    IClip clip4 = videoTrack.AddImage("image4.jpg", 0, 2);

    double halfDuration = 0.5;

    group.AddTransition(clip2.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
    group.AddTransition(clip2.Offset, halfDuration, StandardTransitions.CreateFade(), false);

    group.AddTransition(clip3.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
    group.AddTransition(clip3.Offset, halfDuration, StandardTransitions.CreateFade(), false);

    group.AddTransition(clip4.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
    group.AddTransition(clip4.Offset, halfDuration, StandardTransitions.CreateFade(), false);

    ITrack audioTrack = timeline.AddAudioGroup().AddTrack();

    IClip audio =
        audioTrack.AddAudio("soundtrack.wav", 0, videoTrack.Duration);

    audioTrack.AddEffect(0, audio.Duration,
                        StandardEffects.CreateAudioEnvelope(1.0, 1.0, 1.0, audio.Duration));

    using (
        WindowsMediaRenderer renderer =
            new WindowsMediaRenderer(timeline, "output.wmv", WindowsMediaProfiles.HighQualityVideo))
    {
        renderer.Render();
    }
}

Vous pouvez utiliser le fichier AVI * de la bibliothèque avifil32. Voici un exemple (non essayé):
http://www.adp-gmbh.ch/csharp/mandelbrot/index. html

Cela pourrait vous intéresser:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(créer un diaporama flash à partir d’images JPG avec C #)

Une DirectShow est une technologie idéale pour réaliser vos objectifs. Modification des services . Cependant, s’il s’agit d’un projet ponctuel, cela ne me dérangerait pas - la courbe d’apprentissage peut être assez raide.

Il n’existe pas beaucoup de code exemple DES disponible, bien qu’il existe de nombreux exemples généraux de DirectShow à l’intérieur et à l’extérieur de MSDN. Pour vos besoins, nous vous recommandons de commencer ici . pour une explication de base de l’utilisation d’images fixes en tant que source vidéo.

Je ne l'ai pas essayé, mais Windows Movie Maker possède une API et un format de fichier XML que vous pouvez utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top