Как я могу создать видео из каталога изображений на C #?
-
05-07-2019 - |
Вопрос
У меня есть каталог растровых изображений, которые все имеют одинаковый размер.Я хотел бы преобразовать эти растровые изображения в видеофайл.Мне все равно, является ли видеофайл (кодек) wmv или avi.Мое единственное требование заключается в том, что я указываю частоту кадров.Это не обязательно должно быть кроссплатформенным, только для Windows (Vista и XP).Я прочитал несколько вещей об использовании Windows Media SDK или DirectShow, но ни в одной из них так явно не говорится о предоставлении примеров кода.
Может ли кто-нибудь предоставить некоторую информацию или какие-нибудь ценные ресурсы, которые могли бы помочь мне сделать это на C #?
Решение
Риск быть отвергнутым, я предложу возможный альтернативный вариант - буферизованную растровую анимацию.
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++];
}
Такой подход работает хорошо, если пользователь, имеющий доступ к изображениям, имеет доступ к ним, имеет достаточно ресурсов для хранения изображений в памяти, не хочет ждать кодирования видео и может возникнуть необходимость в другом воспроизведении. скорости.
... просто выбрасываю его туда.
Другие советы
Вы можете использовать Сварочный аппарат чтобы сделать это.
Пожалуйста, смотрите пример 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();
}
}
Вы можете использовать AVI * из библиотеки avifil32, здесь есть пример (не пробовал):
http://www.adp-gmbh.ch/csharp/mandelbrot/index. HTML р>
Это может вас заинтересовать:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(сделать слайд-шоу из изображений JPG, используя C #)
Идеальной технологией для достижения ваших целей является DirectShow. Услуги редактирования . Однако, если это разовый проект, я бы не стал беспокоиться - кривая обучения может быть довольно крутой.
Образец кода DES не так много доступен, хотя есть много общих примеров DirectShow как внутри, так и за пределами MSDN. Для ваших целей я бы рекомендовал начать здесь . для основного объяснения использования неподвижных изображений в качестве источника видео.
Я не пробовал, но Windows Movie Maker имеет API и формат файла XML, который вы можете использовать.