использование ffmpeg в функции Azure для вырезания файлов с помощью c #

2

Я написал функцию Azure в С#, которая сократит большие файлы mp4 за небольшую продолжительность. Я скопировал все, что требуется (ffmpeg выполнимый, видеофайл) в домашнем каталоге через консоль KUDU. Но когда я запускаю функцию, она работает более 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 или на моем собственном ПК, это займет всего 1,5 минуты, и я получаю файл с требуемой продолжительностью

Может ли кто-нибудь помочь мне в этом? Что мне может не хватать?

  • 0
    может быть, ваш компьютер работает быстрее, чем облачная опция, которую вы забронировали?
  • 0
    Событие, когда я выполняю вышеуказанную команду в консоли KUDU, занимает около 1,5 минут.
Показать ещё 6 комментариев
Теги:
azure
ffmpeg
azure-functions

2 ответа

2

Одним из улучшений было бы получение инкрементных обновлений прогресса из stdout, предполагая, что ваш процесс имеет выход. Я считаю, что ReadToEnd() будет блокироваться до тех пор, пока ваш процесс не выйдет (и здесь он появится в первый раз). См. Примеры sync & async: Process.start: как получить результат?

Максимальный тайм-аут для плана потребления составляет 5 минут, но если вы запустите свою функцию в специализированной службе приложения, вы можете установить тайм-аут на любое значение по вашему выбору.

0

Я не мог понять, почему FFMPEG не выполнялся, пока не понял, что мне нужно находиться в той же папке, что и EXE (в вашем случае, D:\home). Это была строка кода, которую я пропустил:

Directory.SetCurrentDirectory(@"D:\home");

После этого:

process.StartInfo.WorkingDirectory = @"D:\home";
process.StartInfo.FileName = "ffmpeg.exe";

и т.п.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню