我正在使用 NRECO 和 ffmpeg 对视频转换器进行编码,一切正常,但是在获得我尝试过的进度时间时
pgbConversion.Value = FFMpegConverter.ConvertProgress();
但这是不可能的所以我得到了!** **ConvertProgress 是偶数;请查看有关如何添加偶数处理程序的 C# 文档。****
来自 NReco 请我知道 ConvertProgrss 是一个事件,我怎样才能获得视频进度
我正在使用 NRECO 和 ffmpeg 对视频转换器进行编码,一切正常,但是在获得我尝试过的进度时间时
pgbConversion.Value = FFMpegConverter.ConvertProgress();
但这是不可能的所以我得到了!** **ConvertProgress 是偶数;请查看有关如何添加偶数处理程序的 C# 文档。****
来自 NReco 请我知道 ConvertProgrss 是一个事件,我怎样才能获得视频进度
你这样写:
FFMpegConverter.ConvertProgress +=
您的Visual Studio 通过为您提供将事件处理程序代码附加到 ConvertProgress 事件来开始帮助您。它将向您显示一个弹出窗口,就像我的视觉工作室在这里所做的那样,在我将事件处理程序附加到 Timer.Elapsed 事件的屏幕截图中,这是一个完全不同的事件,在不同的对象上,我正在使用一个示例来演示 Visual Studio 如何帮助您将事件附加到事物上:
然后您在您的视觉工作室中按 TAB以接受弹出窗口中的建议
Visual Studio 将为您构建一个基本的事件处理程序,您可以将您希望在每次引发事件时运行的代码添加到其中。这是我的Visual Studio 在使用 Timer 将事件处理程序添加到我的示例期间按 Tab 时所做的:
(当然,我的图片显示 VS 为 Timer.Elapsed 制作处理程序,而不是 FFMpegConverter.ConvertProgress,因为我有 Timer,但我没有那个 FFMpegConverter 类。“图片仅用于说明目的- 你不应该输入你在我的图片中看到的代码")
您确定这不是拼写错误,它们的意思是“事件”吗?在这种情况下,我会将 lambda 表达式分配给事件,或者您可以只引用另一种方法,如下所示,因此文档将在此处:Lambda Expressions,Events。
不带 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实例。