我正在使用NRECO对视频转换器进行编码,并且ffmpeg一切正常但是在获得进度时 我试过了
pgbConversion.Value = FFMpegConverter.ConvertProgress();
但这是不可能的,所以我得到了! ** ** ConvertProgress是一个偶数;请查看有关如何添加偶数处理程序的C#文档。****
来自NReco的请知道ConvertProgrss是一个事件,我怎样才能获得视频进展
答案 0 :(得分:2)
你写这个:
FFMpegConverter.ConvertProgress +=
您的 Visual Studio通过提供将事件处理程序代码附加到ConvertProgress事件来开始帮助您。它会显示一个弹出窗口,比如我的视觉工作室在这里做的,在这个截图中我将一个事件处理程序附加到一个Timer.Elapsed事件,这是一个完全不同的事件,在另一个对象上,我以此为例演示visual studio如何帮助您将事件附加到事物上:
然后你在您的 visual studio中按TAB接受弹出窗口中的建议
Visual Studio将为您构建一个基本事件处理程序,您可以将代码添加到每次引发事件时要运行的代码中。以下是我在使用Timer向我的示例添加事件处理程序时按Tab键时我的 visual studio所做的事情:
(当然我的照片显示VS为Timer.Elapsed制作处理程序,而不是FFMpegConverter.ConvertProgress,因为我有Timer,但我没有FFMpegConverter类......" Pics是为仅用于插图 - 您不应该输入您在我的照片中看到的代码")
答案 1 :(得分:1)
你确定这不是一个错字,他们的意思是"事件"?在这种情况下,我会将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;
}
示例w / 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个实例。