-1

我正在使用 NRECO 和 ffmpeg 对视频转换器进行编码,一切正常,但是在获得我尝试过的进度时间时

pgbConversion.Value = FFMpegConverter.ConvertProgress();

但这是不可能的所以我得到了!** **ConvertProgress 是偶数;请查看有关如何添加偶数处理程序的 C# 文档。****

来自 NReco 请我知道 ConvertProgrss 是一个事件,我怎样才能获得视频进度

4

2 回答 2

2

你这样写:

FFMpegConverter.ConvertProgress +=

您的Visual Studio 通过为您提供将事件处理程序代码附加到 ConvertProgress 事件来开始帮助您。它将向您显示一个弹出窗口,就像的视觉工作室在这里所做的那样,在我将事件处理程序附加到 Timer.Elapsed 事件的屏幕截图中,这是一个完全不同的事件,在不同的对象上,我正在使用一个示例来演示 Visual Studio 如何帮助您将事件附加到事物上:

在此处输入图像描述

然后您在的视觉工作室中按 TAB以接受弹出窗口中的建议

Visual Studio 将为您构建一个基本的事件处理程序,您可以将您希望在每次引发事件时运行的代码添加到其中。这是我的Visual Studio 在使用 Timer 将事件处理程序添加到我的示例期间按 Tab 时所做的:

在此处输入图像描述

(当然,我的图片显示 VS 为 Timer.Elapsed 制作处理程序,而不是 FFMpegConverter.ConvertProgress,因为我有 Timer,但我没有那个 FFMpegConverter 类。“图片仅用于说明目的- 你不应该输入你在我的图片中看到的代码")

于 2017-12-14T18:15:36.373 回答
1

您确定这不是拼写错误,它们的意思是“事件”吗?在这种情况下,我会将 lambda 表达式分配给事件,或者您可以只引用另一种方法,如下所示,因此文档将在此处:Lambda ExpressionsEvents

不带 Lambda 的示例:

static void Main(string[] args)
{
    var ffMpeg = new FFMpegConverter();
    ffMpeg.ConvertProgress += FfMpeg_ConvertProgress;
    ffMpeg.ConvertMedia("input.mov", "output.mp4", Format.mp4);
}

private static void FfMpeg_ConvertProgress(object sender, ConvertProgressEventArgs e)
{
    // Percent complete as a double
    pgbConversion.Value = e.Processed.TotalSeconds / e.TotalDuration.TotalSeconds;
}

带有 Lambda 表达式的示例:

static void Main(string[] args)
{
    var ffMpeg = new FFMpegConverter();
    ffMpeg.ConvertProgress += (s, e) => {
        pgbConversion.Value = e.Processed.TotalSeconds / e.TotalDuration.TotalSeconds;
    };
    ffMpeg.ConvertMedia("input.mov", "output.mp4", Format.mp4);
}

该事件只有视频中的总秒数和已处理的秒数。它们也表示为 TimeSpan 对象。我建议获取每一个的总秒数(返回双精度),然后除以完成百分比。当然,您可以将它们中的任何一个单独用作TimeSpan实例。

于 2017-12-14T18:19:51.853 回答