10

我想提取上传视频的第一帧并将其保存为图像文件。
可能的视频格式是 mpeg、avi 和 wmv。

要考虑的另一件事是我们正在创建一个 ASP.NET 网站。

4

3 回答 3

8

您可以将 FFMPEG 用作一个单独的进程(最简单的方式)并让它为您解码第一个 IDR。在这里,您有一个具有 GetThumbnail() 方法的 FFMPEG 类,向它传递视频文件的地址、要制作的 JPEG 图像的地址以及您希望图像的分辨率:

using System.Diagnostics;
using System.Threading; 

public class FFMPEG
{
    Process ffmpeg;

    public void exec(string input, string output, string parametri)
    {
        ffmpeg = new Process();

        ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output; 
        ffmpeg.StartInfo.FileName = "utils/ffmpeg.exe";
        ffmpeg.StartInfo.UseShellExecute = false;
        ffmpeg.StartInfo.RedirectStandardOutput = true;
        ffmpeg.StartInfo.RedirectStandardError = true;
        ffmpeg.StartInfo.CreateNoWindow = true;

        ffmpeg.Start();
        ffmpeg.WaitForExit();
        ffmpeg.Close();     
    }


    public void GetThumbnail(string video, string jpg, string velicina)
    {
        if (velicina == null) velicina = "640x480";
        exec(video, jpg, "-s "+velicina);
    }
}

像这样使用:

FFMPEG f = new FFMPEG();
f.GetThumbnail("videos/myvid.wmv", "images/thumb.jpg", "1200x223");

为此,您必须在文件夹 /utils 中有 ffmpeg.exe,或者更改代码以找到 ffmpeg.exe。

还有其他在 .NET 中使用 FFMPEG 的方法,例如 .NET 包装器,您可以搜索它们。他们在这里基本上做同样的事情,只是更好。因此,如果 FFMPEG 完成您的工作,我建议使用 .NET 包装器。

于 2010-08-26T13:17:37.000 回答
3

尝试使参数字符串格式如下:

ffmpeg.StartInfo.Arguments =" -i c:\MyPath\MyVideo -vframes 1 c:\MyOutputPath\MyImage%d.jpg"

代替

ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output;

在上面提供的答案代码中。

我不知道是什么原因,但是第二个提到的参数行在我的机器上不起作用,而当我像第一个命令一样更改参数时它工作正常。

于 2012-02-22T10:36:51.940 回答
0

以编程方式处理视频的最佳工具可能是 FFMpeg。它支持多种格式,甚至是 wmv。我怀疑它甚至还有一个.net 包装器

于 2010-08-26T13:14:21.933 回答