我想从图像制作视频,每张图片应保留一秒钟。 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();
}
答案 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帧?