Domanda

Ho una directory di bitmap che hanno tutte la stessa dimensione. Vorrei convertire queste bitmap in un file video. Non mi interessa se il file video (codec) è wmv o avi. Il mio unico requisito è che specifichi il frame rate. Non è necessario che sia multipiattaforma, solo Windows (Vista e XP). Ho letto alcune cose sull'uso di Windows Media SDK o DirectShow, ma nessuno di questi è esplicito nel fornire esempi di codice.

Qualcuno potrebbe fornire alcune informazioni o alcune risorse preziose che potrebbero aiutarmi a farlo in C #?

È stato utile?

Soluzione

A rischio di essere votato verso il basso, offrirò una possibile opzione alternativa: un'animazione Bitmap bufferizzata.

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 approccio come questo funziona bene se l'utente di visualizzazione ha accesso alle immagini, risorse sufficienti per mantenere le immagini in memoria, non vuole attendere la codifica di un video e potrebbe esserci la necessità di una riproduzione diversa velocità.

... lo sto solo lanciando.

Altri suggerimenti

Puoi usare Splicer per farlo.

Vedi l'esempio 3 su http: // www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home

Modifica:

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

Puoi usare l'AVI * dalla libreria avifil32, qui c'è un esempio (non provato):
http://www.adp-gmbh.ch/csharp/mandelbrot/index. html

Questo potrebbe essere di tuo interesse:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(crea una presentazione flash da immagini JPG usando C #)

Una tecnologia ideale per ottenere ciò che desideri è DirectShow Servizi di modifica . Tuttavia, se si tratta di un progetto unico, non mi preoccuperei: la curva di apprendimento può essere piuttosto ripida.

Non c'è molto in termini di codice di esempio DES disponibile, sebbene ci siano molti esempi di DirectShow generali sia all'interno che all'esterno di MSDN. Per i tuoi scopi, ti consiglio di iniziare qui per una spiegazione di base sull'utilizzo di immagini fisse come sorgente video.

Non l'ho provato, ma Windows Movie Maker ha un'API e un formato di file XML che puoi usare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top