在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#文件解析和处理 → mencoder和ffmpeg 转换视频格式以及 视频截图功能

mencoder和ffmpeg 转换视频格式以及 视频截图功能

C#文件解析和处理

下载此实例
  • 开发语言:C#
  • 实例大小:0.71M
  • 下载次数:40
  • 浏览次数:698
  • 发布时间:2013-08-24
  • 实例类别:C#文件解析和处理
  • 发 布 人:crazycode
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 视频 截图 转换

实例介绍

【实例简介】

【实例截图】

【核心代码】

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page 
{
    // 扩展名定义
    string[] strArrFfmpeg = new string[] {"asf","avi","mpg","3gp","mov" };
    string[] strArrMencoder = new string[] {"wmv","rm","rmvb" };
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    //
    protected void btnUpload_Click(object sender, EventArgs e)
    {
        
        string upFileName = "";
        if (this.FileUpload1.HasFile)
        {
            string fileName = PublicMethod.GetFileName(this.FileUpload1.FileName);// GetFileName();
            if ((string)Session["file"] == fileName)
            {
                return;
            }
            upFileName = Server.MapPath(PublicMethod.upFile   fileName);
            this.FileUpload1.SaveAs(upFileName);
            string saveName = DateTime.Now.ToString("yyyyMMddHHmmssffff") ;
            string playFile = Server.MapPath(PublicMethod.playFile   saveName);
            string imgFile = Server.MapPath(PublicMethod.imgFile   saveName);
            //System.IO.File.Copy(Server.MapPath(PublicMethod.playFile   "00000002.jpg"), Server.MapPath(PublicMethod.imgFile "aa.jpg"));
            PublicMethod pm = new PublicMethod();
            string m_strExtension = PublicMethod.GetExtension(this.FileUpload1.PostedFile.FileName).ToLower();
            if (m_strExtension == "flv")
            {//直接拷贝到播放文件夹下
                System.IO.File.Copy(upFileName, playFile ".flv");
                pm.CatchImg(upFileName, imgFile);
            }
            string Extension = CheckExtension(m_strExtension);
            if (Extension == "ffmpeg")
            {
                pm.ChangeFilePhy(upFileName, playFile, imgFile);
            }
            else if (Extension == "mencoder")
            {
                 pm.MChangeFilePhy(upFileName, playFile, imgFile);
            }
            InsertData(this.txtTitle.Text, fileName,saveName);
            Session["file"] = fileName;
        }
        
    }
    //删除视频
    protected void btnDelete_Click(object sender, EventArgs e)
    {
        LinkButton btnlink = (LinkButton)sender;
        string FID=btnlink.CommandArgument;
        string sqlstr = "delete from Media where FID=@FID";
        SqlDataSource1.DeleteCommand = sqlstr;
        SqlDataSource1.DeleteCommandType = SqlDataSourceCommandType.Text;
        SqlDataSource1.DeleteParameters.Add("FID",FID);
        SqlDataSource1.Delete();
    }
    //
    private string CheckExtension(string extension)
    {
        string m_strReturn = "";
        foreach (string var in this.strArrFfmpeg)
	    {
            if (var == extension)
            {
                m_strReturn = "ffmpeg"; break;
            }
	    }
        if (m_strReturn == "")
        {
            foreach (string var in strArrMencoder)
            {
                if (var == extension)
                {
                    m_strReturn = "mencoder"; break;
                }
            }
        }
        return m_strReturn;
    }
    #region 插入数据到数据库中
    private void InsertData(string MediaName,string fileName,string saveName)
    {
        //string name=fileName.Substring(0, fileName.LastIndexOf('.'));
        string imgName = saveName   ".jpg";//图片文件名;
        string playName = saveName   ".flv";
        string sqlstr = "insert into Media(FMediaName,FMediaUpPath,FMediaPlayPath,FMediaImgPath) values(@MName,@MUppath,@MPlaypath,@MImgpath)";
        //string constr = ConfigurationManager.ConnectionStrings["sqlcon"].ToString();
        SqlDataSource1.InsertCommand = sqlstr;
        SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.Text;// CommandType.Text;
        SqlDataSource1.InsertParameters.Add("MName",MediaName);
        SqlDataSource1.InsertParameters.Add("MUppath",PublicMethod.upFile fileName);
        SqlDataSource1.InsertParameters.Add("MPlaypath",PublicMethod.playFile playName);
        SqlDataSource1.InsertParameters.Add("MImgpath",PublicMethod.imgFile imgName);
        SqlDataSource1.Insert();
    }
    #endregion
    #region //运行tool的视频解码,
    //   <summary>   
        ///   @从视频文件截图,生成在视频文件所在文件夹   
        ///   在Web.Config   中需要两个前置配置项:   
        ///   1.ffmpeg.exe文件的路径   
        ///   <add   key="ffmpeg"   value="E:\51aspx\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,string playFile,string imgFile)
        {
            //取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add   key="ffmpeg"   value="E:\51aspx\ffmpeg.exe"   />   
            
           // string tool = PublicMethod.ffmpegtool;
            string tool = PublicMethod.mencodertool;
            tool = Server.MapPath(tool);
            if ((!System.IO.File.Exists(tool)) || (!System.IO.File.Exists(vFileName)))
            {
                return "";
            }

            //获得图片和(.flv)文件相对路径/最后存储到数据库的路径,如:/Web/User1/00001.jpg   
            string flv_img = System.IO.Path.ChangeExtension(imgFile, ".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(tool);
            System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(tool);

            FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            //此处组合成tool.exe文件需要的参数即可,此处命令在tool   0.4.9调试通过 
            //tool -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv
           // FilestartInfo.Arguments = " -i "   vFileName   " -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 "   flv_file;
           // ImgstartInfo.Arguments = "   -i   "   vFileName   "   -y   -f   image2   -t   0.001   -s   "   FlvImgSize   "   "   flv_img;
            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=512:-3 -ofps 12 -srate 22050";
            try
            {
                System.Diagnostics.Process.Start(FilestartInfo);
                System.Diagnostics.Process.Start(ImgstartInfo);
            }
            catch
            {
                return "";
            }

            ///注意:图片截取成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;   
            ///这儿需要延时后再检测,我服务器延时8秒,即如果超过8秒图片仍不存在,认为截图失败;   
            ///此处略去延时代码.如有那位知道如何捕捉tool.exe截图失败消息,请告知,先谢过!
            if (System.IO.File.Exists(flv_img))
            {
                return flv_img;
            }

            return "";
        }
   //
    #endregion
}

标签: 视频 截图 转换

实例下载地址

mencoder和ffmpeg 转换视频格式以及 视频截图功能

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警