上傳視頻生成縮略圖


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM