C#上传视频生成缩略图(转)

注意:需要FFmpeg软件,用到ffmpeg.exe;FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。

FFmpeg下载地址:http://download.csdn.net/detail/kingcruel/6549339

前台代码

 

[html] view plain copy
 
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>  
  2.   
  3. <!DOCTYPE html>  
  4.   
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head runat="server">  
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
  8.     <title></title>  
  9. </head>  
  10. <body>  
  11.     <form id="form1" runat="server">  
  12.     <div>  
  13.         <asp:FileUpload ID="FileUpload1" runat="server" />  
  14.         <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />  
  15.     </div>  
  16.     </form>  
  17. </body>  
  18. </html>  

 

 

后台代码

 

[csharp] view plain copy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using System.Web;  
  6. using System.Web.UI;  
  7. using System.Web.UI.WebControls;  
  8.   
  9. namespace WebApplication1  
  10. {  
  11.     public partial class WebForm1 : System.Web.UI.Page  
  12.     {  
  13.         protected void Page_Load(object sender, EventArgs e)  
  14.         {  
  15.   
  16.         }  
  17.   
  18.         protected void Button1_Click(object sender, EventArgs e)  
  19.         {  
  20.             string imgfileExp = this.FileUpload1.PostedFile.FileName.Substring(this.FileUpload1.PostedFile.FileName.LastIndexOf(".") + 1);  
  21.             string filename = "11223344";  
  22.             string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);                      //文件名称  
  23.             string fileExtension = Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower();      //文件的后缀名(小写)  
  24.   
  25.             if (imgfileExp.ToLower() == "flv" || imgfileExp.ToLower() == "mp4")  
  26.             {  
  27.                 Response.Write("uploadfile\\" + filename + "." + imgfileExp);  
  28.                 this.FileUpload1.PostedFile.SaveAs(Server.MapPath("uploadfile") + "\\" + fileName);  
  29.                 string ffmpeg = Server.MapPath("ffmpeg.exe");//E:\视频缩略图测试\html  
  30.                 string filenames = Server.MapPath("uploadfile") + "\\" + filename + "." + imgfileExp;  
  31.                 //Response.Write("<br/>" + this.CatchImg("uploadfile/" + filename + "." + imgfileExp));//可以使用  
  32.                 CatchImg1("/uploadfile/" + fileName);//可以使用经过整理  
  33.             }  
  34.         }  
  35.   
  36.         /// <summary>  
  37.         /// 上传视频生成缩略图  
  38.         /// </summary>  
  39.         /// <param name="vFileName"></param>  
  40.         /// <param name="SmallPic"></param>  
  41.         /// <returns></returns>  
  42.         public string CatchImg(string vFileName)  
  43.         {  
  44.             try  
  45.             {  
  46.                 string ffmpeg = "ffmpeg.exe";  
  47.                 ffmpeg = Server.MapPath(ffmpeg);  
  48.                 string aaa = System.Web.HttpContext.Current.Server.MapPath(vFileName);  
  49.                 if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(vFileName))))  
  50.                 {  
  51.                     return "";  
  52.                 }  
  53.                 //获得图片相对路径/最后存储到数据库的路径,如:/Web/FlvFile/User1/00001.jpg  
  54.                 string flv_img = System.IO.Path.ChangeExtension(vFileName, ".jpg");  
  55.                 //图片绝对路径,如:D:\Video\Web\FlvFile\User1\0001.jpg  
  56.                 string flv_img_p = Server.MapPath("/uploadfile/1.jpg");  
  57.                 //截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="140x110" />   
  58.                 string FlvImgSize = "140x110";  
  59.                 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);  
  60.                 startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;  
  61.                 //此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过  
  62.                 startInfo.Arguments = " -i " + Server.MapPath(vFileName) + " -y -f image2 -t 0.1 -s " + FlvImgSize + " " + flv_img_p;  
  63.                 try  
  64.                 {  
  65.                     System.Diagnostics.Process.Start(startInfo);  
  66.                 }  
  67.                 catch  
  68.                 {  
  69.                     return "";  
  70.                 }  
  71.                 System.Threading.Thread.Sleep(4000);  
  72.                 /**/  
  73.                 ///注意:图片截取成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;  
  74.                 if (System.IO.File.Exists(flv_img_p))  
  75.                 {  
  76.                     return flv_img_p.Replace(Server.MapPath("~/"), ""); ;  
  77.                 }  
  78.                 return "";  
  79.             }  
  80.             catch  
  81.             {  
  82.                 return "";  
  83.             }  
  84.         }  
  85.   
  86.         /// <summary>  
  87.         /// 上传视频生成缩略图  
  88.         /// </summary>  
  89.         /// <param name="vFileName"></param>  
  90.         /// <param name="SmallPic"></param>  
  91.         /// <returns></returns>  
  92.         public string CatchImg1(string vFileName)  
  93.         {  
  94.             try  
  95.             {  
  96.                 string ffmpeg = "/ffmpeg.exe";  
  97.                 ffmpeg = Server.MapPath(ffmpeg);  
  98.                 if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(Server.MapPath(vFileName))))  
  99.                 {  
  100.                     return "";  
  101.                 }  
  102.                 string flv_img = System.IO.Path.ChangeExtension(vFileName, ".jpg");  
  103.                 string flv_img_p = Server.MapPath(flv_img);  
  104.                 string FlvImgSize = "140x110";  
  105.                 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);  
  106.                 startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;  
  107.                 startInfo.Arguments = " -i " + Server.MapPath(vFileName) + " -y -f image2 -t 0.1 -s " + FlvImgSize + " " + flv_img_p;  
  108.                 try  
  109.                 {  
  110.                     System.Diagnostics.Process.Start(startInfo);  
  111.                 }  
  112.                 catch  
  113.                 {  
  114.                     return "";  
  115.                 }  
  116.                 System.Threading.Thread.Sleep(4000);  
  117.                 if (System.IO.File.Exists(flv_img_p))  
  118.                 {  
  119.                     return flv_img_p.Replace(Server.MapPath("~/"), ""); ;  
  120.                 }  
  121.                 return "";  
  122.             }  
  123.             catch  
  124.             {  
  125.                 return "";  
  126.             }  
  127.         }  
  128.     }  
  129. }  

 

posted @ 2016-04-11 12:47  落叶随风飘零  阅读(1445)  评论(0编辑  收藏  举报