最近,我在互联网上搜索了很多好的C#库来从MP4视频中提取位图,我发现了一些类似于这段代码的东西,但不是MP4:
VideoStream stream = aviManager.GetVideoStream(@"C:UsersUserDesktopvideo.mp4");
//the video.mp4 is usually .avi or .mpeg
for (int n = 0; n < stream.CountFrames; n++)
{
Bitmap bmp = new Bitmap(stream.GetBitmap(Position));
bmp.Save(@"C:UsersNehorayDesktopSomething.png");
bmp.Dispose;
}
谁能给我一个带有这样简单代码的库,仅用于 MP4?:)
我使用表达式编码器 SDK 执行过类似的任务。他们声明支持 MP4。看看 AudioVideoFile.GetThumbnail 方法。
对于 avi,我曾经写过这样的东西:
string filename = "file.avi";
string storagepath = @"temp";
static int counter = 0;
MediaDetClass memde;
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// Create the subfolder
System.IO.Directory.CreateDirectory("temp");
// Some properities
counter = 0;
memde = new MediaDetClass();
Image img;
memde.Filename = openFileDialog1.FileName;
memde.CurrentStream = 0;
int len = (int)memde.StreamLength;
float percent = 0.002f;//how far do u want for a single step
for (float i = 0.0f; i < len; i = i + (float)(percent * len))
{
counter++;
string fbitname = storagepath + counter.ToString();
memde.WriteBitmapBits(i, 850, 480, fbitname + ".bmp");
//img = Image.FromFile(fbitname + ".bmp");
//img.Save(fbitname + ".bmp", ImageFormat.Bmp);
//img.Dispose();
//System.IO.File.Delete(i + fbitname + ".bmp");
}
}
使用的库是:Interop.DexterLib.dll
,我现在不确定您是否可以在 C# 资源中找到它。如果你愿意,我可以分享链接。
GitHub 存储库只需下载 RAW 文件(在 C# 文件夹中有)。
对于遇到这篇文章的其他人,请查看此答案: 在 C# 中获取视频文件的缩略图
其中一篇文章提到了一个名为NReco.VideoConverter的NuGet包。这使您可以非常轻松地从MP4文件创建缩略图:
var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
ffMpeg.GetVideoThumbnail(pathToVideoFile, pathToNewThumbnail, locationInSeconds);