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

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

14
задан Kiquenet 28 November 2013 в 20:44
поделиться

6 ответов

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

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

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

... просто бросок его там.

11
ответ дан 1 December 2019 в 12:14
поделиться

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

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

Редактирование:

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
ответ дан 1 December 2019 в 12:14
поделиться

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

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

3
ответ дан 1 December 2019 в 12:14
поделиться

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

1
ответ дан 1 December 2019 в 12:14
поделиться

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

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

2
ответ дан 1 December 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: