亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現通過ffmpeg從flv視頻文件中截圖的方法

2020-01-24 02:07:07
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現通過ffmpeg從flv視頻文件中截圖的方法。分享給大家供大家參考。具體分析如下:

需要先下載ffmpeg,這是開源的,代碼如下所示:

復制代碼 代碼如下:
using System;
using System.Configuration;
public class PublicMethod:System.Web.UI.Page
{
    public PublicMethod()
    {
    }
    //文件路徑
    public static string ffmpegtool = "ffmpeg/ffmpeg.exe";        
    public static string mencodertool = "mencoder/mencoder.exe";
    public static string flvtool = "flvtool/flvtool2.exe";//flv標記工具
    public static string upFile = "UpFiles" + "/";//上傳文件夾
    public static string imgFile = "ImgFile" + "/";//圖片文件夾
    public static string playFile = "PlayFiles" + "/";//flv文件夾
    public static string xmlFile = "xmlFiles" + "/";//xml文件夾
    public static string sizeOfImg = "240x180";//圖片的寬與高
    public static string widthOfFile = "400";//flv文件的寬度
    public static string heightOfFile = "350";//flv文件的高度
    //public static string ffmpegtool = ConfigurationManager.AppSettings["ffmpeg"];
    //public static string mencodertool = ConfigurationManager.AppSettings["mencoder"];
    //public static string upFile = ConfigurationManager.AppSettings["upfile"] + "/";
    //public static string imgFile = ConfigurationManager.AppSettings["imgfile"] + "/";
    //public static string playFile = ConfigurationManager.AppSettings["playfile"] + "/";
    //文件圖片大小
    //public static string sizeOfImg = ConfigurationManager.AppSettings["CatchFlvImgSize"];
    //文件大小
    //public static string widthOfFile = ConfigurationManager.AppSettings["widthSize"];
    //public static string heightOfFile = ConfigurationManager.AppSettings["heightSize"];
    //   // //獲取文件的名字
    private System.Timers.Timer myTimer = new System.Timers.Timer(3000);//記時器
    public static string flvName = "";
    public static string imgName = "";
    public static string flvXml = "";
    public static int pId = 0;
    public static string GetFileName(string fileName)
    {
        int i = fileName.LastIndexOf("/") + 1;
        string Name = fileName.Substring(i);
        return Name;
    }
    //獲取文件擴展名
    public static string GetExtension(string fileName)
    {
        int i = fileName.LastIndexOf(".")+1;
        string Name = fileName.Substring(i);
        return Name;
    }
    //
    #region //運行FFMpeg的視頻解碼,(這里是絕對路徑)
    /// <summary>
    /// 轉換文件并保存在指定文件夾下面(這里是絕對路徑)
    /// </summary>
    /// <param name="fileName">上傳視頻文件的路徑(原文件)</param>
    /// <param name="playFile">轉換后的文件的路徑(網絡播放文件)</param>
    /// <param name="imgFile">從視頻文件中抓取的圖片路徑</param>
    /// <returns>成功:返回圖片虛擬地址;   失敗:返回空字符串</returns>
    public void ChangeFilePhy(string fileName, string playFile, string imgFile)
    {
        //取得ffmpeg.exe的路徑,路徑配置在Web.Config中,如:<add   key="ffmpeg"   value="E:aspx1ffmpeg.exe"   /> 
        string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool);
        if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))
        {
            return;
        }
        //獲得圖片和(.flv)文件相對路徑/最后存儲到數據庫的路徑,如:/Web/User1/00001.jpg 
        string flv_file = System.IO.Path.ChangeExtension(playFile, ".flv");
        //截圖的尺寸大小,配置在Web.Config中,如:<add   key="CatchFlvImgSize"   value="240x180"   /> 
        string FlvImgSize = PublicMethod.sizeOfImg;
        System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
        FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        FilestartInfo.Arguments = " -i " + fileName + " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file;
        //ImgstartInfo.Arguments = "   -i   " + fileName + "   -y   -f   image2   -t   0.05   -s   " + FlvImgSize + "   " + flv_img;
        try
        {
            //轉換
            System.Diagnostics.Process.Start(FilestartInfo);
            //截圖
            CatchImg(fileName, imgFile);
            //System.Diagnostics.Process.Start(ImgstartInfo);
        }
        catch
        {
        }
    }
    #endregion
    #region 截圖
    public string CatchImg(string fileName,string imgFile)
    {
        //
        string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool);
        //
        string flv_img =imgFile+".jpg";
        //
        string FlvImgSize = PublicMethod.sizeOfImg;
        //
        System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
        ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        //
        ImgstartInfo.Arguments = "   -i   " + fileName + "  -y  -f  image2   -ss 2 -vframes 1  -s   " + FlvImgSize + "   " + flv_img;
        try
        {
            System.Diagnostics.Process.Start(ImgstartInfo);
        }
        catch
        {
            return "";
        }
        //
        catchFlvTool(fileName);
        if (System.IO.File.Exists(flv_img))
        {
            return flv_img;
        }
        return "";
    }
    #endregion
    #region //運行FFMpeg的視頻解碼,(這里是(虛擬)相對路徑)
    /// <summary>
    /// 轉換文件并保存在指定文件夾下面(這里是相對路徑)
    /// </summary>
    /// <param name="fileName">上傳視頻文件的路徑(原文件)</param>
    /// <param name="playFile">轉換后的文件的路徑(網絡播放文件)</param>
    /// <param name="imgFile">從視頻文件中抓取的圖片路徑</param>
    /// <returns>成功:返回圖片虛擬地址;   失敗:返回空字符串</returns>
    public void ChangeFileVir(string fileName, string playFile, string imgFile)
    {
        //取得ffmpeg.exe的路徑,路徑配置在Web.Config中,如:<add   key="ffmpeg"   value="E:/aspx1/ffmpeg.exe"   /> 
        string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool);
        if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))
        {
            return;
        }
        //獲得圖片和(.flv)文件相對路徑/最后存儲到數據庫的路徑,如:/Web/User1/00001.jpg 
        string flv_img = System.IO.Path.ChangeExtension(Server.MapPath(imgFile), ".jpg");
        string flv_file = System.IO.Path.ChangeExtension(Server.MapPath(playFile), ".flv");
        //截圖的尺寸大小,配置在Web.Config中,如:<add   key="CatchFlvImgSize"   value="240x180"   /> 
        string FlvImgSize = PublicMethod.sizeOfImg;
        System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
        FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        //此處組合成ffmpeg.exe文件需要的參數即可,此處命令在ffmpeg   0.4.9調試通過
        //ffmpeg -i F:/01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:/test.flv
        FilestartInfo.Arguments = " -i " + fileName + " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file;
        try
        {
            System.Diagnostics.Process ps = new System.Diagnostics.Process();
            ps.StartInfo = FilestartInfo;
            ps.Start();
            Session.Add("ProcessID", ps.Id);
            Session.Add("flv", flv_file);
            Session.Add("img", imgFile);
            myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Test);
            myTimer.Enabled = true;
        }
        catch
        {
        }
    }
    #endregion
    #region //運行mencoder的視頻解碼器轉換(這里是(絕對路徑))
    public void MChangeFilePhy(string vFileName, string playFile, string imgFile)
    {
        string tool = Server.MapPath(PublicMethod.mencodertool);
        //string mplaytool = Server.MapPath(PublicMethod.ffmpegtool);
        if ((!System.IO.File.Exists(tool)) || (!System.IO.File.Exists(vFileName)))
        {
            return;
        }
        string flv_file = System.IO.Path.ChangeExtension(playFile, ".flv");
        //截圖的尺寸大小,配置在Web.Config中,如:<add   key="CatchFlvImgSize"   value="240x180"   /> 
        string FlvImgSize = PublicMethod.sizeOfImg;
        System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(tool);
        FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        FilestartInfo.Arguments = " " + vFileName + " -o " + flv_file + " -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:mbd=2:mv0:trell:v4mv:cbp:last_pred=1:dia=-1:cmp=0:vb_strategy=1 -vf scale=" + widthOfFile + ":" +heightOfFile + " -ofps 12 -srate 22050";
        try
        {
            System.Diagnostics.Process ps = new System.Diagnostics.Process();
            ps.StartInfo = FilestartInfo;
            ps.Start();
            Session.Add("ProcessID", ps.Id);
            Session.Add("flv", flv_file);
            Session.Add("img", imgFile);
            //pId = ps.Id;
            //flvName = flv_file;
            //imgName = imgFile;
            myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Test);
            myTimer.Enabled = true;
        }
        catch
        {
        }
    }
    /// <summary>
    /// 記時器功能,自動保存截圖
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void myTimer_Test(object sender, System.Timers.ElapsedEventArgs e)
    {
        if (!object.Equals(null, Session["ProcessID"]))
        {
            try
            {
                System.Diagnostics.Process prs = System.Diagnostics.Process.GetProcessById(int.Parse(Session["ProcessID"].ToString()));
                if (prs.HasExited)
                {
                    CatchImg(Session["flv"].ToString(), Session["img"].ToString());
                    catchFlvTool(Session["flv"].ToString());
                    myTimer.Enabled = false;
                    myTimer.Close();
                    myTimer.Dispose();
                    Session.Abandon();
                }
            }
            catch
            {
                CatchImg(Session["flv"].ToString(), Session["img"].ToString());
                catchFlvTool(Session["flv"].ToString());
                myTimer.Enabled = false;
                myTimer.Close();
                myTimer.Dispose();
                Session.Abandon();
            }
        }
    }
    #endregion
    public string catchFlvTool(string fileName)
    {
        //
        string flvtools = Server.MapPath(PublicMethod.flvtool);
        //
        string flv_xml = fileName.Replace(".flv", ".xml").Replace(PublicMethod.upFile.Replace("/", ""), PublicMethod.xmlFile.Replace("/", ""));
        //
        System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(flvtools);
        ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        //
        ImgstartInfo.Arguments = "   " + fileName + "   -UPx   " + fileName + "  >  " + flv_xml;
        try
        {
            System.Diagnostics.Process.Start(ImgstartInfo);
        }
        catch
        {
            return "";
        }
        //
        if (System.IO.File.Exists(flv_xml))
        {
            return flv_xml;
        }
        return "";
    }
}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人亚洲福利一区二区三区| 国内精品免费午夜毛片| 亚洲国产高潮在线观看| 日韩高清电影好看的电视剧电影| 欧美在线视频免费观看| 久久视频国产精品免费视频在线| 亚洲欧美国产一本综合首页| 欧美性色视频在线| 日韩欧美一区二区三区久久| 欧美福利视频在线| 久久久人成影片一区二区三区| 中文字幕av一区中文字幕天堂| 国外成人免费在线播放| 欧美野外猛男的大粗鳮| 日韩av电影在线播放| 成人a在线视频| 精品视频一区在线视频| 国产一区二区三区在线免费观看| 国产精品美女在线| 九九热99久久久国产盗摄| 国产亚洲精品一区二555| 日韩成人中文电影| 亚洲国产高清高潮精品美女| 欧美极品少妇与黑人| 国内揄拍国内精品少妇国语| 亚洲欧美日韩中文视频| 亚洲欧美色图片| 国产91对白在线播放| 国模精品视频一区二区三区| 亚洲在线免费观看| 91精品国产综合久久香蕉| 亚洲视频第一页| 亚洲在线视频福利| 日韩欧美中文字幕在线播放| 国产深夜精品福利| 精品国内产的精品视频在线观看| 亚洲社区在线观看| 久热爱精品视频线路一| 狠狠躁天天躁日日躁欧美| 国产日韩av高清| 国产精品入口尤物| 亚洲图片在区色| 久久久999国产精品| 国产精品高潮呻吟久久av黑人| 51精品国产黑色丝袜高跟鞋| 亚洲视频一区二区三区| 欧美日韩国产丝袜另类| 国产精品免费久久久久久| 亚洲福利视频网| 91av在线国产| 国产精品夜间视频香蕉| 亚洲最大中文字幕| 国产精品久久久久久久天堂| 国产精品午夜国产小视频| 欧美综合在线第二页| 欧美激情亚洲自拍| 日韩欧美aⅴ综合网站发布| 热99精品里视频精品| 亚洲va国产va天堂va久久| 欧美激情亚洲自拍| 午夜精品理论片| 成人福利免费观看| 亚洲丁香婷深爱综合| 国产精品pans私拍| 国产精品爱久久久久久久| 亚洲最大成人免费视频| 国产www精品| 欧美美女操人视频| 久久精品亚洲热| 亚洲欧美在线一区二区| 欧美国产极速在线| 2021国产精品视频| 久久伊人精品视频| 91社区国产高清| 性视频1819p久久| 亚洲开心激情网| 精品国产91久久久久久老师| 成人欧美在线视频| 久久亚洲精品网站| 色综合视频一区中文字幕| 亚洲xxxx视频| 国产精品情侣自拍| 国产精品999999| 欧美高清视频在线| 国产精品久久色| 日本一区二区三区四区视频| 少妇高潮 亚洲精品| 日本道色综合久久影院| 亚洲国产精品久久久久| 国产成人精品久久二区二区| 色哟哟网站入口亚洲精品| 91久久精品在线| 亚洲字幕在线观看| 日韩视频免费大全中文字幕| 亚洲精品99999| 中文字幕一区二区三区电影| 欧美另类在线播放| 久久影视电视剧免费网站| 欧美国产日韩精品| 亚州欧美日韩中文视频| 日本三级久久久| 国产精品久久999| 国产精品1区2区在线观看| 国产91av在线| 狠狠躁夜夜躁人人爽超碰91| 精品久久久久久久久久久久| 91精品免费久久久久久久久| 国产精品视频白浆免费视频| 欧美巨大黑人极品精男| 岛国视频午夜一区免费在线观看| 大量国产精品视频| 国产一区二区三区18| 欧美性猛交99久久久久99按摩| 九色91av视频| 国产精品久久不能| 日韩在线观看免费高清完整版| 日韩欧美高清视频| 日韩欧美中文字幕在线播放| 亚洲国产欧美自拍| 精品久久久久久久久久久久| 黄网站色欧美视频| 欧美日韩一区二区三区| 国产一区二区三区在线免费观看| 久久99久久久久久久噜噜| 久久影视电视剧免费网站清宫辞电视| 成人444kkkk在线观看| 亚州国产精品久久久| 亚洲精品mp4| 亚洲第一页在线| 午夜精品久久久久久久99热浪潮| 黑人精品xxx一区一二区| 欧美在线视频免费| 国产亚洲aⅴaaaaaa毛片| 欧美人在线观看| 欧美激情极品视频| 久久综合伊人77777| 日韩欧美亚洲成人| 91精品久久久久久久久久久久久久| 亚洲美女在线观看| 亚洲最大在线视频| 国产丝袜一区二区三区| 国产在线视频一区| 97精品视频在线播放| 国产福利精品av综合导导航| 国产在线视频不卡| 国产丝袜一区二区三区免费视频| 日韩福利伦理影院免费| 亚洲人av在线影院| 久久亚洲精品一区二区| 91精品国产91久久久久久不卡| 国产亚洲a∨片在线观看| 亚洲a在线观看| 日本不卡视频在线播放| 色一区av在线| 成人av资源在线播放| 这里精品视频免费| 欧美一级片在线播放| 色综合久久88| 久久久97精品| 国产精品亚洲综合天堂夜夜| 久久久亚洲国产| 国产精品久久999| 久久久久久久久久国产精品| 欧美一级淫片丝袜脚交|