Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Azure函数中使用ffmpeg使用c剪切文件#_C#_Azure_Ffmpeg_Azure Functions - Fatal编程技术网

C# 在Azure函数中使用ffmpeg使用c剪切文件#

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

我已经在C#中编写了一个Azure函数,它将把一个大的mp4文件剪切成一些小的持续时间。我已经通过KUDU控制台在主目录中复制了所有需要的内容(ffmpeg可执行,视频文件)。但是当我运行这个函数时,它会运行5分钟以上,并且不会给出主目录中的任何文件

功能:

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或中/高端图形卡。但您可以通过控制台检查您“拥有”的硬件,然后检查它是否支持它。