c# asp.net获取音频时长及音频转码
来源:互联网 发布:启航电商网络平台兼职 编辑:程序博客网 时间:2024/05/21 17:43
c# asp.net获取音频时长及音频转码
直接上代码并见注释
/// <summary> /// 利用ShellClass获取音频文件时长; /// 如果添加引用编译提示"不能引用嵌入式接口之类的错误",把引用属性里的嵌入式***,设为false;/// asp.net 环境下测试未通过,c#未测试; /// </summary> /// <param name="filePath">文件路径</param> /// <returns></returns> private int GetDurationByShellClass(string filePath) { try { ShellClass sh = new ShellClass(); Folder dir = sh.NameSpace(Path.GetDirectoryName(filePath)); FolderItem item = dir.ParseName(Path.GetFileName(filePath)); string str = dir.GetDetailsOf(item, 27); // 获取歌曲时长。 if (str != "") { var matchs = Regex.Match(str, @"(\d{2}):(\d{2}):(\d{2})"); var hour = Convert.ToInt32(matchs.Groups[1].Value); var minute = Convert.ToInt32(matchs.Groups[2].Value); var second = Convert.ToInt32(matchs.Groups[3].Value); var len = hour * 3600 + minute * 60 + second; return len; } else { return 0; } } catch (Exception ex) { Console.WriteLine(ex.Message); } return 0; }/// <summary> /// 利用WMPLib获取音频文件时长;/// 如果添加引用编译提示"不能引用嵌入式接口之类的错误",把引用属性里的嵌入式***,设为false;/// asp.net 环境下测试未通过,c#未测试; /// </summary> /// <param name="filePath"></param> /// <returns></returns> private int GetDurationByWMPLib(string filePath) { try { WMPLib.WindowsMediaPlayerClass player = new WMPLib.WindowsMediaPlayerClass(); player.URL = filePath; var duration = Math.Ceiling(player.duration); } catch (Exception ex) { Console.WriteLine(ex.Message); } return 0; }/// <summary> /// 利用MediaInfoDotNet获取音频文件时长/// 如果添加引用编译提示"不能引用嵌入式接口之类的错误",把引用属性里的嵌入式***,设为false;/// asp.net 环境下测试未通过,c#测试通过; /// </summary> /// <param name="filePath"></param> /// <returns></returns> private int GetDurationByMediaInfoDotNet(string filePath) { try { MediaInfoDotNet.MediaFile aviFile = new MediaInfoDotNet.MediaFile(filePath); if (aviFile.Audio.Count > 0) { var duration = aviFile.General.Duration; return duration; } } catch (Exception ex) { Console.WriteLine(ex.Message); } return 0; } [DllImport("Kernel32", CharSet = CharSet.Auto)] static extern Int32 GetShortPathName(String path, StringBuilder shortPath, Int32 shortPathLength); [DllImport("winmm.dll")] public static extern int mciSendString(string m_strCmd, StringBuilder m_strReceive, int m_v1, int m_v2); public static string MusicTime(string musicFilePath)//musicFilePath是歌曲文件地址 { if (File.Exists(musicFilePath))//是否存在这个文件 { //利用MCI命令,返回值为文件时间 StringBuilder shortpath = new StringBuilder(80); GetShortPathName(musicFilePath, shortpath, shortpath.Capacity); string musicname = shortpath.ToString(); StringBuilder buf = new StringBuilder(80); mciSendString("close all", buf, buf.Capacity, 0); mciSendString("open " + musicname + " alias media", buf, buf.Capacity, 0); mciSendString("status media length", buf, buf.Capacity, 0); //return buf.ToString().Trim(); double ms = Convert.ToDouble(buf.ToString().Trim()); TimeSpan ts = new TimeSpan(0, 0, 0, 0, (int)ms); return ts.ToString().Substring(3, 5);//这里你自己去决定返回的是什么格式 } return "0";//如果文件不存在就返回"0" }/// <summary> /// 利用ffmpeg获取指定文件的时长,单位:秒; /// 调用:var duration = GetDurationByffmpeg(filePath, @"/ffmpeg.exe"); /// </summary> /// <param name="fileName">文件路径</param> /// <param name="ffmpegVirtualPath">ffmpeg.exe的虚拟路径</param> /// <returns></returns> public static int GetDurationByffmpeg(string fileName, string ffmpegVirtualPath) { int duration = 0; try { if (!File.Exists(fileName)) { return 0; } using (System.Diagnostics.Process pro = new System.Diagnostics.Process()) { pro.StartInfo.UseShellExecute = false; pro.StartInfo.ErrorDialog = false; pro.StartInfo.RedirectStandardError = true; pro.StartInfo.FileName = System.Web.HttpContext.Current.Server.MapPath(ffmpegVirtualPath); // AppDomain.CurrentDomain.BaseDirectory +"ffmpeg.exe"; pro.StartInfo.Arguments = " -i " + fileName; pro.Start(); System.IO.StreamReader errorreader = pro.StandardError; pro.WaitForExit(1 * 1000); string result = errorreader.ReadToEnd(); if (!string.IsNullOrEmpty(result)) { result = result.Substring(result.IndexOf("Duration: ") + ("Duration: ").Length, ("00:00:00").Length); var matchs = Regex.Match(result, @"(\d{2}):(\d{2}):(\d{2})"); var hour = Convert.ToInt32(matchs.Groups[1].Value); var minute = Convert.ToInt32(matchs.Groups[2].Value); var second = Convert.ToInt32(matchs.Groups[3].Value); var len = hour * 3600 + minute * 60 + second; duration = len; } return duration; } } catch (Exception ex) { log.Error(ex); } return 0; } /// <summary> /// 利用ffmpeg进行转码; 如 amr转mp3 /// </summary> /// <param name="inputFile">输入文件,要转码的文件</param> /// <param name="outputFile">转码后的文件</param> /// <param name="ffmpegVirtualPath">ffmpeg.exe的虚拟路径</param> /// <returns></returns> public static bool FromffmpegTurnCode(string inputFile, string outputFile, string ffmpegVirtualPath) { try { if (!File.Exists(inputFile)) { return false; } using (System.Diagnostics.Process pro = new System.Diagnostics.Process()) { pro.StartInfo.UseShellExecute = false; pro.StartInfo.ErrorDialog = false; pro.StartInfo.RedirectStandardError = true; pro.StartInfo.FileName = System.Web.HttpContext.Current.Server.MapPath(ffmpegVirtualPath); // AppDomain.CurrentDomain.BaseDirectory +"ffmpeg.exe"; pro.StartInfo.Arguments = " -i " + inputFile + " -y " + outputFile; pro.Start(); System.IO.StreamReader errorreader = pro.StandardError; pro.WaitForExit(30 * 1000); return true; } } catch (Exception ex) { log.Error(ex); } return false; }
阅读全文
0 0
- c# asp.net获取音频时长及音频转码
- java获取音频时长
- java 获取音频,视频时长
- JAVA编程获取音频时长
- Android获取视频音频的时长的方法
- java通过代码获取音频的时长
- Android获取视频音频的时长的方法
- Android获取视频音频的时长的方法
- C# 使用 ffmpeg 进行音频转码
- 通过PHP读取wav音频时长
- C# 获取MP3/WMA音频数据信息
- 利用MediaPlayer 获取一个音频或者视频文件的播放时长
- 不用打开视频、音频文件就能获取视频、音频的时长等属性
- 音频转码, 设置音频数据格式-sample_fmt
- linux获取音频及播放代码实例
- ffmpeg()音频转码
- 音频
- 音频
- 传美团点评敲定30亿美元新融资,我们思考了一下美团的历史、敌人与未来
- 单调栈
- Android使用HttpURLConnection发送HTTP请求
- Axis2在eclipse和tomcat下的配置
- 吴恩达deeplearning.ai课程系列笔记04
- c# asp.net获取音频时长及音频转码
- 微软“买买买”停不下来,这次又要买下一家云计算创业公司
- 微信暗度陈仓,小程序攻下北大清华等30所高校
- 好好的家电公司戴森,怎么说造车就造车了?
- Island Perimeter(leetcode)
- 为什么 Google 与亚马逊撕了起来?
- BZOJ1096(ZJOI2007)仓库建设--斜率优化DP
- Bootstrap②
- 首批获批入驻雄安新区公司名单公布,BAT、京东等48家企业审批通过