从MP4流中提取位图的C#代码

6

最近,我在互联网上搜索了很多关于从MP4视频中提取位图的好的C#库,我发现有些东西与这段代码类似,但并不是针对MP4的:

        VideoStream stream = aviManager.GetVideoStream(@"C:\Users\User\Desktop\video.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:\Users\Nehoray\Desktop\Something.png");
            bmp.Dispose;
        }

有没有人能给我推荐一个跟这个代码一样简单的库,专门用于 MP4 格式的? :)

首先,将 mp4 转换为 avi 是可能的吗? - deadfish
@deadfish - 如果你只需要将mp4视频作为avi文件播放,而不需要实际转换容器格式,那么你应该可以直接重命名文件。 - StingyJack
3个回答

3

谢谢,我会尝试使用它 :) 你能否发布一些我可以使用的代码? - Omer litchy
他们的SDK包含一个名为“ThumbnailGenerator”的示例,我已经将其源代码复制到这里 - http://codepaste.net/6nzper - Sergey Rybalkin
我必须在我的电脑上安装QuickTime并将QTF.dll添加到我的bin文件夹中,以便处理MP4。 - bryanbcook

1

对于 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 Repo 只需下载 RAW 文件(在 C# 文件夹中)。


谢谢,它实际上帮了我在 AVI 文件上的问题(我在当前代码中遇到了问题)。我只有一个问题 - 我正在 MP4 上呈现,因为我要上传到 YouTube 的视频,而 AVI 太重了。如果你能分享一个链接,我会很高兴的 :) - Omer litchy

0

对于其他遇到这篇帖子的人,请查看此答案:C#中获取视频文件缩略图图像

其中一篇帖子提到了一个名为NReco.VideoConverter的NuGet包。这使您可以轻松地从MP4文件创建缩略图:

var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
ffMpeg.GetVideoThumbnail(pathToVideoFile, pathToNewThumbnail, locationInSeconds);

此功能不适用于 WP 8.1。 - Florian-Rh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接