隨筆 - 8  文章 - 55  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          朋友的Blog

          最新評論

          閱讀排行榜

          評論排行榜

          前公司在制作播客系統(Web程序)中,用到從視頻截圖功能.

          下邊是截圖CatchImg方法,可從大多數的視頻文件中截圖成功,大家可測試;
          如果截圖不成功,大多是因為視頻本身的問題,如編碼標準或加了密.
          但從在線錄制的視頻Flv文件中截圖,還未發現截圖失敗;

          /// <summary>
          /// @從視頻文件截圖,生成在視頻文件所在文件夾
          /// 在Web.Config 中需要兩個前置配置項:
          /// 1.ffmpeg.exe文件的路徑
          /// <add key="ffmpeg" value="E:\ffmpeg\ffmpeg.exe" />
          /// 2.截圖的尺寸大小
          /// <add key="CatchFlvImgSize" value="240x180" />
          /// 3.視頻處理程序ffmpeg.exe
          /// </summary>
          /// <param name="vFileName">視頻文件地址,如:/Web/FlvFile/User1/00001.Flv</param>
          /// <returns>成功:返回圖片虛擬地址; 失敗:返回空字符串</returns>
          public string CatchImg(string vFileName)
          {
          //取得ffmpeg.exe的路徑,路徑配置在Web.Config中,如:<add key="ffmpeg" value="E:\ffmpeg\ffmpeg.exe" />
          string ffmpeg=System.Configuration.ConfigurationSettings.AppSettings["ffmpeg"];

          if ( (!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(vFileName)) )
          {
          return "";
          }

          //獲得圖片相對路徑/最后存儲到數據庫的路徑,如:/Web/FlvFile/User1/00001.jpg
          string flv_img = System.IO.Path.ChangeExtension(vFileName,".jpg") ;

          //圖片絕對路徑,如:D:\Video\Web\FlvFile\User1\0001.jpg
          string flv_img_p = HttpContext.Current.Server.MapPath(flv_img);

          //截圖的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" />
          string FlvImgSize=System.Configuration.ConfigurationSettings.AppSettings["CatchFlvImgSize"];

          System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
          startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

          //此處組合成ffmpeg.exe文件需要的參數即可,此處命令在ffmpeg 0.4.9調試通過
          startInfo.Arguments = " -i " + vFileName + " -y -f image2 -t 0.001 -s " + FlvImgSize + " " + flv_img_p ;

          try
          {
          System.Diagnostics.Process.Start(startInfo);
          }
          catch
          {
          return "";
          }

          ///注意:圖片截取成功后,數據由內存緩存寫到磁盤需要時間較長,大概在3,4秒甚至更長;
          ///這兒需要延時后再檢測,我服務器延時8秒,即如果超過8秒圖片仍不存在,認為截圖失敗;
          ///此處略去延時代碼.如有那位知道如何捕捉ffmpeg.exe截圖失敗消息,請告知,先謝過!
          if ( System.IO.File.Exists(flv_img_p))
          {
          return flv_img;????????????????????????????????????????????
          }

          return "";
          }

          順便也探討個問題,就是我無法從ffmpeg.exe捕捉截圖失敗消息~
          不知大家可否有辦法取得,我目前只能通過檢測圖片是否生成來判斷成功與否,但時間較慢,因為這個檢測程序就讓用戶要多等大概4,5秒時間.


          asp中,通過wsh也可以完成截圖功能

          '關于什么是WSH可參考微軟網站:
          'http://www.microsoft.com/china/technet/columns/scripts/sg1002.asp
          'http://www.microsoft.com/china/technet/windows2000/whitebook/scrphost.asp


          <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
          <%
          '=============================程序準備===============================

          'cmd.exe是win2000的內置命令文件,在\winnt\system32目錄中
          'winrar.exe是WinRAR的核心程序

          '=============================程序開始===============================

          Dim? Cmd_path,Target_path,Source_path,Shell,Str_cmd,Output

          Cmd_path=Server.MapPath("cmd_file")
          'rar.exe,cmd.exe的存放路徑

          Source_path=Server.MapPath("test.rar")
          '要解壓的文件及其路徑

          Target_path=Server.MapPath(".")
          '解壓后的目錄

          Set Shell=Server.Createobject("Wscript.Shell")
          '關于什么是WSH可參考微軟網站:
          'http://www.microsoft.com/china/technet/columns/scripts/sg1002.asp
          'http://www.microsoft.com/china/technet/windows2000/whitebook/scrphost.asp

          Str_cmd=Cmd_path & "\cmd.exe /c " & Cmd_path & "\winrar.exe x -o+ -p- "
          'cmd.exe帶/c參數是指執行字符串指定的命令后終止。
          'winrar.exe所帶的參數"x -o+ -p-"分別指"以完整路徑名稱從壓縮文件解壓、覆蓋已存在的文件、不詢問密碼"。
          '更多Winrar參數/開關在Winrar的幫助中有非常詳細的說明。

          Str_cmd=Str_cmd & Source_path & " " & Target_path
          'Response.Write(Str_cmd)

          Output=Shell.run(Str_cmd,1,true)

          If Output = 0 Then
          ? Response.write("解壓成功!")
          Else
          ? Response.write("解壓失敗!")
          End If

          %>

          posted on 2006-06-28 11:21 blog搬家了--[www.ialway.com/blog] 閱讀(1345) 評論(3)  編輯  收藏 所屬分類: ffmpeg

          FeedBack:
          # re: asp中,通過wsh也可以完成截圖功能 2006-10-14 21:13 夢兒``
          這是你的么?
          真不知道你這么厲害`
          這段時間都在做什么,都N久沒有看到過你了?
          聯系不到你人```  回復  更多評論
            
          # re: asp中,通過wsh也可以完成截圖功能 2006-10-16 09:10 乞怪豬在學習!
          這BLOG是我的,這個東東不是我寫的是我轉別人學習用的,

          你是誰??sorrry!我不記得你了??:(  回復  更多評論
            
          # re: asp中,通過wsh也可以完成截圖功能 2006-10-26 12:42 wb
          注意,你這個好像不是通過asp/wsh解圖,而是通過asp/wsh解壓縮文件  回復  更多評論
            
          主站蜘蛛池模板: 错那县| 太湖县| 疏附县| 荆州市| 泰来县| 鹿邑县| 南江县| 建宁县| 邹城市| 汾阳市| 满城县| 周至县| 吴桥县| 揭阳市| 洪湖市| 高平市| 宜都市| 石柱| 来安县| 黄大仙区| 滨州市| 岐山县| 尚义县| 万州区| 沁源县| 肇州县| 波密县| 都兰县| 满城县| 沧州市| 凌海市| 锡林郭勒盟| 阜南县| 华安县| 利川市| 绥棱县| 秦皇岛市| 星座| 饶平县| 逊克县| 吴忠市|