注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

创业....投资学习....

记录技术随想,结交志同道合朋友

 
 
 

日志

 
 
关于我

season,一直关注家乡的发展,关注个人的成长.工作后关注创业,关注投资.....可却忘记了一点,没有空中楼阁.于是我把视线投向了如何准备创业,创业需要什么?资源(PROFIT的六个方面?)?勇气?经验?教训?...所有的都对,但所有的都应该脚踏实地.所以,我能做的就是学习学习再学习......可应该在什么样的生存状态下学习?于是我还要解决生存的问题,再于是工作+学习便成了我日常生活的主题,而我却希望有一天事业+家庭变成我生活的主题

GACHA精选

ffmpeg的使用  

2007-06-27 15:14:32|  分类: 天马行空 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

ffmpeg的使用[zt]

 

先从ffmpeg开始。

http://ffmpeg.sourceforge.net上有说明,音视频的分离,转换,解码的完全解决方案。

其中最重要的就是libavcodec库。它被mplayer或者xine使用作为解码器。还有,国内比较流行的播放器影音风暴或MyMPC的后端ffdshow也是使用ffmpeg的解码库的。

ffmpeg包括一组软件,ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。两个库文件libavcodec和libavformat。

ffmpeg作为媒体文件处理软件,基本用法如下:

ffmpeg -i INPUTfile [OPTIONS] OUTPUTfile

输入输出文件通常就是待处理的多媒体文件了。可以是纯粹的音频文件,纯粹的视频文件,或者混合的。

大部分常见的格式都能够“通杀”。象常见的各种mpeg,AVI封装的DIVX和Xvid等等

具体的格式支持列表可以使用ffmpeg -formats查看或直接查阅文档。

另:由于Linux把设备视为文件,因此-i选项后可以跟设备名。比如DV,视频卡,光驱或者其它的各类设备。

输出的内容通过Options调整。列出几个主要的选项

-vcodec 视频流编码方式

-b 视频流码率(默认只有200k,一般都需要手动设置,具体的数值视codec选择而定)

-r 视频流帧数(一般说来PAL制式通常用25,NTSC制式通常用29)

-s 视频解析度(分辨率,也要视codec和你的需要而定。通常改变某个视频流的解析度是很耗费CPU的事情。另:具体写法使用“数字x数字”的形式。中间是小写字母“x”,这个用过mplayer的应该都知道)

-t 处理持续时间。

-acodec 音频流编码方式

-ab 音频流码率(默认是同源文件码率,也需要视codec而定)

-ar 音频流采样率(大多数情况下使用44100和48000,分别对应PAL制式和NTSC制式,根据需要选择)

还有些可能需要用到的选项如

-vn和-an分别是屏蔽视频流和屏蔽音频流,分别对源文件处理一次即可得到分离的音频和视频

-author -title分别是设置媒体文件的作者和title

-f选项是强制使用某种格式

-target type是使用预置的格式转换(可以转成dvd,vcd或svcd)

除此之外还有些更高级的选项,如设定vbr,或设定high quality,或者设定vbr的buff和max/min码率,象一般我们自用的dvd抓轨啦,DV转vcd或dvd啦,网上下载的电影转成vcd或dvd都不一定需要用到它们。

具体的使用方法在man里面有介绍。简单明了。

少许使用经验:

1:ffmpeg对于rm的处理能力实在不敢恭维。也许是因为我主要使用二进制包安装的缘故,对于Real媒体格式只能处理老式的RV8编码的格式。而且效果不佳。

2:格式转换是一件很耗费CPU资源的事情。虽说ffmpeg已经比WinAVI啦,TmpgEnc这些win下的非专业级视频处理软件做的好些了。毕竟我们可以把ffmpeg运行的时候放到后台。

3:ffmpeg不是万能的,虽说支持的格式很多,但是如果你不是用的最新CVS出来的版本,可能碰上某些古怪的媒体文件就要郁闷。

4:ffmpeg全部是命令行操作。哪位达人写个GUI前端出来就可以让不少菜鸟脱离苦海了。还有就是不能批量处理,但是这个可以用shell帮忙解决。

 

前几天参加tech-ed大会,其实更多的是认识了一些志同道合的朋友,ms的课程往往是蜻蜓点水,因此听起课来也没有什么意思。不过,有幸认识了园子里面的一些朋友,深感欣慰。技术人员真的非常容易接触,我们能很快的切入主题,然后进行探讨。这也许正是技术人员单纯的一面吧。这两天,又换了新单位,感觉换来换去,实在没有意思。记得刚开始工作的时候,老板对我说不要换来换去的,当时我还和别人说这个,没想到自己却沦落到这一步。一直想寻找一个好的团队,好的东家,但一直没有如愿。不知道现下的会如何,但目前看来并不乐观,我期望中的团队是一个互助,团结,激情,灵活,互相尊重,互为补充的团队,可能很抽象,但我所有的憧憬都源自于敏捷软件开发,我不太愿意看到团队僵硬,传统,死沉。也不太喜欢个人主义的团队,“软件开发是人与人的游戏”,没错,我所想要的就是这样一个以人为本的团队,要求并不高,但很难实现。最少现在迷茫中。。。

不废话了,我们经常为图片生成缩略图,在windows中视频在察看缩略图的时候也显示出图片来,如果作一个视频系统,那么用户上传上来的视频,如何为其生成缩略图呢?要想操作视频文件,通常所用的方法就是DirectX里面的DriectShow,用它就可以实现抓屏,抓图,抓视频的功能,想到这,又惊奇于ms演示的vista下的app那绚的3d效果.

要想在.net中使用DirectShow,所做的第一件事情是需要一个程序集,这个程序集可以帮你完成.net对directshow的调用,而且您不需要用com,省却注册过程,这个assembly的名字为:Interop.DexterLib.dll, 它象其他dll,只需添加引用即可。

利用这个dll,封装了一个类,利用这个类您就可以方便的生成video的缩略图了,而且适用于winform,也适用于 asp.net,酷吧!效果如下:

winform:

ffmpeg的使用 - season - 创业....投资学习....

asp.net:

ffmpeg的使用 - season - 创业....投资学习....

源码在这,用兴趣的,下过去看看吧

linklink/Files/jillzhang/extractframe_source.rar

参考文章:

http://www.yafla.com/dennisforbes/Extracting-Video-Frames-with-NET/Extracting-Video-Frames-with-NET.html

另外一种方法是:

http://yao.cnblogs.com/archive/2006/05/31/414151.aspx

 

前段时间写过一篇抓取视频文件中图片的帖子,如下痛并努力着-在asp.net中如何从视频文件中抓取一桢并生成图像文件

另外一种方法是采用ffmpeg解码器,来实现如功能。

代码如下:

  1ffmpeg的使用 - season - 创业....投资学习.... public class CatchFlv

  2ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....    ffmpeg的使用 - season - 创业....投资学习....{

  3ffmpeg的使用 - season - 创业....投资学习....       public CatchFlv()

  4ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....       ffmpeg的使用 - season - 创业....投资学习....{

  5ffmpeg的使用 - season - 创业....投资学习....       }

  6ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....       /**//// <summary>

  7ffmpeg的使用 - season - 创业....投资学习....       /// @从视频文件截图,生成在视频文件所在文件夹

  8ffmpeg的使用 - season - 创业....投资学习....       /// 支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv

  9ffmpeg的使用 - season - 创业....投资学习....       /// 在Web.Config 中需要两个前置配置项:

 10ffmpeg的使用 - season - 创业....投资学习....       /// 1.ffmpeg.exe文件的路径

 11ffmpeg的使用 - season - 创业....投资学习....       /// <add key="ffmpeg" value="\thread\ffmpeg\ffmpeg.exe" />

 12ffmpeg的使用 - season - 创业....投资学习....       /// 2.截图的尺寸大小

 13ffmpeg的使用 - season - 创业....投资学习....       /// <add key="CatchFlvImgSize" value="140x110" />

 14ffmpeg的使用 - season - 创业....投资学习....       /// 3.视频处理程序ffmpeg.exe

 15ffmpeg的使用 - season - 创业....投资学习....       /// </summary>

 16ffmpeg的使用 - season - 创业....投资学习....       /// <param name="vFileName">视频文件绝对或相对地址,如:(..)/Web/FlvFile/User1/001.avi</param> 

 17ffmpeg的使用 - season - 创业....投资学习....       /// <returns>成功:返回图片绝对/相对地址; 失败:返回空字符串</returns>

 18ffmpeg的使用 - season - 创业....投资学习....       public static string CatchImg(string vFileName)

 19ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....       ffmpeg的使用 - season - 创业....投资学习....{

 20ffmpeg的使用 - season - 创业....投资学习....           try

 21ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....           ffmpeg的使用 - season - 创业....投资学习....{

 22ffmpeg的使用 - season - 创业....投资学习....               string ffmpeg = System.Configuration.ConfigurationSettings.AppSettings["ffmpeg"];

 23ffmpeg的使用 - season - 创业....投资学习....               ffmpeg = HttpContext.Current.Server.MapPath(ffmpeg);

 24ffmpeg的使用 - season - 创业....投资学习....

 25ffmpeg的使用 - season - 创业....投资学习....               if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(vFileName))))

 26ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....               ffmpeg的使用 - season - 创业....投资学习....{

 27ffmpeg的使用 - season - 创业....投资学习....                   return "";

 28ffmpeg的使用 - season - 创业....投资学习....               }

 29ffmpeg的使用 - season - 创业....投资学习....

 30ffmpeg的使用 - season - 创业....投资学习....               //获得图片相对路径/最后存储到数据库的路径,如:/Web/FlvFile/User1/00001.jpg

 31ffmpeg的使用 - season - 创业....投资学习....               string flv_img = System.IO.Path.ChangeExtension(vFileName, ".jpg");

 32ffmpeg的使用 - season - 创业....投资学习....

 33ffmpeg的使用 - season - 创业....投资学习....               //图片绝对路径,如:D:\Video\Web\FlvFile\User1\0001.jpg

 34ffmpeg的使用 - season - 创业....投资学习....               string flv_img_p = HttpContext.Current.Server.MapPath(flv_img);

 35ffmpeg的使用 - season - 创业....投资学习....

 36ffmpeg的使用 - season - 创业....投资学习....               //截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="140x110" /> 

 37ffmpeg的使用 - season - 创业....投资学习....               string FlvImgSize = System.Configuration.ConfigurationSettings.AppSettings["CatchFlvImgSize"];

 38ffmpeg的使用 - season - 创业....投资学习....

 39ffmpeg的使用 - season - 创业....投资学习....               System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);

 40ffmpeg的使用 - season - 创业....投资学习....               startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;

 41ffmpeg的使用 - season - 创业....投资学习....

 42ffmpeg的使用 - season - 创业....投资学习....               //此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过

 43ffmpeg的使用 - season - 创业....投资学习....               startInfo.Arguments = " -i " + System.Web.HttpContext.Current.Server.MapPath(vFileName) + " -y -f image2 -t 0.001 -s " + FlvImgSize + " " + flv_img_p;

 44ffmpeg的使用 - season - 创业....投资学习....               try

 45ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....               ffmpeg的使用 - season - 创业....投资学习....{

 46ffmpeg的使用 - season - 创业....投资学习....                   System.Diagnostics.Process.Start(startInfo);

 47ffmpeg的使用 - season - 创业....投资学习....               }

 48ffmpeg的使用 - season - 创业....投资学习....               catch

 49ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....               ffmpeg的使用 - season - 创业....投资学习....{

 50ffmpeg的使用 - season - 创业....投资学习....                   return "";

 51ffmpeg的使用 - season - 创业....投资学习....               }

 52ffmpeg的使用 - season - 创业....投资学习....               System.Threading.Thread.Sleep(4000);

 53ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....               /**////注意:图片截取成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;

 54ffmpeg的使用 - season - 创业....投资学习....               if (System.IO.File.Exists(flv_img_p))

 55ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....               ffmpeg的使用 - season - 创业....投资学习....{

 56ffmpeg的使用 - season - 创业....投资学习....                   return flv_img;

 57ffmpeg的使用 - season - 创业....投资学习....               }

 58ffmpeg的使用 - season - 创业....投资学习....               return "";

 59ffmpeg的使用 - season - 创业....投资学习....           }

 60ffmpeg的使用 - season - 创业....投资学习....           catch

 61ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....           ffmpeg的使用 - season - 创业....投资学习....{

 62ffmpeg的使用 - season - 创业....投资学习....               return "";

 63ffmpeg的使用 - season - 创业....投资学习....           }

 64ffmpeg的使用 - season - 创业....投资学习....

 65ffmpeg的使用 - season - 创业....投资学习....       }

 66ffmpeg的使用 - season - 创业....投资学习....

 67ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....       /**//// <summary>

 68ffmpeg的使用 - season - 创业....投资学习....       /// @视频文件格式转换,生成在视频文件所在文件夹

 69ffmpeg的使用 - season - 创业....投资学习....       /// 支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv

 70ffmpeg的使用 - season - 创业....投资学习....       /// 在Web.Config 中需要两个前置配置项:

 71ffmpeg的使用 - season - 创业....投资学习....       /// 1.ffmpeg.exe文件的路径

 72ffmpeg的使用 - season - 创业....投资学习....       /// <add key="ffmpeg" value="\thread\ffmpeg\ffmpeg.exe" />

 73ffmpeg的使用 - season - 创业....投资学习....       /// 2.截图的尺寸大小

 74ffmpeg的使用 - season - 创业....投资学习....       /// <add key="CatchFlvSize" value="240x180" /> 

 75ffmpeg的使用 - season - 创业....投资学习....       /// 3.视频处理程序ffmpeg.exe

 76ffmpeg的使用 - season - 创业....投资学习....       /// </summary>

 77ffmpeg的使用 - season - 创业....投资学习....       /// <param name="vFileName">视频文件绝对或相对地址,如:(..)/Web/FlvFile/User1/001.avi</param> 

 78ffmpeg的使用 - season - 创业....投资学习....       /// <returns>成功:返回flv文件绝对/相对地址; 失败:返回空字符串</returns>

 79ffmpeg的使用 - season - 创业....投资学习....       public static string ChangeMediaFormat(string vFileName)

 80ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....       ffmpeg的使用 - season - 创业....投资学习....{

 81ffmpeg的使用 - season - 创业....投资学习....           try

 82ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....           ffmpeg的使用 - season - 创业....投资学习....{

 83ffmpeg的使用 - season - 创业....投资学习....               string ffmpeg = System.Configuration.ConfigurationSettings.AppSettings["ffmpeg"];

 84ffmpeg的使用 - season - 创业....投资学习....               string wks_url = System.Configuration.ConfigurationSettings.AppSettings["wks_local"];

 85ffmpeg的使用 - season - 创业....投资学习....               ffmpeg = wks_url+ffmpeg;

 86ffmpeg的使用 - season - 创业....投资学习....               if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(wks_url+vFileName)))

 87ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....               ffmpeg的使用 - season - 创业....投资学习....{

 88美女 - null - honwei4444的博客                   return "";

 89美女 - null - honwei4444的博客               }

 90

 91ffmpeg的使用 - season - 创业....投资学习....               string flv_fot = System.IO.Path.ChangeExtension(vFileName, ".flv");

 92               string flv_fot_p = wks_url+flv_fot;

 93ffmpeg的使用 - season - 创业....投资学习....

 94ffmpeg的使用 - season - 创业....投资学习....               //尺寸大小,配置在Web.Config中,如:<add key="CatchFlvSize" value="240x180" /> 

 95               string FlvImgSize = System.Configuration.ConfigurationSettings.AppSettings["CatchFlvSize"];

 96ffmpeg的使用 - season - 创业....投资学习....

 97ffmpeg的使用 - season - 创业....投资学习....               System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);

 98ffmpeg的使用 - season - 创业....投资学习....               startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;

 99ffmpeg的使用 - season - 创业....投资学习....

100ffmpeg的使用 - season - 创业....投资学习....               //此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过

101ffmpeg的使用 - season - 创业....投资学习....               startInfo.Arguments = " -i " + wks_url+vFileName + " -ab 56 -ar 22050 -b 500 -r 15 -s  " + FlvImgSize + " " + flv_fot_p;

102ffmpeg的使用 - season - 创业....投资学习....

103               try

104ffmpeg的使用 - season - 创业....投资学习....               {

105ffmpeg的使用 - season - 创业....投资学习....                   System.Diagnostics.Process.Start(startInfo);

106ffmpeg的使用 - season - 创业....投资学习....               }

107ffmpeg的使用 - season - 创业....投资学习....               catch

108ffmpeg的使用 - season - 创业....投资学习....               ffmpeg的使用 - season - 创业....投资学习....{

109ffmpeg的使用 - season - 创业....投资学习....                   return "";

110ffmpeg的使用 - season - 创业....投资学习....               }

111ffmpeg的使用 - season - 创业....投资学习....

112ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....               /**////注意:文件格式转换成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;

113ffmpeg的使用 - season - 创业....投资学习....               System.Threading.Thread.Sleep(6000);

114ffmpeg的使用 - season - 创业....投资学习....               if (System.IO.File.Exists(flv_fot_p))

115ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....               ffmpeg的使用 - season - 创业....投资学习....{

116ffmpeg的使用 - season - 创业....投资学习....                   WKS.Common.ImagesSet.DeleteOleImg(wks_url+vFileName);

117ffmpeg的使用 - season - 创业....投资学习....                   return flv_fot;

118ffmpeg的使用 - season - 创业....投资学习....               }

119ffmpeg的使用 - season - 创业....投资学习....

120ffmpeg的使用 - season - 创业....投资学习....               return "";

121ffmpeg的使用 - season - 创业....投资学习....           }

122ffmpeg的使用 - season - 创业....投资学习....           catch

123ffmpeg的使用 - season - 创业....投资学习....ffmpeg的使用 - season - 创业....投资学习....           ffmpeg的使用 - season - 创业....投资学习....{

124ffmpeg的使用 - season - 创业....投资学习....               return "";

125ffmpeg的使用 - season - 创业....投资学习....           }

126ffmpeg的使用 - season - 创业....投资学习....       }     

127ffmpeg的使用 - season - 创业....投资学习....    }

128ffmpeg的使用 - season - 创业....投资学习....    

但是,这种方法不知道ffmpeg什么时候生成结果,生成什么样的结果,因此也存在一定局限性.

  评论这张
 
阅读(633)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018