public void ConvertVideo()
{
Process p = new Process();//建立外部调用线程
p.StartInfo.FileName = @"c:\ffmpeg.exe";//要调用外部程序的绝对路径
p.StartInfo.Arguments = "-i XXXXXXXXXXXXXX";//参数(这里就是FFMPEG的参数了)
p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动线程(一定为FALSE,详细的请看MSDN)
p.StartInfo.RedirectStandardError =
true;//把外部程序错误输出写到StandardError流中(这个一定要注意,FFMPEG的所有输出信息,都为错误输出流,用
StandardOutput是捕获不到任何消息的...这是我耗费了2个多月得出来的经验...mencoder就是用standardOutput来
捕获的)
p.StartInfo.CreateNoWindow = false;//不创建进程窗口
p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序(这里是FFMPEG)输出流时候产生的事件,这里是把流的处理过程转移到下面的方法中,详细请查阅MSDN
p.Start();//启动线程
p.BeginErrorReadLine();//开始异步读取
p.WaitForExit();//阻塞等待进程结束
p.Close();//关闭进程
p.Dispose();//释放资源
}
private void Output(object sendProcess, DataReceivedEventArgs output)
{
if (!String.IsNullOrEmpty(output.Data))
{
//处理方法...
}
}
BeginErrorReadLine可同步或异步读取 StandardError 流。Read、ReadLine 和 ReadToEnd 等方法对进程的错误输出流执行同步读取操作。这些同步读取操作只有在关联的 Process写入其 StandardError 流或关闭该流后才能完成。相反,BeginErrorReadLine 在 StandardError 流上开始异步读取操作。此方法会为流输出启用指定的事件处理程序并立即返回到调用方,这样当流输出被定向到该事件处理程序时,调用方还可以执行其他操作。按照这些步骤对 Process 的 StandardError 执行异步读取操作:
  • 将 UseShellExecute 设置为 false。
  • 将 RedirectStandardError 设置为 true。
  • 向 ErrorDataReceived 事件添加事件处理程序。事件处理程序必须与System.Diagnostics.DataReceivedEventHandler 委托签名相匹配。
  • 启动 Process。
  • 调用 Process 的 BeginErrorReadLine。此调用将启动 StandardError上的异步读取操作。
  • 启动异步读取操作时,关联的 Process 每向其 StandardError流写入一行文本时,都将调用该事件处理程序。
  • 可通过调用 CancelErrorRead取消异步读取操作。可通过调用方或事件处理程序取消读取操作。取消之后,可以再次调用BeginErrorReadLine 继续进行异步读取操作。
ErrorDataReceived 事件指示关联的进程已写入其重定向 StandardError 流中。该事件仅在对 StandardError 进行异步读取操作期间发生。若要启动异步读取操作,必须重定向 Process 的
StandardError 流,向 ErrorDataReceived 事件添加事件处理程序,并调用
BeginErrorReadLine。之后,每当该进程向重定向 StandardError 流中写入一行时,ErrorDataReceived
事件都会发出信号,直到该进程退出或调用 CancelErrorRead为止。

NET 2.0 调用FFMPEG,并同步读取输出信息的代码...

public void ConvertVideo()
{Process p = new Process();//建立外部调用线程p.StartInfo.FileName = @"c:\ffmpeg.exe";//要调用外部程序的绝对路径p.StartInfo.Arguments = "-i
XXXXXXXXXXXXXX";//参数(这里就是FFMPEG的参数了)p.StartInfo.UseShellExecute =
false;//不使用操作系统外壳程序启动线程(一定为FALSE,详细的请看MSDN)p.StartInfo.RedirectStandardError =
true;//把外部程序错误输出写到StandardError流中(这个一定要注意,FFMPEG的所有输出信息,都为错误输出流,用
StandardOutput是捕获不到任何消息的...这是我耗费了2个多月得出来的经验...mencoder就是用standardOutput来
捕获的)p.StartInfo.CreateNoWindow = false;//不创建进程窗口p.Start();//启动线程p.WaitForExit();//等待完成p.StandardError.ReadToEnd();//开始同步读取p.Close();//关闭进程p.Dispose();//释放资源
}
StandardError可以同步或异步读取重定向的 StandardError 流。Read、ReadLine 和 ReadToEnd
等方法对进程的错误输出流执行同步读取操作。这些同步读取操作只有在关联的 Process 写入其 StandardError
流或关闭该流后才能完成。相反,BeginErrorReadLine 在 StandardError
流上开始异步读取操作。此方法为流输出启用一个指定的事件处理程序并立即返回到调用方,这样当流输出被定向到该事件处理程序时,调用方可以执行其他操作。同步读取操作在读取 StandardError
流的调用方及写入该流中的子进程之间引入一个依赖项。这些依赖项可能导致产生死锁情况。调用方读取子进程的重定向流时依赖于该子进程。调用方将等待读取操
作,直到子进程写入流或关闭流为止。子进程写入足够多的数据以填充重定向流的时间依赖于父进程。子进程将等待下一次写操作,直到父进程读取了全部流或关闭
该流为止。当调用方和子进程相互等待对方完成操作时,就会产生死锁情况,使双方都无法继续执行操作。您可以通过计算调用方和子进程之间的依赖项从而避免出
现死锁情况。

PS.以上全部引用来自MSDN(代码除外)

我在.NET 2.0中用这些代码,调用FFMPEG很方便...

至于同步还是异步...我会选择异步的...因为异步很方便,有信息就会自动输出...输出的信息还可以经过特定的处理代码,把进度等信息显示出来...至于代码怎么写,无非就是文本处理操作...什么indexof,substring或者正则表达式之类的...

这只是代码模型而已,可以引申出更高级的处理类,例如多线程调用,多线程并发处理,批处理(从文件列表或者数据库数据)等等...

C#调用FFMPEG,并异步读取输出信息的代码相关推荐

  1. python屏幕的交互(读取输出信息)input,raw_input的区别

    >>> input("your name?") your name?sam Traceback (most recent call last):   File & ...

  2. html js获取天气预报,js 读取天气预报信息 示例代码(百度地图天气接口)

    [实例简介] [实例截图] [核心代码] 郑州市 - 天气预报 html,body{ width: 100%; height: 100%; margin: 0; text-shadow: 1px 0p ...

  3. C# 调用FFmpeg处理音视频的示例

    FFmpeg 开源.跨平台.体积小.功能强大,提供了录制.转换以及流化音视频的完整解决方案. 官网:https://www.ffmpeg.org/ 百科:https://baike.baidu.com ...

  4. 快速准确读取发票信息——发票扫描识别系统

    一.发票扫描识别系统的定义 奥普思凯快票通表票扫描识别系统(以下简称发票扫描识别系统)是高性能扫描仪和OCR识别技术的结合.软硬一体化的系统. 快速准确读取发票信息--发票扫描识别系统 发票扫描识别系 ...

  5. web读取身份证信息(java语言)

    其实实现读取身份证信息,代码其实没有多难,关键需要和硬件的厂商协调好,看他们的硬件是否支持二次开发(一般都支持).如果支持我们需要和他们拿到他们底层的jar包和api(接口文档),要是有demo就更好 ...

  6. 2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数。

    2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数. 答案2023-02-21: 使用 github.com/moonfdd/ffmpeg-go 库,这个库比go ...

  7. FFmpeg音视频入门-使用FFmpeg读取多媒体文件的信息C++代码实现+详解

    读取音视频信息 设置日志等级 // 设置日志等级 av_log_set_level(AV_LOG_DEBUG); 参数检查 必须给出要读取的多媒体文件路径才能进行接下来的多媒体读取的任务. if (a ...

  8. python 调用 C# dll 库读取电脑硬件信息

    一.核心需求 python程序读取电脑硬件信息,包括主板.CPU.内存.GPU.风扇.硬盘 二.实现思路 使用pythonnet调用Open Hardware MonitorLib.dll,通过该dl ...

  9. Java黑皮书课后题第4章:*4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声明

    *4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声明 题目 题目概述 运行示例 代码 题目 题目概述 *4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声 ...

最新文章

  1. java 流 下载文件_java 流实现文件下载问题
  2. MySQL显示ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)解决方法
  3. 安装32位mysql报错_在CentOS中安装32位或64位MySql报错error: Failed dependencies解决办法...
  4. 阿里的 RocketMQ 如何让双十一峰值之下 0 故障?
  5. android 如何修改百度导航诱导界面,Android 百度导航SDK
  6. eclipse juno_Eclipse Juno上带有GlassFish的JavaEE 7
  7. android 删除模拟器,android – 如何从avd设备中删除脱机模拟器?
  8. VUE自学日志03-模板语法
  9. Java元宵趣图_模仿百度首页“元宵节汤圆”动图(js的定时任务:setInterval)
  10. 从零开始学前端:过渡和动画 --- 今天你学习了吗?(CSS:Day20)
  11. 拓端tecdat|Python用稀疏、高斯随机投影和主成分分析PCA对MNIST手写数字数据进行降维可视化
  12. IDEA:IDEA更换主题,好看的主题汇总
  13. 程序员在国外:在加拿大IT公司工作三年的一些感受
  14. 用php求勾股数,勾股数(示例代码)
  15. 小程序之botton默认带边框的问题
  16. java8新特性 Stream流的优雅操作
  17. 迅雷因版权问题不能访问
  18. 2021年起重机械指挥新版试题及起重机械指挥模拟考试
  19. 广义线性模型--Generalized Linear Models
  20. 类 ApplicationInfo详解

热门文章

  1. 共享奢侈品平台潜力大 但真正要规模化赚钱还远着呢!
  2. 黑马程序员之 --- 集合
  3. mysql 子表 关联查询语句_MySQL基本SQL语句之单表查询、多表查询和子查询
  4. el-input去除上下箭头样式
  5. Salsify: 低延迟的网络视频框架设计--视频编解码器和传输协议的紧密集成
  6. 消防工程师 第二篇 建筑防火 5.2 防火分隔
  7. July 30, 10:00-16:45, 1309 多项式方法在调和分析问题中的应用
  8. PHP资产管理系统源码可自由设计资产卡片,适用于IT办公行业固定资产管理
  9. 中国汉字在编排设计上的一些问题
  10. Java实现简单井字棋小游戏代码实例