0

I have been through multiple libraries and have been browsing and researching for the whole day and every single time the library isn't finished, there is no documentation or it doesn't work. How can I open a video file within a C# app and dump a random screenshot?

4

1 回答 1

7

我不确定如何使用 VLC Player 执行此操作,但您可以使用 ffmpeg:

从这里下载 ffpmeg:http ://www.ffmpeg.org/download.html

如果您使用的是 windows,请static从 windows 构建下载版本:http: //ffmpeg.zeranoe.com/builds/

这为您提供了一个独立的 .exe 文件,而不是一整堆文件。


手动运行ffmpeg

在没有 C# 的情况下使用它,您可以打开一个控制台窗口并像这样运行命令:

ffmpeg -i "AngularJS - Part 1 - Hello Angular.mp4" -ss 00:02:25.435 -f image2 -vframes 1 screenshot.jpg

00:02:25.435部分实际上是长时间代码,格式如下:

时:分:秒。帧百分比

如果你想要 5 秒的帧,你会传入:00:00:05.000

而如果你想要 2 分 38 秒,第 12 帧。你会做00:02:38.480

要计算帧百分比,只需执行frame / frame rate12 / 250.48

生成屏幕抓取。


在 C-Sharp 中运行 ffmpeg

现在,如果您想在应用程序中执行此操作,您可以执行以下操作:

static void Main(string[] args)
{
    var process = new System.Diagnostics.Process();
    var startInfo = new System.Diagnostics.ProcessStartInfo
    {
        WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
        WorkingDirectory = "C:/Users/Phillip/Desktop/ffpmeg sample/",
        FileName = "cmd.exe",
        Arguments = "/C ffmpeg -i \"AngularJS - Part 1 - Hello Angular.mp4\" -ss " +
                    "00:02:25.435 -f image2 -vframes 1 \"screenshot-from-app.jpg\""
    };
    process.StartInfo = startInfo;
    process.Start();

    Console.ReadKey();
}

因此,我们创建了一个新进程来运行一个命令,该命令恰好与我们手动运行的命令相同,只是我们使用前缀/C使其运行命令,然后终止控制台窗口。

您可以从 ffmpeg 网站获取有关获取屏幕抓取的更多信息:

http://ffmpeg.org/trac/ffmpeg/wiki/Create%20a%20thumbnail%20image%20every%20X%20seconds%20of%20the%20video

http://ffmpeg.org/trac/ffmpeg/wiki

于 2013-07-20T01:00:45.907 回答