Unityからffmpegを実行して動画変換終了イベントを取得する方法です。ちなみに動画変換のオプションはシーケンス画像を30fpsのmp4へ変換するコマンドを書いています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
private void ConvertMp4() { string ffmpegExePath = Application.streamingAssetsPath + "/KirinUtil/ffmpeg/ffmpeg.exe"; process = new Process(); // コマンド情報 string option = "-framerate 30 -i ./images/%d.png -vcodec libx264 -pix_fmt yuv420p -r 30 outpt.mp4"; var info = new ProcessStartInfo(ffmpegExePath, option); info.CreateNoWindow = true; info.UseShellExecute = false; info.RedirectStandardError = true; info.RedirectStandardOutput = true; process.StartInfo = info; // イベント登録 process.EnableRaisingEvents = true; process.ErrorDataReceived += new DataReceivedEventHandler(ProcessErrorDataReceived); process.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputDataReceived); process.Exited += new EventHandler(ProcessExited); // 実行+Output読み取り process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); } // エラー情報取得 private void ProcessErrorDataReceived(object sender, DataReceivedEventArgs e) { print("process_ErrorDataReceived"); } // アウトプット情報取得 private void ProcessOutputDataReceived(object sender, DataReceivedEventArgs e) { print("ProcessOutputDataReceived"); } // プロセス終了イベント private void ProcessExited(object sender, EventArgs e) { Process process = (System.Diagnostics.Process)sender; process.Dispose(); print("ProcessExited"); } |
次の2行を書かないと終了判定(ProcessExited)が取れなかったです。
1 2 |
process.BeginOutputReadLine(); process.BeginErrorReadLine(); |
コメントを残す