我有400个序列图像.我想从他们创建视频文件(剪辑.. mpeg)
我下载'AForge.NET',我试着查看它是否可能 - 但我不知道如何做到这一点.
我该怎么做 ?
查找文档,找到VideoFileWriter类,查看它的成员,查看WriteVideoFrame方法,读取行:"将新视频帧写入当前打开的视频文件.".答对了.一半在那里.
如果在读取方法'signature(WriteVideoFrame(Bitmap))时无法连接点或者不了解如何使用Open()重载或Close()方法(为什么不能,最后两个对于文件I/O来说很常见)你可以随时谷歌"VideoFileWriter WriteVideoFrame示例",找到代码,从那里开始.功能的肉有:
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".)
如果仍然无效,请告诉我们发生了什么,确切的错误消息等.
| 归档时间: | 
 | 
| 查看次数: | 8019 次 | 
| 最近记录: |