如何从Images序列文件创建video文件?

我有400个序列图像。 我想从他们创建video文件(剪辑.. mpeg)

我下载’AForge.NET’,我试着查看它是否可能 – 但我不知道如何做到这一点。

我该怎么做 ?

查找文档 ,找到VideoFileWriter类 ,查看它的成员 ,查看WriteVideoFrame方法 ,读取行 :“将新video帧写入当前打开的video文件。”。 答对了。 一半在那里。

如果在读取方法的签名( WriteVideoFrame(Bitmap) )时无法连接点或者不了解如何使用Open()重载或Close()方法 (为什么不能,最后两个很漂亮)常见于File I / O)你可以随时使用Google“VideoFileWriter WriteVideoFrame示例” , 找到代码 ,从那里开始。 function的肉有:

 VideoFileWriter writer = new VideoFileWriter(); writer.Open("myfile.avi", width, height, 25, VideoCodec.MPEG4, 1000000); // ... here you'll need to load your bitmaps writer.WriteVideoFrame(image); } writer.Close(); 

所以这样的事情应该可行:

 using (VideoFileWriter writer = new VideoFileWriter()) { writer.Open(@"d:\myfile.avi", 640, 480, 25, VideoCodec.MPEG4); foreach (var file in Directory.GetFiles(@"d:\foo\bar", "*.jpg")) { writer.WriteVideoFrame(Bitmap.FromFile(file) as Bitmap); } writer.Close(); } 

在几分钟的摆弄中,给了我这样的东西:

 var size = new Size(1600, 1200); // The desired size of the video var fps = 25; // The desired frames-per-second var codec = VideoCodec.MPEG4; // Which codec to use var destinationfile = @"d:\myfile.avi"; // Output file var srcdirectory = @"d:\foo\bar"; // Directory to scan for images var pattern = "*.jpg"; // Files to look for in srcdirectory var searchoption = SearchOption.TopDirectoryOnly; // Search Top Directory Only or all subdirectories (recursively)? using (var writer = new VideoFileWriter()) // Initialize a VideoFileWriter { writer.Open(destinationfile, size.Width, size.Height, fps, codec); // Start output of video foreach (var file in Directory.GetFiles(srcdirectory, pattern, searchoption)) // Iterate files { using (var original = (Bitmap)Image.FromFile(file)) // Read bitmap using (var resized = new Bitmap(original, size)) // Resize if necessary writer.WriteVideoFrame(resized); // Write frame } writer.Close(); // Close VideoFileWriter } // Dispose VideoFileWriter 

这会调整图像大小; 不应该序列中的所有图像都相同。 如果是这样,您只需更改即可跳过该步骤

 using (var original = (Bitmap)Image.FromFile(file)) // Read bitmap using (var resized = new Bitmap(original, size)) // Resize if necessary writer.WriteVideoFrame(resized); // Write frame 

至:

 using (var mybitmap = (Bitmap)Image.FromFile(file)) // Read bitmap writer.WriteVideoFrame(mybitmap); // Write frame 

还要确保添加正确的using语句; 您将至少需要以下示例:

 using AForge.Video.FFMPEG; using System.Drawing; using System.IO; 

你还需要引用这里描述的DLL:

…你应该已经创建了一个项目,添加了对AForge.Video.FFMPEG库的引用,将目标平台设置为x86,目标框架版本现在设置为3.5或更低。 如果是这样,它可以继续下去。

……我们需要更多来自AForge档案馆的dll。 您可以在AForge存档中的“Externals \ ffmpeg”文件夹中找到它们。 必须将此文件夹中的所有文件复制到Visual Studio项目的输出文件夹中。 (在我们更改目标体系结构之后,现在应该是“YourProjectFolder \ bin \ x86 \ Debug”。)

如果它仍然无法工作,请告诉我们发生了什么, 确切的错误消息等。