diff --git a/Views/UserControl/ViewportData/Helper/VideoHelper.cs b/Views/UserControl/ViewportData/Helper/VideoHelper.cs index 83372f4..76c4ea0 100644 --- a/Views/UserControl/ViewportData/Helper/VideoHelper.cs +++ b/Views/UserControl/ViewportData/Helper/VideoHelper.cs @@ -10,6 +10,7 @@ using System.Windows.Media.Imaging; using System.Drawing; using System.Windows; using BrilliantSightClient.Model.Attributes; +using BrilliantSightClient.Model.Extension; namespace BrilliantSightClient.Views.UserControl.ViewportData.Helper; @@ -34,10 +35,10 @@ public class VideoHelper } // Use FFmpeg to create a video from the PNG frames - string ffmpegPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ffmpeg.exe"); // Assuming ffmpeg.exe is in the same directory as the application - if (!File.Exists(ffmpegPath)) + string ffmpegPath = GetFFmpegPath(); + if (ffmpegPath.IsNullOrEmpty()) { - throw new FileNotFoundException("FFmpeg executable not found.", ffmpegPath); + throw new FileNotFoundException("FFmpeg executable not found."); } string framePattern = Path.Combine(tempDirectory, "frame_%05d.png").Replace("\\", "/"); // Replace backslashes with forward slashes for FFmpeg compatibility @@ -101,11 +102,11 @@ public class VideoHelper } // Use FFmpeg to create a video from the PNG frames - string ffmpegPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ffmpeg.exe"); // Assuming ffmpeg.exe is in the same directory as the application - if (!File.Exists(ffmpegPath)) + string ffmpegPath = GetFFmpegPath(); + if (ffmpegPath.IsNullOrEmpty()) { // throw new FileNotFoundException("", ffmpegPath); - MessageBox.Show("FFmpeg executable not found.", ffmpegPath); + MessageBox.Show("FFmpeg executable not found."); } string framePattern = Path.Combine(tempDirectory, "frame_%05d.png").Replace("\\", "/"); // Replace backslashes with forward slashes for FFmpeg compatibility @@ -228,4 +229,27 @@ public class VideoHelper encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap)); return encoder; } + + /// + /// 多级查找FFmpeg可执行文件路径 + /// + /// 存在的FFmpeg路径,不存在返回null + private static string GetFFmpegPath() + { + // 优先检查应用程序基目录 + string baseDirPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ffmpeg.exe"); + if (File.Exists(baseDirPath)) + { + return baseDirPath; + } + + // 检查系统目录(C:\Windows\System32) + string system32Path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "ffmpeg.exe"); + if (File.Exists(system32Path)) + { + return system32Path; + } + + return string.Empty; + } } \ No newline at end of file