日期:2014-05-18  浏览次数:20863 次

C#如何获取mp4文件的时长?
我用了各种办法,在win7下都是可以获得的,但是在xp下就是获取不到,求大虾指点。

------解决方案--------------------
ffmpeg -i获取视频信息
------解决方案--------------------
这是我项目中用的一个ffmepg类。。。
C# code


using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.IO;
using System.Web;
namespace AUV5.Common
{
    public class FormatConverter
    {
        //FFmpeg配置信息
        private string ffmpegpath = "/FFmpeg/ffmpeg.exe";//FFmpeg的服务器路径
        private string imgsize = "400*300";     //视频截图大小
        private string videosize = "480*360"; //视频大小
        #region 也可将信息添加到配置文件中
        //public static string ffmpegpath = ConfigurationManager.AppSettings["ffmpeg"];
        //public static string imgsize = ConfigurationManager.AppSettings["imgsize"];
        //public static string videosize = ConfigurationManager.AppSettings["videoize"];
        #endregion

        private string destVideo = "";

        /// <summary>
        /// 视频路径
        /// </summary>
        public string DestVideo
        {
            get { return destVideo; }
            set { destVideo = value; }
        }
        private string destImage = "";

        /// <summary>
        /// 图片路径
        /// </summary>
        public string DestImage
        {
            get { return destImage; }
            set { destImage = value; }
        }

        /// <summary>
        /// 视频长度
        /// </summary>
        public string VideoLength { get; set; }

        //文件类型
        public enum VideoType
        {
            [Description(".avi")]
            AVI,
            [Description(".mov")]
            MOV,
            [Description(".mpg")]
            MPG,
            [Description(".mp4")]
            MP4,
            [Description(".flv")]
            FLV
        }
        /// <summary>
        /// 返回枚举类型的描述信息
        /// </summary>
        /// <param name="myEnum"></param>
        /// <returns></returns>
        private string GetDiscription(System.Enum myEnum)
        {

            System.Reflection.FieldInfo fieldInfo = myEnum.GetType().GetField(myEnum.ToString());
            object[] attrs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
            if (attrs != null && attrs.Length > 0)
            {
                DescriptionAttribute desc = attrs[0] as DescriptionAttribute;
                if (desc != null)
                {
                    return desc.Description.ToLower();
                }
            }
            return myEnum.ToString();
        }
        //将GetDesCription定义为扩展方法,需.net3.5
        //public static string Description(this Enum myEnum)
        //{
        //    return GetDiscription(myEnum);
        //}

        //构造函数
        //创建目录
        public FormatConverter()
        {
        }

        #region 使用FFmpeg进行格式转换

        /// <summary>
        /// 运行格式转换
        /// </summary>
        /// <param name="sourceFile">要转换文件绝对路径</param>
        /// <param name="destPath">转换结果存储的相对路径</param>
        /// <param name="videotype">要转换成的文件类型</param>
        /// <param name="createImage">是否生成截图</param>
        /// <returns>
        /// 执行成功返回空,否则返回错误信息
        /// </returns>
        public string Convert(string sourceFile, string destPath,string uniquename, VideoType videotype, bool createImage,bool getDuration)
        {
            //取得ffmpeg.exe的物理路径
            string ffmpeg = System.Web.HttpContext.Current.Server.MapPath(ffmpegpath);
            if (!File.Exists(ffmpeg))
            {
                return "找不到格式转换程序!";