如何从C#中的图像目录创建视频?

如何从C#中的图像目录创建视频?,c#,directshow,media,multimedia,wmv,C#,Directshow,Media,Multimedia,Wmv,我有一个相同维度的位图目录。我想将这些位图转换为视频文件。我不在乎视频文件(编解码器)是wmv还是avi。我唯一的要求是指定帧速率。这不需要跨平台,仅限于Windows(Vista和XP)。我读过一些关于使用WindowsMediaSDK或DirectShow的文章,但没有一篇是关于提供代码示例的 有谁能提供一些见解或有价值的资源来帮助我在C#中做到这一点吗?您可以使用avifil32库中的AVI*,这里有一个示例(未尝试): 您可能对此感兴趣: (使用C#从JPG图像制作flash幻灯片)

我有一个相同维度的位图目录。我想将这些位图转换为视频文件。我不在乎视频文件(编解码器)是wmv还是avi。我唯一的要求是指定帧速率。这不需要跨平台,仅限于Windows(Vista和XP)。我读过一些关于使用WindowsMediaSDK或DirectShow的文章,但没有一篇是关于提供代码示例的


有谁能提供一些见解或有价值的资源来帮助我在C#中做到这一点吗?

您可以使用avifil32库中的AVI*,这里有一个示例(未尝试):

您可能对此感兴趣:


(使用C#从JPG图像制作flash幻灯片)

冒着被否决的风险,我将提供一个可能的替代选项——缓冲位图动画

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++];
}
如果观看用户能够访问图像,有足够的资源将图像保存在内存中,不想等待视频编码,并且可能需要不同的播放速度,那么这种方法就可以很好地工作


我没有试过,但有一个API和XML文件格式可以使用。

实现您想要的目标的理想技术是。然而,如果这是一个一次性的项目,那么我就不麻烦了——学习曲线可能相当陡峭

虽然MSDN内外都有大量通用的DirectShow示例,但DES示例代码的可用性并不多。出于您的目的,我建议您从使用静止图像作为视频源的基本说明开始。

您可以使用

请参见下面的示例3

编辑:


使用FFMPEG和.NET C#的任何完整源代码示例应用程序?
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();
    }
}