Как я могу создать видео из каталога изображений в C #? - PullRequest
14 голосов
/ 30 октября 2008

У меня есть каталог растровых изображений одинакового размера. Я хотел бы преобразовать эти растровые изображения в видеофайл. Мне все равно, если видео файл (кодек) является WMV или AVI. Мое единственное требование - указать частоту кадров. Это не обязательно должно быть кроссплатформенным, только для Windows (Vista и XP). Я прочитал несколько вещей об использовании Windows Media SDK или DirectShow, но ни один из них не является настолько явным в отношении предоставления примеров кода.

Может ли кто-нибудь предоставить какое-то понимание или ценные ресурсы, которые могут помочь мне сделать это в C #?

Ответы [ 6 ]

11 голосов
/ 31 октября 2008

С риском быть отвергнутым, я предложу возможный альтернативный вариант - буферизованную растровую анимацию.

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

Такой подход работает хорошо, если пользователь, имеющий доступ к изображениям, имеет доступ к ним, имеет достаточно ресурсов для хранения изображений в памяти, не хочет ждать кодирования видео и может возникнуть необходимость в другом воспроизведении. скорости.

... просто выбросить его туда.

5 голосов
/ 14 ноября 2008

Вы можете использовать Splicer , чтобы сделать это.

См. Пример 3 по адресу http://www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home

Edit:

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();
    }
}
3 голосов
/ 30 октября 2008

Вы можете использовать AVI * из библиотеки avifil32, здесь есть пример (не пробовал):
http://www.adp -gmbh.ch / CSharp / Мандельброт / index.html

Это может вас заинтересовать:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(сделать Flash слайд-шоу из изображений JPG, используя C #)

2 голосов
/ 31 октября 2008

Идеальной технологией для достижения ваших целей является DirectShow Editing Services . Однако, если это разовый проект, я бы не стал беспокоиться - кривая обучения может быть довольно крутой.

Существует не так много примеров кода DES, хотя есть много общих примеров DirectShow как внутри, так и за пределами MSDN. Для ваших целей я бы рекомендовал начать с здесь для базового объяснения использования неподвижных изображений в качестве источника видео.

2 голосов
/ 31 октября 2008
1 голос
/ 31 октября 2008

Я не пробовал, но Windows Movie Maker имеет API и формат файла XML, который вы можете использовать.

...