C# 在Azure函数中使用ffmpeg使用c剪切文件#
我已经在C#中编写了一个Azure函数,它将把一个大的mp4文件剪切成一些小的持续时间。我已经通过KUDU控制台在主目录中复制了所有需要的内容(ffmpeg可执行,视频文件)。但是当我运行这个函数时,它会运行5分钟以上,并且不会给出主目录中的任何文件 功能:C# 在Azure函数中使用ffmpeg使用c剪切文件#,c#,azure,ffmpeg,azure-functions,C#,Azure,Ffmpeg,Azure Functions,我已经在C#中编写了一个Azure函数,它将把一个大的mp4文件剪切成一些小的持续时间。我已经通过KUDU控制台在主目录中复制了所有需要的内容(ffmpeg可执行,视频文件)。但是当我运行这个函数时,它会运行5分钟以上,并且不会给出主目录中的任何文件 功能: using System; using System.Diagnostics; public static void Run(string input, TraceWriter log) { log.Info("Executing
using System;
using System.Diagnostics;
public static void Run(string input, TraceWriter log)
{
log.Info("Executing");
using (var process = new Process())
{
process.StartInfo.FileName = @"D:\home\ffmpeg.exe";
process.StartInfo.Arguments = @"-i D:\home\AmnestyInternational.mp4 -ss 00:00:03 -t 00:00:08 -async 1 D:\home\cut.mp4";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
log.Info(Directory.GetCurrentDirectory());
log.Info("Cutting starts:"+DateTime.Now.ToString("h:mm:ss tt"));
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
log.Info("Cutting ends :"+DateTime.Now.ToString("h:mm:ss tt"));
log.Info(output);
}
}
Azure功能控制台上显示的输出:
2017-03-24T11:06:00.705 Function started (Id=df082f54-719a-415f-b7f1-b10548a213be)
2017-03-24T11:06:00.721 Executing
2017-03-24T11:06:00.721 D:\Windows\system32
2017-03-24T11:06:00.721 Cutting start :11:06:00 AM
2017-03-24T11:07:14 No new trace in the past 1 min(s).
2017-03-24T11:08:14 No new trace in the past 2 min(s).
2017-03-24T11:09:14 No new trace in the past 3 min(s).
2017-03-24T11:10:14 No new trace in the past 4 min(s).
2017-03-24T11:11:00.758 Microsoft.Azure.WebJobs.Host: Timeout value of 00:05:00 was exceeded by function: Functions.ManualTriggerCSharp1.
当我尝试在KUDU控制台或我自己的PC上执行相同的命令时,只需1.5分钟,我就会得到一个所需持续时间的文件
谁能帮我一下吗?我可能缺少什么?一个改进是从标准输出获取增量进度更新,假设您的流程有输出。我相信
ReadToEnd()
会一直阻塞,直到进程退出为止(这里似乎是先超时)。请参见此处的一些同步和异步示例:
消费计划的最大超时时间为5分钟,但如果您在专用应用程序服务上运行您的功能,则可以将超时时间设置为您选择的任何值。我无法理解为什么FFMPEG没有执行,直到我意识到我需要与EXE位于同一文件夹中(在您的情况下,
D:\home
)。这是我丢失的代码行:
Directory.SetCurrentDirectory(@"D:\home");
之后:
process.StartInfo.WorkingDirectory = @"D:\home";
process.StartInfo.FileName = "ffmpeg.exe";
等等。也许您的计算机比您预订的cloudoption快?事件当我在KUDU控制台执行上述命令时,大约需要1.5分钟。您是否检查azure vm是否具有用于视频转码的硬件加速功能?不,我没有。我该怎么检查呢?我怀疑它有,因为你需要一个i7或中/高端图形卡。但您可以通过控制台检查您“拥有”的硬件,然后检查它是否支持它。