Pregunta

Tengo un directorio de mapas de bits que son todos de la misma dimensión. Me gustaría convertir estos mapas de bits en un archivo de video. No me importa si el archivo de video (codec) es wmv o avi. Mi único requisito es que yo especifique la velocidad de fotogramas. Esto no necesita ser multiplataforma, solo Windows (Vista y XP). He leído algunas cosas sobre el uso del SDK de Windows Media o DirectShow, pero ninguna de ellas es tan explícita sobre cómo proporcionar ejemplos de código.

¿Alguien podría proporcionar alguna información o recursos valiosos que puedan ayudarme a hacer esto en C #?

¿Fue útil?

Solución

A riesgo de ser rechazado, ofreceré una posible opción alternativa: una animación de mapa de bits con búfer.

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++];
}

Un enfoque como este funciona bien si el usuario que está viendo tiene acceso a las imágenes, recursos suficientes para mantener las imágenes en la memoria, no quiere esperar a que se codifique un video, y puede existir la necesidad de una reproducción diferente velocidades.

... simplemente tirándolo por ahí.

Otros consejos

Puede usar Splicer para hacer esto.

Consulte el ejemplo 3 en http: // www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home

Editar:

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();
    }
}

Puede usar el AVI * de la biblioteca avifil32, aquí hay un ejemplo (no probado):
http://www.adp-gmbh.ch/csharp/mandelbrot/index. html

Esto podría interesarte:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(haga una presentación de diapositivas en flash a partir de imágenes JPG usando C #)

Una tecnología ideal para lograr lo que desea es DirectShow Servicios de edición . Sin embargo, si este es un proyecto único, no me molestaría, la curva de aprendizaje puede ser bastante pronunciada.

No hay mucho en el código de ejemplo de DES disponible, aunque hay muchos ejemplos generales de DirectShow dentro y fuera de MSDN. Para sus propósitos, recomiendo comenzar aquí para obtener una explicación básica sobre el uso de imágenes fijas como fuente de video.

No lo he probado, pero Windows Movie Maker tiene una API y un formato de archivo XML que puede usar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top