上传视频生成缩略图

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); //移动文件  
           }  
       }  

 

posted @ 2018-04-28 14:25  AdolphChen  阅读(2036)  评论(0编辑  收藏  举报