随笔 - 63  文章 - 72  评论 - 951  阅读 - 140万 

转自:http://www.cnblogs.com/csky/archive/2007/06/22/792833.html

       刚开始做视频转换的时候只打算用Mencoder转换rm、rmvb、rt格式的文件,其他格式的文件ffmpeg转换,编码完成,测试的时候发现用ffmpeg转换出来的Flv文件播放效果很不理想,最后就都改成用Mencoder转换,尽管他的转换速度不如ffmpeg,在我的解决方案种ffmpeg只用来截图。

问题1:转换程序要加在哪里?
用过Mencoder的都知道,转换视频的时间比较久,而且很占CPU和内存,所以没有办法实时转换。只能另外写一个后端服务程序转换,另外刚刚说过了Mencoder很占CPU和内存,所以转换服务最后能部署到另外一台服务器。

问题2:转换流程?
我的转换流程是:从数据库获取尚未转换的视频(含转换失败次数少于10次,当然次数可以自己定义)->添加到转换队列->取出队列前面的一个视频-->开始转换->判断是否转换结束->判断是否转换成功,成功了标记数据库相关字段转换成功,不成功转换失败错误次数加1->继续一下一个视频转换....

不知道大家有没有更好的流程?如果有麻烦你告诉我下,我补充上去。

问题3:如何判断转换结束?
可以获取转换过程中的输出信息(获取当前的转换进度、获取什么时候完成转换),必须设置process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true;然后必须通过异步编程的方式获取Process.StandardOutput和Process.StandardError的值,相关说明可以见(ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDiagnosticsProcessClassStandardOutputTopic.htm),具体实现当然要写一堆的代码。

问题4:如何提高视频的转换质量和文件大小(不是尺寸)?

这个问题估计大家非常关心,网络上提供了不少的例子,但是对如何提高视频质量都没有做出解答,

下面这3个参数决定了视频的转换质量
vbitrate:视频数据速率
ofps:帧频
br:音频比特率


开始的时候我上面的参数都是设定固定值,结果转换出来的视频有的质量还不错,有的质量不行,有的文件还很大(客户是拿国内比较出名的视频网站进行比较),尽管我调整了很多参数值,效果还是不理想,后来突然想起原始的视频的上面这些参数都是不一样的,设定固定值效果肯定不理想,如果获取了视频原始的上述参数值就可以用原始的值进行转换了,这样效果肯定不错。查了一下资料,发现用MediaInfo.dll(Library for read info about media files)这个第三方组件可以获取视的相关信息。

问题5:如何处理转换过程中的异常?
Mencoder在多个CPU的服务器转换会有问题,不是每个文件都会有问题,多数是转换到40%-70%就跳出一个错误对话框,我测试的结果是rm类型文件经常报错,好像和解码器drv43260.dll有关系,网络上也有很多人提这个问题,使用了他们的方法也不行,用Mencoder相关网站说多CPU的版本也不行,我现在的解决方法是设置线程的处理器,就是让Mencoder只用一个CPU工作,但是这样的话转换的速度就变慢了,有条件的可以使用两个转换服务器,一个不限定cpu,另外一个限定只使用一个CPU,用来专门处理转换失败的文件,这样就可以提高转换速度了。尽管如此,还是会有异常产生,有的文件(这种概率非常的少,0.3%左右),一开始转换就错误了,这时还没来得及指定CPU,因为必须是线程启动后才能指定CPU的,这种情况虽然概率小,但是一旦发生,就会使整个转换程序停在那里,不会再继续了。我的解决方案是用一个变量去记录Mencoder最后工作时间(在输出的时候记录,因为Mencoder工作的时候挥不断的输出当前信息,如进度),在判断当前转换是否结束的函数中,发现当前Mencoder超过10分钟没有工作的话,就直接kill当前进程,继续下一个视频的转换。

上述问题,欢迎大家提出更好的解决方案


其他问题可以参考我的另外一篇关于视频的随笔:
利用ffmpeg+mencoder视频转换的总结http://www.cnblogs.com/csky/archive/2007/03/13/673140.html

posted on   stg609  阅读(2136)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
分享按钮
点击右上角即可分享
微信分享提示