视频文件转换成帧图片!! 用C#技术怎么实现 视频文件转换成帧图片!! 知道的谢谢告诉下!!!!不胜感激!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /**//// <summary> /// 从视频画面中截取一帧画面为图片 /// </summary> /// <param name="VideoName">视频文件pic/guiyu.mov</param> /// <param name="WidthAndHeight">图片的尺寸如:240*180</param> /// <param name="CutTimeFrame">开始截取的时间如:"1"</param> /// <returns></returns> public string GetPicFromVideo(string VideoName,string WidthAndHeight,string CutTimeFrame) ...{ string ffmpeg=@"C:\XXX\fmpeg.exe";//这里用到这个exe 是解码器 系统搜一下,换下地址 string PicName =Server.MapPath(Guid.NewGuid().ToString().Replace("-","")+".jpg"); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.Arguments = " -i " + Server.MapPath(VideoName) + " -y -f image2 -ss "+CutTimeFrame+" -t 0.001 -s " + WidthAndHeight + " " + PicName ; try ...{ System.Diagnostics.Process.Start(startInfo); return PicName; } catch(Exception err) ...{ return err.Message; } } 刚才那个是截取一张的如果要截取多张 要循环的时间之类的 就要靠参数了startInfo.Arguments 很重要的百度一下相关的知识吧祝你好运 http://topic.csdn.net/u/20090329/16/a04986c2-8df2-42c4-b575-f0ce68f6579a.html #region //运行FFMpeg的视频解码,(这里是绝对路径) /// <summary> /// 转换文件并保存在指定文件夹下面(这里是绝对路径) /// </summary> /// <param name="fileName">上传视频文件的路径(原文件)</param> /// <param name="playFile">转换后的文件的路径(网络播放文件)</param> /// <param name="imgFile">从视频文件中抓取的图片路径</param> /// <returns>成功:返回图片虚拟地址; 失败:返回空字符串</returns> public string ChangeFilePhy(string fileName, string playFile, string imgFile) { //取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add key="ffmpeg" value="E:\51aspx\ffmpeg.exe" /> string ffmpeg = HttpContext.Current.Server.MapPath("~/" + PublicMethod.ffmpegtool); if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName))) { return ""; } //获得图片和(.flv)文件相对路径/最后存储到数据库的路径,如:/Web/User1/00001.jpg string flv_file = System.IO.Path.ChangeExtension(playFile, ".flv"); //截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" /> string FlvImgSize = PublicMethod.sizeOfImg; System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; FilestartInfo.Arguments = " -i " + fileName + " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file; //ImgstartInfo.Arguments = " -i " + fileName + " -y -f image2 -t 0.05 -s " + FlvImgSize + " " + flv_img; try { //转换 System.Diagnostics.Process p = System.Diagnostics.Process.Start(FilestartInfo); while (!p.HasExited) { } //截图 CatchImg(fileName, imgFile); //System.Diagnostics.Process.Start(ImgstartInfo); } catch { return ""; } // return ""; } 就是说现在又一个*.avi的视频文件但是我想把这个*.avi视频全部转换成帧图片然后把这些图片全部显示出来 我现在加了一个timer控件再里面调用了你写的方法可以吗 对了还有就是我想问下*.avi用什么解码器好 用FFmpeg从视频截取任意一帧图片 你可以下载这个源代码来看看!源码效果图:注意,下载源码前,你需要用一个email地址去注册为网站的用户。 堆叠控件(Z轴顺序)!!! 有关WinForm中ListView 急求:怎么用VS2005自带安装包制作工具,实现安装后给用户提示重启系统? 在vs2005中如何生成 注释web页 高手请教,50个数,如何选出排名前12的数字? MN_ENDMENU是什么意思,应用在此有哪些实例代码可供参考 字节数组如何转换为字符串 使用winio.dll如何模拟鼠标事件? 什么是“程序集”,如何理解它? 关于DataGrid的BUG 谁会c/s视频拆解成帧图片 sql 条件选择 显示列表 问题
/// 从视频画面中截取一帧画面为图片
/// </summary>
/// <param name="VideoName">视频文件pic/guiyu.mov</param>
/// <param name="WidthAndHeight">图片的尺寸如:240*180</param>
/// <param name="CutTimeFrame">开始截取的时间如:"1"</param>
/// <returns></returns>
public string GetPicFromVideo(string VideoName,string WidthAndHeight,string CutTimeFrame)
...{
string ffmpeg=@"C:\XXX\fmpeg.exe";//这里用到这个exe 是解码器 系统搜一下,换下地址
string PicName =Server.MapPath(Guid.NewGuid().ToString().Replace("-","")+".jpg");
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.Arguments = " -i " + Server.MapPath(VideoName) + " -y -f image2 -ss "+CutTimeFrame+" -t 0.001 -s " + WidthAndHeight + " " + PicName ;
try
...{
System.Diagnostics.Process.Start(startInfo);
return PicName;
}
catch(Exception err)
...{
return err.Message;
}
}
如果要截取多张 要循环的
时间之类的 就要靠参数了
startInfo.Arguments 很重要的
百度一下相关的知识吧
祝你好运
/// <summary>
/// 转换文件并保存在指定文件夹下面(这里是绝对路径)
/// </summary>
/// <param name="fileName">上传视频文件的路径(原文件)</param>
/// <param name="playFile">转换后的文件的路径(网络播放文件)</param>
/// <param name="imgFile">从视频文件中抓取的图片路径</param>
/// <returns>成功:返回图片虚拟地址; 失败:返回空字符串</returns>
public string ChangeFilePhy(string fileName, string playFile, string imgFile)
{
//取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add key="ffmpeg" value="E:\51aspx\ffmpeg.exe" />
string ffmpeg = HttpContext.Current.Server.MapPath("~/" + PublicMethod.ffmpegtool); if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))
{
return "";
}
//获得图片和(.flv)文件相对路径/最后存储到数据库的路径,如:/Web/User1/00001.jpg
string flv_file = System.IO.Path.ChangeExtension(playFile, ".flv"); //截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" />
string FlvImgSize = PublicMethod.sizeOfImg;
System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
FilestartInfo.Arguments = " -i " + fileName + " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file;
//ImgstartInfo.Arguments = " -i " + fileName + " -y -f image2 -t 0.05 -s " + FlvImgSize + " " + flv_img;
try
{
//转换
System.Diagnostics.Process p = System.Diagnostics.Process.Start(FilestartInfo);
while (!p.HasExited) { } //截图
CatchImg(fileName, imgFile); //System.Diagnostics.Process.Start(ImgstartInfo);
}
catch
{
return "";
}
//
return "";
}
再里面调用了你写的方法可以吗
源码效果图:
注意,下载源码前,你需要用一个email地址去注册为网站的用户。