una - ¿Cómo puedo crear un video desde un directorio de imágenes en C#?
importar imagenes a visual studio (6)
Tengo un directorio de mapas de bits que son todos de la misma dimensión. Me gustaría convertir estos mapas de bits en un archivo de video. No me importa si el archivo de video (códec) es wmv o avi. Mi único requisito es que especifique la velocidad de fotogramas. No es necesario que sea multiplataforma, solo para Windows (Vista y XP). He leído algunas cosas sobre el uso de Windows Media SDK o DirectShow, pero ninguno de ellos es tan explícito como proporcionar muestras de código.
¿Podría alguien proporcionar alguna información, o algunos recursos valiosos que podrían ayudarme a hacer esto en C #?
A riesgo de ser rechazado, ofreceré una opción alternativa posible: una animación de mapa de bits en búfer.
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++];
}
Un enfoque como este funciona bien si el usuario tiene acceso a las imágenes, recursos suficientes para mantener las imágenes en la memoria, no quiere esperar a que un video codifique, y puede que exista la necesidad de diferentes velocidades de reproducción.
... solo tirarlo allí.
Puede usar el AVI * de la biblioteca avifil32, aquí hay un ejemplo (no probado):
http://www.adp-gmbh.ch/csharp/mandelbrot/index.html
Esto podría ser de su interés:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(hacer presentación de diapositivas flash de imágenes JPG usando C #)
No lo he probado, pero Windows Movie Maker tiene una API y un formato de archivo XML que puede usar.
Una tecnología ideal para lograr lo que desea es DirectShow Editing Services . Sin embargo, si se trata de un proyecto único, no me molestaría, la curva de aprendizaje puede ser bastante empinada.
No hay mucho en el camino del código de muestra DES disponible, aunque hay muchas muestras generales de DirectShow tanto dentro como fuera de MSDN. Para sus propósitos, recomendaría comenzar aquí para una explicación básica del uso de imágenes fijas como fuente de video.
Puedes usar Splicer para hacer esto.
Consulte el ejemplo 3 en 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();
}
}