Pytanie Jak mogę utworzyć wideo z katalogu obrazów w języku C #?


Mam katalog bitmap, które mają ten sam wymiar. Chciałbym przekształcić te bitmapy w plik wideo. Nie obchodzi mnie, czy plik wideo (kodek) jest wmv lub avi. Moim jedynym wymaganiem jest to, że określam liczbę klatek na sekundę. Nie musi to być platforma wieloplatformowa, tylko Windows (Vista i XP). Przeczytałem kilka rzeczy na temat używania Windows Media SDK lub DirectShow, ale żadne z nich nie mówi wprost o dostarczaniu próbek kodu.

Czy ktoś może zapewnić pewien wgląd, lub niektóre cenne zasoby, które mogą mi pomóc to zrobić w języku C #?


14
2017-10-30 19:38


pochodzenie




Odpowiedzi:


Ryzykując przegłosowanie, zaproponuję możliwą alternatywną opcję - buforowaną animację bitmapową.

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

Takie podejście działa dobrze, jeśli użytkownik oglądający ma dostęp do obrazów, wystarczające zasoby, aby zachować obrazy w pamięci, nie chce czekać na kodowanie wideo i może istnieć potrzeba różnych prędkości odtwarzania.

... po prostu go tam wyrzucasz.


11
2017-10-30 21:31





Możesz użyć Splicer aby to zrobić.

Zobacz przykład 3 na stronie http://www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home

Edytować:

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

5
2017-11-14 12:17





Możesz użyć AVI * z biblioteki avifil32, jest tu przykład (nie wypróbowany):
http://www.adp-gmbh.ch/csharp/mandelbrot/index.html

To może Cię zainteresować:
http://bytescout.com/swfslideshows_outample_c_sharp.html
(zrobić flashowy pokaz slajdów z obrazów JPG przy użyciu C #)


3
2017-10-30 20:39





FFMPEG może to łatwo zrobić.


2
2017-10-31 09:24



Jakakolwiek pełna przykładowa aplikacja kodu źródłowego przy użyciu FFMPEG i .NET C #? - Kiquenet


Idealna technologia do osiągnięcia tego, co chcesz Usługi edycji DirectShow. Jeśli jednak jest to projekt jednorazowy, nie zawracałbym sobie głowy - krzywa uczenia się może być dość stroma.

Nie ma zbyt wiele przykładów kodu DES, ale istnieje wiele ogólnych próbek DirectShow zarówno w MSDN jak i poza nim. Dla twoich potrzeb polecam zacząć tutaj podstawowe wyjaśnienie wykorzystania nieruchomych obrazów jako źródła wideo.


2
2017-10-31 12:18





Nie próbowałem tego, ale Windows Movie Maker ma API i format pliku XML, którego możesz użyć.


1
2017-10-31 09:01