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

发布于 2024-09-16 06:23:11 字数 99 浏览 6 评论 0原文

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

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

I want to extract first frame of uploaded video and save it as image file.
Possible video formats are mpeg, avi and wmv.

One more thing to consider is that we are creating an ASP.NET website.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

叫嚣ゝ 2024-09-23 06:23:11

您可以使用 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 包装器,您可以通过 google 搜索它们。他们在这里基本上做同样的事情,只是更好。因此,如果 FFMPEG 能完成您的工作,我建议使用 .NET 包装器。

You could use FFMPEG as a separate process (simplest way) and let it decode first IDR for you. Here you have a class FFMPEG that has GetThumbnail() method, to it you pass address of video file, address of the JPEG image to be made, and resolution that you want the image to be:

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);
    }
}

Use like this:

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

For this to work, you must have ffmpeg.exe in folder /utils, or change the code to locate ffmpeg.exe.

There are other ways to use FFMPEG in .NET, like .NET wrappers, you could google for them. They basically do the same thing here, only better. So if FFMPEG gets your job done, I'd recomend to use .NET wrapper.

晨曦慕雪 2024-09-23 06:23:11

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

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

而不是

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

上面提供的答案代码。

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

Try to make argument string format like:

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

Instead of

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

in the answer code provided above.

I don't know what was the reason, but second mentioned argument line is not working on my machine whereas when I changed argument like the first command it works fine.

人疚 2024-09-23 06:23:11

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

Probably the best tool for working with videos programatically is FFMpeg. It has support for many formats, even wmv. I suspect there's even a .net wrapper for it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文