Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将视频的第一帧保存为图像?_C#_Asp.net_Video_Image Extraction - Fatal编程技术网

C# 如何将视频的第一帧保存为图像?

C# 如何将视频的第一帧保存为图像?,c#,asp.net,video,image-extraction,C#,Asp.net,Video,Image Extraction,我想提取上传视频的第一帧并将其保存为图像文件。 可能的视频格式有mpeg、avi和wmv 还有一件事要考虑的是,我们正在创建一个ASP.NET网站。 以编程方式处理视频的最佳工具可能是FFMpeg。它支持多种格式,甚至支持wmv。我怀疑它甚至有一个简单的解决方案。您可以使用FFMPEG作为一个单独的过程(最简单的方法),让它为您解码第一个IDR。这里有一个具有GetThumbnail()方法的FFMPEG类,您可以将视频文件的地址、要制作的JPEG图像的地址以及希望图像的分辨率传递给它: usi

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


还有一件事要考虑的是,我们正在创建一个ASP.NET网站。 以编程方式处理视频的最佳工具可能是FFMpeg。它支持多种格式,甚至支持wmv。我怀疑它甚至有一个简单的解决方案。

您可以使用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包装器。

尝试将参数字符串格式设置为:

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

ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output;
在上面提供的答案代码中


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

任何视频的第一帧通常是黑色的。您最好检查几个帧并选择最大的一个(字节大小)。不管你信不信,这是一个很好的近似,“最有趣的一个”,尤其是在任何从黑色的情况下褪色。人们如何从文件中间的某处得到一个帧?参数-SS 900:0:01.00 i已经创建了缩略图,但是我如何保存在我的文件夹中呢?