AForge.NET - > AVIWriter将图像添加为帧

时间:2011-10-03 05:08:26

标签: c# image video photo video-encoding

我想从图像制作视频,每张图片应保留一秒钟。 AVIWriter的帧速率为25帧,因此我需要添加一次图像25次以使其保持一秒钟。

我尝试更改帧速率,但它无效。

有人可以建议解决方法吗?

以下是将帧写入视频的代码:

    private void writeVideo()
    {
        // instantiate AVI writer, use WMV3 codec
        AVIWriter writer = new AVIWriter("wmv3");
        // create new AVI file and open it
        writer.Open(fileName, 320, 240);
        // create frame image
        Bitmap image = new Bitmap(320, 240);
        var cubit = new AForge.Imaging.Filters.ResizeBilinear(320, 240);
        string[] files = Directory.GetFiles(imagesFolder);
        writer.FrameRate = 25;
        int index = 0;
        int failed = 0;
        foreach (var item in files)
        {
            index++;
            try
            {
                image = Image.FromFile(item) as Bitmap;
                //image = cubit.Apply(image);

                for (int i = 0; i < 25; i++)
                {
                    writer.AddFrame(image); 
                }   
            }
            catch
            {
                failed++;
            }
            this.Text = index + " of " + files.Length + ". Failed: " + failed;
        }
        writer.Close();
    }

3 个答案:

答案 0 :(得分:2)

你好我遇到了同样的问题,看到这个主题全部读了,没有评论 http://www.aforgenet.com/framework/docs/html/bc8345f8-8e09-c1a4-4834-8330e5e85605.htm 有一个注释,“应该设置属性,以便打开新文件才能生效。”

答案 1 :(得分:1)

如果您使用此代码,Hakan的解决方案正在运行:

AVIWriter videoWriter;
videoWriter = new AVIWriter("wmv3");
videoWriter.FrameRate = 1;
videoWriter.Open("test.avi", 320, 240);
videoWriter.AddFrame(bitmap1);
videoWriter.AddFrame(bitmap2);
videoWriter.AddFrame(bitmap3);
videoWriter.Close();

每秒显示一个位图。 (仅用于提供直接工作的代码)。

答案 2 :(得分:0)

AVIWriter的默认帧速率为25.由于您没有选择指定丢弃或以其他方式跳过的帧,为什么在开始使用编写器填充之前不将AVIWriter::FrameRate属性设置为1帧?