隨筆 - 8  文章 - 55  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          朋友的Blog

          最新評論

          閱讀排行榜

          評論排行榜

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

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

          /// <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 "";
          }

          //獲得圖片相對路徑/最后存儲到數(shù)據(jù)庫的路徑,如:/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文件需要的參數(shù)即可,此處命令在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 "";
          }

          ///注意:圖片截取成功后,數(shù)據(jù)由內存緩存寫到磁盤需要時間較長,大概在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可參考微軟網(wǎng)站:
          '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可參考微軟網(wǎng)站:
          '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參數(shù)是指執(zhí)行字符串指定的命令后終止。
          'winrar.exe所帶的參數(shù)"x -o+ -p-"分別指"以完整路徑名稱從壓縮文件解壓、覆蓋已存在的文件、不詢問密碼"。
          '更多Winrar參數(shù)/開關在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] 閱讀(1352) 評論(3)  編輯  收藏 所屬分類: ffmpeg

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

          你是誰??sorrry!我不記得你了??:(  回復  更多評論
            
          # re: asp中,通過wsh也可以完成截圖功能 2006-10-26 12:42 wb
          注意,你這個好像不是通過asp/wsh解圖,而是通過asp/wsh解壓縮文件  回復  更多評論
            
          主站蜘蛛池模板: 彰化县| 昭苏县| 龙川县| 彭阳县| 河西区| 崇义县| 福海县| 桃园市| 寻乌县| 漳州市| 安化县| 永春县| 沁阳市| 五常市| 九江市| 巩义市| 扎赉特旗| 平乡县| 都兰县| 雷州市| 原平市| 尉犁县| 平原县| 拜城县| 增城市| 通州市| 阳山县| 龙海市| 陆良县| 镇江市| 巴东县| 孝义市| 丽水市| 昭平县| 普安县| 府谷县| 勐海县| 瑞丽市| 彭山县| 秦安县| 湟源县|