Pergunta

Eu tenho um diretório de bitmaps que são todos da mesma dimensão. Gostaria de converter esses bitmaps em um arquivo de vídeo. Eu não me importo se o arquivo de vídeo (codec) é wmv ou avi. Minha única exigência é que eu especificar a taxa de quadros. Isso não precisa ser multi-plataforma, o Windows (Vista e XP). Eu li algumas coisas sobre como usar o Windows Media SDK ou DirectShow, mas nenhum deles é que explícita sobre o fornecimento de amostras de código.

Alguém poderia fornecer algum insight, ou alguns recursos valiosos que pode me ajudar a fazer isso em C #?

Foi útil?

Solução

Com o risco de ser rejeitada, eu vou oferecer uma alternativa possível option-- uma animação Bitmap tamponada.

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

Uma abordagem como esta funciona bem se o usuário visualiza tem acesso às imagens, recursos suficientes para manter as imagens na memória, não quer esperar por um vídeo para codificar, e pode existir uma necessidade de reprodução diferente velocidades.

... simplesmente jogá-la lá fora.

Outras dicas

Você pode usar Splicer para fazer isso.

Por favor, veja o exemplo 3 em 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();
    }
}

Você pode usar o AVI * da biblioteca avifil32, há um exemplo aqui (não tentou):
http://www.adp-gmbh.ch/csharp/mandelbrot/index. html

Esta pode ser interessante para você:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(Make de flash slideshow de imagens JPG usando C #)

Uma tecnologia ideal para conseguir o que você quer é DirectShow Editing Services . No entanto, se este é um one-off projeto, então eu não me incomodaria -. A curva de aprendizagem pode ser bastante íngreme

Não há muito na forma de código de exemplo DES disponíveis, embora há uma abundância de amostras gerais DirectShow tanto dentro como fora MSDN. Para seus propósitos Eu recomendo começar aqui para uma explicação básica de usar imagens estáticas como uma fonte de vídeo.

Eu não tentei, mas Windows Movie Maker tem uma API, e formato de arquivo XML que você pode usar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top