C# 視頻上傳之使用ffmpeg截取視頻第一幀當做背景圖


 

1、在官網下載ffmpeg,http://ffmpeg.org/download.html

 我下載的是Windows 64的,如系統是Windows 32,請下載Windows 32-bit

  下載完成后解壓,得到如下圖文件:

 打開bin文件:

 bin文件夾所有.dll.exe文件復制到項目bin文件夾下。

  如果想通過cmd命令截取,需要ffmpeg.exe的路徑配置到環境變量里的Path,可參考https://www.cnblogs.com/hbtmwangjin/articles/9519848.html  

  我這里是通過代碼截取第一幀圖片,保存到后台,並把圖片路徑保存到數據庫中,沒有配置環境變量也可以操作。

  截取圖片方法:

 

/// <summary>
        /// 從視頻畫面中截取一幀畫面為圖片
        /// </summary>
        /// <param name="videoName">視頻文件路徑pic/123.MP4</param>
        /// <param name="widthAndHeight">圖片的尺寸如:240*180</param>
        /// <param name="cutTimeFrame">開始截取的時間如:"1s"</param>
        /// <returns>返回圖片保存路徑</returns>
        public static string GetPicFromVideo(string videoName, string widthAndHeight, string cutTimeFrame)
        {
            var vdoName = videoName.Substring(videoName.LastIndexOf("/") + 1);
            var fileName = vdoName.Split('.')[0];
            var dtime = DateTime.Now.ToString("yyyy-MM-dd");
            var basePath = System.Web.HttpContext.Current.Server.MapPath("~");
            var ImgPath = basePath + "upload\\Images\\" + dtime;
            //ffmpeg.exe路徑
            var ffmpeg = basePath + "bin\\ffmpeg.exe";
            var srcName = basePath + videoName.Replace("/", "\\");
            
            if (!Directory.Exists(ImgPath))
            {
                Directory.CreateDirectory(ImgPath);
            }
            //保存截取圖片后路徑
            var objName = " "+ ImgPath + "\\"+  fileName + ".jpg";
            var startInfo = new ProcessStartInfo(ffmpeg);
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.Arguments = " -i " + srcName + " -y -f image2 -ss " + cutTimeFrame + " -t 0.001 -s " + widthAndHeight + " " + objName;
            //startInfo.UseShellExecute = false;
            //startInfo.CreateNoWindow = true;
            try
            {
                Process.Start(startInfo);
                //返回圖片保存路徑
                return "/upload/Images/" + dtime+"/" + fileName + ".jpg";
            }
            catch (Exception re)
            {
                //Log.WriteLog(re.Message);
                return "";
            }
        }

 

調用:

var  gb_img_scr = PicFromVideo.GetPicFromVideo(src, "160*300", "1");

 


免責聲明!

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



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