Run exe in background on .NET platform

柔情只为你懂 2021-12-09 01:51 251阅读 0赞

前两天写了个Bash脚本,用来将Flv格式转换为Avi格式。可是,并不是每个人的电脑上都有Linux/Unix环境,在将这些小工具拿给别的使用的时候,我还要提供一个Windows可以执行的工具。本来我是想将Bash转换为Windows批处理的,弄了一会也没有搞好,后来想了一下,干脆写个Console Application去后台调用ffmpeg工具来执行转换工作。

工具写好了,当我调用ffmpeg.exe这个小工具的时候,老是出现一个cmd窗口,非常不美观。后来网上找了一下,将执行ffmpeg的窗口隐藏起来,这个效果好多了。最近狂迷Command-Line和一些开源简洁的小工具,用这个方法,我就可以在我的应用程序中利用一些简洁实用的小工具了 :)

  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.Threading;
  5. namespace convert_flv_2_avi
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. CheckFfmpegToolExist(Ffmpeg);
  12. MakeDestinationFolderExist(AviFolder);
  13. Console.WriteLine("Starting convert, please ensure flv files placed in folder of flv-folder\n");
  14. ConvertFlv2Avi(FlvFolder);
  15. Console.WriteLine("\nCompleted,Press any key to exit.");
  16. Console.ReadKey();
  17. }
  18. private static void ConvertFlv2Avi(string flvFolder)
  19. {
  20. string[] flvFiles = Directory.GetFiles(flvFolder);
  21. foreach (string flv in flvFiles)
  22. {
  23. Console.WriteLine("Converting file of {0}", flv);
  24. RunFfmpeg(flv,
  25. string.Format("{0}.avi", flv.Substring(0, flv.Length - 4)));
  26. }
  27. }
  28. private static void MakeDestinationFolderExist(string aviFolder)
  29. {
  30. if (!Directory.Exists(aviFolder))
  31. {
  32. Directory.CreateDirectory(aviFolder);
  33. }
  34. }
  35. private static void CheckFfmpegToolExist(string Ffmpeg)
  36. {
  37. if (!File.Exists(Ffmpeg))
  38. {
  39. Console.WriteLine("Can not find {0}", Ffmpeg);
  40. Console.ReadKey();
  41. Environment.Exit(1);
  42. }
  43. }
  44. static void RunFfmpeg(string flvFile, string aviFile)
  45. {
  46. Process ffmpeg = new Process();
  47. ffmpeg.StartInfo.FileName = Ffmpeg;
  48. ffmpeg.StartInfo.Arguments =
  49. string.Format(@"-i {0} -r 25 -b 750k -y {1}", flvFile, aviFile.Replace(FlvFolder, AviFolder));
  50. ffmpeg.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //Run ffmpeg.exe in background
  51. try
  52. {
  53. ffmpeg.Start();
  54. }
  55. catch (Exception ex)
  56. {
  57. Console.WriteLine(ex.Message);
  58. }
  59. }
  60. private const string Ffmpeg = @"ffmpeg\ffmpeg.exe";
  61. private const string FlvFolder = @"flv-folder";
  62. private const string AviFolder = @"out-avi-folder";
  63. }
  64. }

转载于:https://www.cnblogs.com/Jerry-Chou/archive/2010/12/17/1909570.html

发表评论

表情:
评论列表 (有 0 条评论,251人围观)

还没有评论,来说两句吧...

相关阅读