Azure Functionsでffmpeg.exeを動かす

かなりハマったけど動かすことができました。

環境

  • Azure Functions v1.X
    • 最初v2でやってたけどうまくいかず。(exeなのでwindowsホストで動かす必要があるとか?でも別の要因かも)
  • Functionの言語は.NET(csxではなく)

参考にした記事


ハマりポイント

ffmpeg.exeの置き場所

binに置くものだと思い込んでいたのだけど関数フォルダに置かなきゃいけなかった。
× → D:\home\site\wwwroot\bin\ffmpeg.exe
〇 → D:\home\site\wwwroot\yourfunction\ffmpeg.exe

パスの書き方

C#コード内でProcessを起動する処理を書いたのだが、なかなかffmpegが成功してくれない。
まずは情報を得るためにProcessの情報をAzure Functionsのログに出力させるところからはじめました。

var startInfoA = new ProcessStartInfo(exe) { Arguments = argsA, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true };
var pa = Process.Start(startInfoA);
var oa = pa.StandardOutput.ReadToEnd();
var ea = pa.StandardError.ReadToEnd();
pa.WaitForExit();
log.Info("oa : " + oa);
log.Info("ea : " + ea);

こうするとログが表示できました。
no such file or directory とか permission deniedとかをくらうので試行錯誤。
結論としてはffmpegの引数に書くファイルのパスをすべて絶対パスで統一することで解決しました。