`
hejiaxun
  • 浏览: 4201 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

【文件上传】03.自动为视频文件生成缩略图

c# 
阅读更多
在项目推进的过程中,力求做到前台展现和后台管理的分离,文件上传属于后台管理的功能,而关于文件的删除,名称的更改等等,都已一一解决。

接下来需要完成前台展示的功能。

目标效果是希望在前台加载页面时,自动为视频文件截取缩略图,自动获取视频文件的时长,这里用到了一个插件,ffmpeg.exe。

为此在前台的aspx.cs文件中写了两个自定义方法:

        /// <param name="VideoName">视频文件pic/guiyu.mov</param>
        /// <param name="WidthAndHeight">图片的尺寸如:240*180</param>
        /// <param name="CutTimeFrame">开始截取的时间如:"1"</param>
        #region 从视频画面中截取一帧画面为图片
        public string GetPicFromVideo(string VideoName, string WidthAndHeight, string CutTimeFrame, string PicName)
        {
            string ffmpeg = HttpContext.Current.Server.MapPath("~/Source/Scripts/ffmpeg/ffmpeg.exe");
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.Arguments = " -i " + 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;
            }
        }
        #endregion



        #region 获取视频长度
        /// <summary>
        /// 
        /// </summary>
        /// <param name="ffmpegfile">ffmpeg.exe路径</param>
        /// <param name="sourceFile">视频文件路径</param>
        /// <returns></returns>
        public string GetVideoDuration(string sourceFile)
        {
            string ffmpegfile = HttpContext.Current.Server.MapPath("~/Source/Scripts/ffmpeg/ffmpeg.exe");
            using (System.Diagnostics.Process ffmpeg = new System.Diagnostics.Process())
            {
                String duration;  
                String result;  
                StreamReader errorreader;  
                ffmpeg.StartInfo.UseShellExecute = false;
                ffmpeg.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                ffmpeg.StartInfo.RedirectStandardError = true;
                ffmpeg.StartInfo.FileName = ffmpegfile;
                ffmpeg.StartInfo.Arguments = "-i " + sourceFile;
                ffmpeg.Start();
                errorreader = ffmpeg.StandardError;
                ffmpeg.WaitForExit();
                result = errorreader.ReadToEnd();
                duration = result.Substring(result.IndexOf("Duration: ") + ("Duration: ").Length, ("00:00:00").Length);
                return duration;
            }
        }
        #endregion


这样,只要在pageLoad事件中调用这两个方法,传入参数,即可为视频生成缩略图。
这里遍历视频并为视频生成视频信息没有使用数据库而是在该视频文件目录下创建XML文档。

        protected void Page_Load(object sender, EventArgs e)
        {
            string mainPath = MapPath(Common.ComFunction.GetConfig("UpLoadPath")) + "Video\\Eco";
            string[] Directories = Directory.GetDirectories(mainPath);
            List<VideoModelExtension> _list = new List<VideoModelExtension>();
            for (int i = 0; i < Directories.Length; i++)
            {

                string dairs = Directories[i];
                string[] n = dairs.Split('\\');
                int x = n.Length - 1;
                string name = n[x];
                string XmlConfig = dairs + "\\XMLConfig.xml";//配置文件
                string AbPath = dairs + "\\" + name + ".flv"; //获取视频文件的绝对路径
                string PicName = AbPath + ".jpg";  //指定缩略图文件的名称
                VideoModelExtension model = new VideoModelExtension();
                if (!File.Exists(XmlConfig))
                {
                    XmlDocument xmldoc = new XmlDocument();
                    //xml文档声明
                    XmlDeclaration xmldecl;
                    xmldecl = xmldoc.CreateXmlDeclaration("1.0", "utf-8", null);
                    xmldoc.AppendChild(xmldecl);
                    //增加跟节点
                    XmlElement xmlelem = xmldoc.CreateElement("", "EcoVideo", "");
                    xmldoc.AppendChild(xmlelem);
                    //获取根节点
                    XmlNode root = xmldoc.SelectSingleNode("EcoVideo");
                    //添加子节点 和属性
                    //名称
                    xmlelem = xmldoc.CreateElement("Name");
                    xmlelem.SetAttribute("Value", name);
                    root.AppendChild(xmlelem);
                    //名称
                    xmlelem = xmldoc.CreateElement("Directory");
                    xmlelem.SetAttribute("Value", name);
                    root.AppendChild(xmlelem);
                    ///创建日期
                    xmlelem = xmldoc.CreateElement("DateAdd");
                    xmlelem.SetAttribute("Value", DateTime.Now.ToLongDateString());
                    root.AppendChild(xmlelem);
                    ///视频地址
                    xmlelem = xmldoc.CreateElement("Path");
                    xmlelem.SetAttribute("Value", name + "/" + name + ".flv");
                    root.AppendChild(xmlelem);
                    ///添加评分
                    xmlelem = xmldoc.CreateElement("Count");
                    xmlelem.SetAttribute("Value", "0");
                    root.AppendChild(xmlelem);
                    ///添加时长
                    xmlelem = xmldoc.CreateElement("Duration");
                    xmlelem.SetAttribute("Value", model.GetVideoDuration(AbPath));
                    root.AppendChild(xmlelem);
                    //添加缩略图
                    xmlelem = xmldoc.CreateElement("img");
                    xmlelem.SetAttribute("Value", model.GetPicFromVideo(AbPath, "220*220", "5", PicName).Split('\\').Last());
                    root.AppendChild(xmlelem);
                    //添加简介
                    xmlelem = xmldoc.CreateElement("Description");
                    xmlelem.SetAttribute("Value", "无");
                    root.AppendChild(xmlelem);
                    xmldoc.Save(XmlConfig);
                }
                //读取配置参数
                XmlDocument xmldocread = new XmlDocument();
                xmldocread.Load(XmlConfig);
                model.Name = ((XmlElement)xmldocread.SelectSingleNode("EcoVideo").SelectSingleNode("Name")).GetAttribute("Value");
                model.Directory = ((XmlElement)xmldocread.SelectSingleNode("EcoVideo").SelectSingleNode("Directory")).GetAttribute("Value");
                model.Day = ((XmlElement)xmldocread.SelectSingleNode("EcoVideo").SelectSingleNode("DateAdd")).GetAttribute("Value");
                model.count = ((XmlElement)xmldocread.SelectSingleNode("EcoVideo").SelectSingleNode("Count")).GetAttribute("Value");
                model.Duration = ((XmlElement)xmldocread.SelectSingleNode("EcoVideo").SelectSingleNode("Duration")).GetAttribute("Value");
                model.Path = ((XmlElement)xmldocread.SelectSingleNode("EcoVideo").SelectSingleNode("Path")).GetAttribute("Value");
                model.img = name + "/" + ((XmlElement)xmldocread.SelectSingleNode("EcoVideo").SelectSingleNode("img")).GetAttribute("Value");
                model.Description = ((XmlElement)xmldocread.SelectSingleNode("EcoVideo").SelectSingleNode("Description")).GetAttribute("Value");
                _list.Add(model);

            }
            _list = _list.OrderByDescending(a => a.Day).ToList();
            this.ReptVideo.DataSource = _list;
            this.ReptVideo.DataBind();
        }


前台HTML节点代码这里就不写了,总之ffmpeg是个很强劲的视频转换插件,当然你必须要对这个文件是百分之百信任的,否则你的站点可能存在潜在的风险。


分享到:
评论

相关推荐

    pdf生成缩略图

    pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图pdf生成缩略图

    上传功能修正已知安全bug(限制上传文件类型)2.自动生成缩略图(大小可在config.php中设置)3.多种排序方法4.限制原始图的大小和宽高

    上传功能修正已知安全bug(限制上传文件类型)2.自动生成缩略图(大小可在config.php中设置)3.多种排序方法4.限制原始图的大小和宽高

    生成缩略图插件ver1.2 for PHPCMS3.0.rar

    功能: 该插件能自动生成图片缩略图,同时每次上传图片都能选择是否生成缩略图及其大小,上传后图片链接地址自动指向原图并在原图上套用HTML边框. ver1.2 : 同步更新官方12月7日最新版本PHPCMS。 ver1.1 修复...

    lx_photoshow_v1.1.rar_asp 缩略图_banner

    2.自动按指定的尺寸生成缩略图(需要服务器支持) 3.如果服务器不支持生成缩略图,则可以自己设置是否上传缩略图(为了更快浏览速度,我们建议您上传) 4.无组件上传功能 5.评论功能,可在后台设置是否开启评论 6.可在线...

    XUploadFiles 是一个用于辅助网站进行文件上传的客户端插件,同时能够自动生成图片的缩略图。   XUploadFiles 提供了方便的文件管理模式,以及上传大文件的功能。支持单文件上传、多文件上传、限制文件上传的大小、限制文件上传的类型

    XUploadFiles 是一个用于辅助网站进行文件上传的客户端插件,同时能够自动生成图片的缩略图。 XUploadFiles 提供了方便的文件管理模式,以及上传大文件的功能。支持单文件上传、多文件上传、限制文件上传的大小、...

    asp上传下载控件,生成缩略图

    asp上传下载控件,自动生成缩略图,可以读写INI文件调用格式Dim MyControlSet MyControl = server.createObject(“kinsoft.fileupload”) 保存上存文件Savefile(path; overwrite)参数:path:文件保存的路径...

    php 根据url自动生成缩略图并处理高并发问题

    服务器生成缩略图的时机一般分为两种: 1.上传文件时生成 优点:上传时就已经生成需要的缩略图,读取时不需要再判断,减少cpu运算。 缺点:当缩略图尺寸变化时或新增尺寸时,需要重新生成所有的缩略图。 2.访问时...

    爱雪儿文件上传系统 v3.0

    基于[iXuEr CMS]架构设计制作,方便的调用接口,方便的反馈参数调用接口,主动选择是否显示文件上传进度,为每个上传的文件提供属性接口,可以设置某个文件是否生成缩略图或者添加水印,文件上传添加了验证码机制,...

    阿赛文件上传系统 5.0.rar

    阿赛文件上传系统,一个ASP文件,20KB左右,纯ASP无组件上传程序,支持任意扩展名文件的自定义上传,可以控制上传大小,上传至指定文件夹,是否覆盖上传,是否重命名、可使用ASPJPEG组件进行缩图、加水印等各种操作...

    thinkphp5上传图片及生成缩略图公共方法(分享)

    直接上代码,可以写在... * 自动生成的缩略图保存在$filePath文件夹下面的thumb文件夹里,自动创建 * @return array 一个是图片路径,一个是缩略图路径,如下: * array(2) { [img] =&gt; string(57) uploads/img/20

    大文件上传插件 XUploadFiles

    支持单文件上传、多文件上传、限制文件上传的大小、限制文件上传的类型,同时支持上传进度条的显示和图片缩略图的自动生成。  XUploadFiles 客户端插件属于一个安全插件,对用户是安全的(不会自动选择、自动上传...

    PGRFileManager文件管理器 2.1.0.zip

    对于图片文件会自动生成缩略图,对于文本文件可以利用CKEditor和FCKEdito进行编辑。。 产品特点: •添加/移动/重命名/删除文件夹 •下载单个/多个文件 •上传单个/多个文件 •移动单个/多个文件 •...

    Java支持缩略图的图片上传类.rar

    与大家分享一个比较完整的Java图片上传类,这个类主要功能是完成图片上传,另外还支持自动生成和保存缩略图,使用获得当前文件路径的方法,通过当前日期生成文件名,我觉得这个类对于WEB开发应用还是很实用的。

    PGRFileManager文件管理器 v2.1.0.zip

    对于图片文件会自动生成缩略图,对于文本文件可以利用CKEditor和FCKEdito进行编辑。。   产品特点: •添加/移动/重命名/删除文件夹 •下载单个/多个文件 •上传单个/多个文件 •移动单个/多个文件 •...

    CF Image host v1.41 简繁汉化版.rar

    在提供图片外链方面相当强大,各种大小的缩略图,完整图片的链接。适合论坛的适合博客的应有尽有。 CF Imges1.41功能: 1.图片上传外链 2.缩略图、原图 3.流量统计、流量控制、单文件大小控制 4.后台控制 5....

    CF Image host v1.4.1 简繁汉化版

    在提供图片外链方面相当强大,各种大小的缩略图,完整图片的链接。适合论坛的适合博客的应有尽有。 CF Imges1.41功能:1.图片上传外链2.缩略图、原图3.流量统计、流量控制、单文件大小控制4.后台控制5.自由水印6....

    ASP.NET相册控件(c#)

    3.简化图片添加过程,直接上传图片到图片目录即可,相册自动获取、遍历新上传的图片,并生成缩略图 4.增加多页跳转功能 5.简单易用,直接插入控件到你的页面,并进行相关设置即可使用 PhotoAlbum 控件说明: 1.该...

    Web图片上传控件开发文档-JSP版

    3. 支持自动生成缩略图。 4. 支持图片格式批量转换功能。 5. 支持文件批量上传。 6. 支持文件拖拽操作。 7. 支持自定义上传信息。 8. 支持文件拖拽排序功能。 9. 支持文件格式批量转换。 10. 支持打开默认文件夹功能...

    inso相册 v1.0.1

    5.自动生成缩略图(大小可在config.php中设置) 6.限制原始图的大小和宽高 7.可选择覆盖或者不覆盖已存在同名文件 8.目录直读图片文件 9.增加IP统计和在线人数 10.统计图片点击次数 11.FTP批量上传,程序批量...

Global site tag (gtag.js) - Google Analytics