上传视频生成缩略图
DEMO
/// <summary> /// 上传视频生成缩略图 /// </summary> /// <param name="vFileName"></param> /// <returns></returns> public string CatchImg(string vFileName) { try { string ffmpeg = Setting.SiteSettings.FilePath + "/ffmpeg.exe"; if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(vFileName))) { return "Error"; } string flv_img = System.IO.Path.ChangeExtension(vFileName, ".jpg"); string flv_img_p = flv_img; string FlvImgSize = "140x110"; System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; startInfo.Arguments = " -i " + vFileName + " -y -f image2 -t 0.1 -s " + FlvImgSize + " " + flv_img_p; try { System.Diagnostics.Process.Start(startInfo); } catch { return "Error"; } System.Threading.Thread.Sleep(1000); if (System.IO.File.Exists(flv_img_p)) { var imagePath = vFileName.Substring(0, vFileName.LastIndexOf("/")); imagePath = imagePath.Substring(0, imagePath.LastIndexOf("/"))+"/Image"; if (System.IO.Directory.Exists(imagePath) == false)//如果不存在就创建file文件夹 { System.IO.Directory.CreateDirectory(imagePath); } System.IO.File.Move(flv_img_p, flv_img.Replace("Video", "Image")); //移动文件 return flv_img_p.Replace("Video", "Image"); } return "Error"; } catch { return "Error"; } }
需要注意一下:
这个需要下载一个叫ffmpeg.exe的然后安装在你指定好的路径下
然后上面代码里面取哪一帧是写死的第一帧
最后有个System.Threading.Thread.Sleep(1000);是留给软件处理的时间,我看源码留了3s但是我实际项目规定了视频都比较小所以我只留了1s,感觉最好是设置成参数,根据传入视频的大小自动调整,待优化啦~
还有几个当时顺手找的代码,关于文件处理的,贴一下
/// <summary> /// 删除文件夹下面所有图片 /// </summary> /// <param name="oldpngPath">待删除文件路径</param> /// <param name="newpngPath">删除到的新目录</param> /// <param name="geshi">操作文件的格式 例如:*.png、*.xml</param> public void deleteAll(string delpath, string format ) { string[] files = Directory.GetFiles(delpath, format[0]); foreach (string file in files) { File.Delete(file); } } /// <summary> /// 复制文件夹下面所有图片 /// </summary> /// <param name="oldpngPath">待复制文件路径</param> /// <param name="newpngPath">复制到的新目录</param> /// <param name="geshi">操作文件的格式 例如:*.png、*.xml</param> public void copyALl(string oldpngPath, string newpngPath, string format ) { string[] files = Directory.GetFiles(oldpngPath, format[0]); foreach (string file in files) { string otherFile = Path.Combine(oldpngPath, Path.GetFileName(file)); File.Copy(file, newpngPath + "\\" + Path.GetFileName(file)); } } /// <summary> /// 移动文件夹下的所有文件 /// </summary> /// <param name="olderpath">待移动的文件目录</param> /// <param name="topath">新目录</param> public void moveAll(string olderpath, string topath) { string[] files = Directory.GetFiles(delpath, format[0]); foreach (string file in files) { File.Move(file, topath); //移动文件 } }