C#如何调用ffmpeg并使用他处理视频?

xiaoqihaha 发布于 2013/04/02 13:26
阅读 10K+
收藏 1

@汪宪博 你好,想跟你请教个问题:

      看到您之前在OS上也问过同样的问题,那就是 “C#如何调用ffmpeg并使用他处理视频?”

      目前我也是要利用C#调用FFMpeg来实现视频截图视频分割功能,ffmpeg上已经实现了我所说那两个功能,并且我也亲自运行成功,但是我打算不使用命令行的方式,而是用自己做好的前台图形界面(比如一个slider)来达到同样的功能。换句话说,我想借鉴ffmpeg的实现思路,但并不想通过命令行的方式,而是用自己的图形界面实现视频截图和视频分割功能,那么我该如何从ffmpeg入手呢?是不是我应该定位到ffmpeg中源代码中,查看实现该功能处的程序段,然后对这部分程序段进行相应的修改呢?请问应该如何使用sharp-ffmpeg提供的dll呢?

      刚刚接触多媒体不久,对ffmpeg了解也是甚浅,还希望提的这些问题您不要见笑,也希望您能给予回答和指点,在些表示感谢。

加载中
0
总会有无法选择的时候
总会有无法选择的时候

你处理媒体文件肯定是需要调用ffmpeg的,只需要使它允许在后台即可:

System.Diagnosties.Process p=new System.Diagnosties.Process(); 
p.StartInfo.FileName="cmd.exe";//要执行的程序名称 
p.StartInfo.UseShellExecute=false; 
p.StartInfo.RedirectStanderInput=true;//可能接受来自调用程序的输入信息
p.StartInfo.RedirectStanderOutput=true;//由调用程序获取输出信息 
p.StartInfo.CreateNoWindow=true;//不显示程序窗口 
p.Start();//启动程序 
//向CMD窗口发送输入信息: 
p.StanderInput.WriteLine("shutdown -r t 10"); //10秒后重启(C#中可不好做哦) 
//获取CMD窗口的输出信息: 
string sOutput = p.StandardOutput.ReadToEnd();
相关代码:http://www.jb51.net/article/26993.htm
另外,我并没有使用其他的库……

总会有无法选择的时候
总会有无法选择的时候
回复 @xiaoqihaha : 抱歉,这个不清楚
xiaoqihaha
xiaoqihaha
请问,ffmpeg.exe中实现的功能所对应的源代码是ffmpeg.c吗?我需要研读一下ffmpeg.exe中是如何实现视频截图以及视频分割这两个功能,由于ffmpeg的源代码太多了,我无从下手,定位到ffmpeg.c这个思路正确吗?在此先表示感谢了
0
xiaoqihaha
xiaoqihaha

您好,首先谢谢您的回答。在后台调用我已经实现了,现在遇到的问题是:我想用自己设计的UI界面来实现一样的功能,并不是调用ffmpeg.exe来实现。

比如迅雷看看里的视频截取和视频截图功能,它是在视频播放时右击鼠标,然后弹出相应的界面,我就是想实现像它一样的功能。

0
总会有无法选择的时候
总会有无法选择的时候

引用来自“xiaoqihaha”的答案

您好,首先谢谢您的回答。在后台调用我已经实现了,现在遇到的问题是:我想用自己设计的UI界面来实现一样的功能,并不是调用ffmpeg.exe来实现。

比如迅雷看看里的视频截取和视频截图功能,它是在视频播放时右击鼠标,然后弹出相应的界面,我就是想实现像它一样的功能。

修改源码的思路不错,但是太过繁琐,并且也完全没有必要去修改源代码,当然如果你认为有那么多精力去修改也是完全可以的,但是最终还是要调用修改过的……
实际上你只需要进行一下几步:
1.读取视频的总长度
2.产生进度条
3.根据用户的选择来确定所选择的段
4.调用ffmpeg...

实际上,QQ影音、暴风影音中都调用了ffmpeg,详见Libav耻辱柱:http://libav.org/shame.html(很久之前的,现在不清楚了)

xiaoqihaha
xiaoqihaha
再冒昧的请问您,您说的这几骤可否稍微详细的描述下,比如说每个步骤应该用什么技术去实现?我播放器是用Media Foundation实现的,读取视频总长度?ffmpeg可以得到吗?
xiaoqihaha
xiaoqihaha
说到要害了,看来您对多媒体这块儿是行家了,我觉得我的思想被束缚住了,应该尝试一下其他的方式,只要能够达到我想要的效果就可以。向您多多请教,还望指点,谢谢
0
总会有无法选择的时候
总会有无法选择的时候

@xiaoqihaha

再冒昧的请问您,您说的这几骤可否稍微详细的描述下,比如说每个步骤应该用什么技术去实现?我播放器是用Media Foundation实现的,读取视频总长度?ffmpeg可以得到吗?
其实,你可以先去看下FFmpeg在维基百科中的定义: http://zh.wikipedia.org/wiki/Ffmpeg#.E7.B5.84.E6.88.90.E5.85.83.E4.BB.B6
github.com是个好东西,你完全可以去这里 搜索一下与其相关的代码.
经常讨论,交流是个好习惯,但是我对FFmpeg也仅仅是了解一点点而已所之有限,所以我不是行家...建议你经常用Google搜索下英文文章看下.

最后,很抱歉..最近很忙,没空来社区.

xiaoqihaha
xiaoqihaha
回复 @汪宪博 : OK, I will try my best. Thank you!
总会有无法选择的时候
总会有无法选择的时候
回复 @xiaoqihaha : 哈哈,想要学习更好的,英文文章是最好的选择. osc也专门开辟了翻译版块....good luck!
xiaoqihaha
xiaoqihaha
表示特别感谢,由于对FFmpeg还没有一个系统的了解,所以一看英文文档有点发懵的感觉,还是内心有点恐惧吧,谢谢您的建议,我再好好研读一下,glad to meet you!
0
liuweihug
liuweihug
C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码 - 项目实战 - IT工作生活这点事。Just Such So!
http://www.suchso.com/projecteactual/csharp-ffmpeg-demo-mp3-amr-mp4-asp.net.html
0
l
ljt_dl

我想实现实时预览的功能,即:已经知道了视频的总频数,给出一个指定的位置(指定帧),在C#(或VB.NET)的窗口上,显示出

返回顶部
顶部