private string GetFileContent(FileInfo fi, ref bool mediaFlag) { // 只读取 10KB 以下 __game_version_info__.gvi 文件内容 if (fi.Name.ToLower() == "__game_version_info__.gvi" && fi.Length <= 10240) { return(File.ReadAllText(fi.FullName)); } else if (this.scanMediaInfo && (!mediaFlag) && CommonString.MediaExts.Contains(fi.Extension.ToLower()) && (!fi.Name.ToLower().Contains(".sample."))) { if (mediaInfoInitFlag) { mediaInfo.Open(fi.FullName); string strTemp = mediaInfo.Inform(); mediaFlag = true; mediaInfo.Close(); return(strTemp); } else { return(mediaInfoInitErrMsg); } } else { return(String.Empty); } }
public TimeSpan GetDuration(string filePath) { mediaInfo.Open(filePath); TimeSpan duration = TimeSpan.Parse(mediaInfo.Get(MediaInfoLib.StreamKind.General, 0, "Duration/String3")); return(duration); }
public MediaInfo(string fileName) { info = new MediaInfoLib.MediaInfo(); info.Open(fileName); var ms = info.Get(MediaInfoLib.StreamKind.General, 0, "Duration"); Length = TimeSpan.FromMilliseconds(long.Parse(ms)); }
public MediaInfo(Models.FileName file) { InitializeComponent(); this.Text = file.Original; string result; if (IntPtr.Size == 4) { var MI = new MediaInfoLib.MediaInfo(); MI.Open(file.FullPath()); MI.Option("Complete"); result = MI.Inform(); MI.Close(); } else { var MI = new MediaInfoLib.MediaInfo64(); MI.Open(file.FullPath()); MI.Option("Complete"); result = MI.Inform(); MI.Close(); } var sp = result .TrimEnd(new char[] { '\r', '\n' }) .Split(new string[] { "\r\n" }, StringSplitOptions.None); TreeNode root = null; foreach (var s in sp) { if (root == null) { root = new TreeNode(s); treeViewInfo.Nodes.Add(root); } else { if (s == "") { root = null; } else { root.Nodes.Add(new TreeNode(Regex.Replace(s, "\\s{2,}", ""))); } } } treeViewInfo.ExpandAll(); }
public string of_GetTxtStr(string lsFile) { try { MediaInfoLib.MediaInfo m = new MediaInfoLib.MediaInfo(); int k = m.Open(lsFile); if (k != 1) { return("Not Media File!"); } return(m.Inform()); } catch (Exception ex) { return(ex.Message + ex.StackTrace); } }
private void showMediaInformation(string filePath) { richTextBox_ImageProperties.AppendLine(filePath); try { MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo(); if (mediaInfo.Open(filePath) == 1) { mediaInfo.Option("Complete", "1"); richTextBox_ImageProperties.AppendLine(CultureStrings.ColonMediaInformation); richTextBox_ImageProperties.AppendLine(mediaInfo.Inform()); } mediaInfo.Close(); } catch (System.Exception ex) { logException(ex); } }
private string buildUniqueDestinationFilePath(ThreadParameters parameters, string sourcePath) { MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo(); string taggedDate = null; if (mediaInfo.Open(sourcePath) == 1) { taggedDate = mediaInfo.Get(MediaInfoLib.StreamKind.General, 0, CultureStrings.TextTaggedDate); } mediaInfo.Close(); string uniqueDestinationFilePath = null; if (taggedDate != null && taggedDate.Length > 0) { try { System.DateTime dateTime = parseTaggedDate(taggedDate); uniqueDestinationFilePath = normalizeDirectoryPath(parameters.DestinationRootDirectory) + normalizeDirectoryPath(System.IO.Path.GetExtension(sourcePath).ToUpper().Substring(1)) + normalizeDirectoryPath(dateTime.ToString("yyyy")) + normalizeDirectoryPath(dateTime.ToString("MMMM")) + getCollectPhotoOriginalFileName(sourcePath); } catch (System.Exception ex) { logException(ex); } } if (uniqueDestinationFilePath == null) { uniqueDestinationFilePath = normalizeDirectoryPath(parameters.DestinationRootDirectory) + normalizeDirectoryPath(System.IO.Path.GetExtension(sourcePath).ToUpper().Substring(1)) + getCollectPhotoOriginalFileName(sourcePath); } if (getDuplicateAutoRenamedFile(sourcePath, uniqueDestinationFilePath) != null) { return(getDuplicateAutoRenamedFile(sourcePath, uniqueDestinationFilePath)); } else { return(getUnusedFilePath(uniqueDestinationFilePath)); } }
private void QueryMediaFile(string path) { MediaInfoLib.MediaInfo MI = new MediaInfoLib.MediaInfo(); MI.Open(path); int i; DIFeature difeature = new DIFeature(); difeature.Filesize = (int)(ToInt64(MI.Get(0, 0, "FileSize")) / 1024 / 1024); // MB try { difeature.Duration = TimeSpan.FromMilliseconds(Convert.ToDouble(MI.Get(0, 0, "Duration"))); // Minutes } catch { } difeature.OverallBitRate = ToInt32(MI.Get(0, 0, "OverallBitRate")) / 1000; // kbps difeature.Format = MI.Get(0, 0, "Format"); difeature.Name = path; int videostreamscount = ToInt32(MI.Get(MediaInfoLib.StreamKind.Video, 0, "StreamCount")); Console.WriteLine("\nVideo Stream Count : " + videostreamscount.ToString()); try { for (i = 0; i < videostreamscount; i++) { DIVideoStream divideostream = new DIVideoStream(); divideostream.FrameRate = (float)Convert.ToDouble(MI.Get(MediaInfoLib.StreamKind.Video, i, "FrameRate")); divideostream.Bitrate = ToInt32(MI.Get(MediaInfoLib.StreamKind.Video, i, "BitRate")) / 1000; divideostream.Resolution = new Size( ToInt32(MI.Get(MediaInfoLib.StreamKind.Video, i, "Width")), ToInt32(MI.Get(MediaInfoLib.StreamKind.Video, i, "Height"))); divideostream.Format = MI.Get(MediaInfoLib.StreamKind.Video, i, "Format"); divideostream.AspectRatio = MI.Get(MediaInfoLib.StreamKind.Video, i, "DisplayAspectRatio/String"); divideostream.ScanType = MI.Get(MediaInfoLib.StreamKind.Video, i, "ScanType"); divideostream.TitleID = ToInt32(MI.Get(MediaInfoLib.StreamKind.Video, i, "ID")); divideostream.Name = MI.Get(MediaInfoLib.StreamKind.Video, i, "Title"); difeature.VideoStreams.Add(divideostream); } } catch (Exception ex) { Utilities.DebugLine("[DiskInfo:QueryMediaFile] An error occured during file scan: {0}", ex.Message); } try { int audiostreamscount = ToInt32(MI.Get(MediaInfoLib.StreamKind.Audio, 0, "StreamCount")); Console.WriteLine("\nAudio Stream Count : " + audiostreamscount.ToString()); for (i = 0; i < audiostreamscount; i++) { DIAudioStream diaudiostream = new DIAudioStream(); diaudiostream.LanguageID = MI.Get(MediaInfoLib.StreamKind.Audio, i, "Language"); diaudiostream.BitrateMode = MI.Get(MediaInfoLib.StreamKind.Audio, i, "BitRate_Mode"); diaudiostream.Bitrate = ToInt32(MI.Get(MediaInfoLib.StreamKind.Audio, i, "BitRate")) / 1000; diaudiostream.Channels = ToInt32(MI.Get(MediaInfoLib.StreamKind.Audio, i, "Channels")); diaudiostream.AudioID = ToInt32(MI.Get(MediaInfoLib.StreamKind.Audio, i, "ID")); diaudiostream.Name = diaudiostream.Language; if (diaudiostream.Channels > 0) { diaudiostream.Name = diaudiostream.Name + " " + diaudiostream.Channels.ToString() + "ch"; } // Initialise fields diaudiostream.EncodingProfile = DIAudioEncodingProfile.Undefined; diaudiostream.SubFormat = ""; switch (MI.Get(MediaInfoLib.StreamKind.Audio, i, "Format")) { case "AC-3": diaudiostream.Encoding = DIAudioEncoding.AC3; diaudiostream.EncodingProfile = DIAudioEncodingProfile.Undefined; break; case "DTS": diaudiostream.Encoding = DIAudioEncoding.DTS; diaudiostream.EncodingProfile = DIAudioEncodingProfile.Undefined; break; case "AAC": diaudiostream.Encoding = DIAudioEncoding.AAC; diaudiostream.EncodingProfile = DIAudioEncodingProfile.Undefined; break; case "Vorbis": diaudiostream.Encoding = DIAudioEncoding.VORBIS; diaudiostream.EncodingProfile = DIAudioEncodingProfile.Undefined; break; case "MPEG Audio": switch (MI.Get(MediaInfoLib.StreamKind.Audio, i, "Format_Version")) { case "Version 1": diaudiostream.Encoding = DIAudioEncoding.MPEG1; break; case "Version 2": diaudiostream.Encoding = DIAudioEncoding.MPEG2; break; default: diaudiostream.Encoding = DIAudioEncoding.Undefined; break; } switch (MI.Get(MediaInfoLib.StreamKind.Audio, i, "Format_Profile")) { case "Layer 2": diaudiostream.EncodingProfile = DIAudioEncodingProfile.Layer2; break; case "Layer 3": diaudiostream.EncodingProfile = DIAudioEncodingProfile.Layer3; break; default: diaudiostream.EncodingProfile = DIAudioEncodingProfile.Undefined; break; } break; case "WMA2": diaudiostream.Encoding = DIAudioEncoding.WMA2; switch (MI.Get(MediaInfoLib.StreamKind.Audio, i, "Format_Profile")) { case "L1": diaudiostream.EncodingProfile = DIAudioEncodingProfile.L1; break; case "L2": diaudiostream.EncodingProfile = DIAudioEncodingProfile.L2; break; default: diaudiostream.EncodingProfile = DIAudioEncodingProfile.Undefined; break; } break; default: diaudiostream.Encoding = DIAudioEncoding.Undefined; diaudiostream.EncodingProfile = DIAudioEncodingProfile.Undefined; break; } difeature.AudioStreams.Add(diaudiostream); } } catch (Exception ex) { Utilities.DebugLine("[DiskInfo:QueryMediaFile] An error occured during file scan: {0}", ex.Message); } Console.WriteLine(MI.Count_Get(MediaInfoLib.StreamKind.Audio)); Console.WriteLine(MI.Get(MediaInfoLib.StreamKind.General, 0, "AudioCount")); Console.WriteLine(MI.Get(MediaInfoLib.StreamKind.Audio, 0, "StreamCount")); DiskFeatures.Add(difeature); MI.Close(); }
public override TaskStatus Run() { Info("Generating MediaInfo informations..."); bool success = true; bool atLeastOneSucceed = false; var files = SelectFiles(); if (files.Length > 0) { var mediaInfoPath = Path.Combine(Workflow.WorkflowTempFolder, string.Format("MediaInfo_{0:yyyy-MM-dd-HH-mm-ss-fff}.xml", DateTime.Now)); var xdoc = new XDocument(new XElement("Files")); foreach (FileInf file in files) { try { if (xdoc.Root != null) { XElement xfile = new XElement("File", new XAttribute("path", file.Path), new XAttribute("name", file.FileName)); MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo(); mediaInfo.Open(file.Path); mediaInfo.Option("Complete", "1"); string info = mediaInfo.Inform(); string[] infos = info.Split(new [] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); XElement xgeneral = null; XElement xaudio = null; XElement xvideo = null; // Build xgeneral foreach (var line in infos) { if (line == "General") { xgeneral = new XElement("General"); continue; } if (line == "Audio" || line == "Video") { break; } string[] tag = line.Split(':'); xgeneral.Add(new XElement("Tag", new XAttribute("name", tag[0].Trim()), new XAttribute("value", tag[1].Trim()))); } // Build xvideo var xvideoFound = false; foreach (var line in infos) { if (line == "Video") { xvideoFound = true; xvideo = new XElement("Video"); continue; } if (line == "Audio") { break; } if (xvideoFound) { string[] tag = line.Split(':'); xvideo.Add(new XElement("Tag", new XAttribute("name", tag[0].Trim()), new XAttribute("value", tag[1].Trim()))); } } // Build xaudio var xaudioFound = false; foreach (var line in infos) { if (line == "Audio") { xaudioFound = true; xaudio = new XElement("Audio"); continue; } if (xaudioFound) { string[] tag = line.Split(':'); xaudio.Add(new XElement("Tag", new XAttribute("name", tag[0].Trim()), new XAttribute("value", tag[1].Trim()))); } } if (xgeneral != null) { xfile.Add(xgeneral); } if (xvideo != null) { xfile.Add(xvideo); } if (xaudio != null) { xfile.Add(xaudio); } xdoc.Root.Add(xfile); } InfoFormat("MediaInfo of the file {0} generated.", file.Path); if (!atLeastOneSucceed) { atLeastOneSucceed = true; } } catch (ThreadAbortException) { throw; } catch (Exception e) { ErrorFormat("An error occured while generating the mediaInfo of the file {0}", e, file.Path); success = false; } } xdoc.Save(mediaInfoPath); Files.Add(new FileInf(mediaInfoPath, Id)); } var status = Status.Success; if (!success && atLeastOneSucceed) { status = Status.Warning; } else if (!success) { status = Status.Error; } Info("Task finished."); return(new TaskStatus(status, false)); }
internal static void Check(Media media) { if (media.MediaType == TMediaType.Movie || media.MediaType == TMediaType.Unknown) { TimeSpan videoDuration; TimeSpan audioDuration; int startTickCunt = Environment.TickCount; using (FFMpegWrapper ffmpeg = new FFMpegWrapper(media.FullPath)) { videoDuration = ffmpeg.GetFrameCount().SMPTEFramesToTimeSpan(); audioDuration = (TimeSpan)ffmpeg.GetAudioDuration(); if (videoDuration == TimeSpan.Zero) { MediaInfoLib.MediaInfo mi = new MediaInfoLib.MediaInfo(); try { mi.Open(media.FullPath); long frameCount; if (long.TryParse(mi.Get(MediaInfoLib.StreamKind.Video, 0, "FrameCount"), out frameCount)) videoDuration = frameCount.SMPTEFramesToTimeSpan(); long audioMilliseconds; if (long.TryParse(mi.Get(MediaInfoLib.StreamKind.Audio, 0, "Duration"), out audioMilliseconds)) audioDuration = TimeSpan.FromMilliseconds(audioMilliseconds); //mi.Option("Complete"); //Debug.WriteLine(mi.Inform()); } finally { mi.Close(); } } media.Duration = videoDuration; if (media.DurationPlay == TimeSpan.Zero || media.DurationPlay > videoDuration) media.DurationPlay = videoDuration; int w = ffmpeg.GetWidth(); int h = ffmpeg.GetHeight(); FieldOrder order = ffmpeg.GetFieldOrder(); Rational frameRate = ffmpeg.GetFrameRate(); Rational sar = ffmpeg.GetSAR(); if (h == 608 && w == 720) { media.HasExtraLines = true; h = 576; } else media.HasExtraLines = false; RationalNumber sAR = ((sar.Num == 608 && sar.Den == 405) || (sar.Num == 1 && sar.Den == 1)) ? VideoFormatDescription.Descriptions[TVideoFormat.PAL_FHA].SAR : (sar.Num == 152 && sar.Den == 135) ? VideoFormatDescription.Descriptions[TVideoFormat.PAL].SAR : new RationalNumber(sar.Num, sar.Den); var vfd = VideoFormatDescription.Match(new System.Drawing.Size(w, h), new RationalNumber(frameRate.Num, frameRate.Den), sAR, order != FieldOrder.PROGRESSIVE); media.VideoFormat = vfd.Format; media.VideoFormatDescription = vfd; if (videoDuration > TimeSpan.Zero) { media.MediaType = TMediaType.Movie; if (Math.Abs(videoDuration.Ticks - audioDuration.Ticks) >= TimeSpan.TicksPerSecond / 2 && audioDuration != TimeSpan.Zero) // when more than 0.5 sec difference media.MediaStatus = TMediaStatus.ValidationError; else media.MediaStatus = TMediaStatus.Available; } else media.MediaStatus = TMediaStatus.ValidationError; } Debug.WriteLine("Check of {0} finished with status {1}. It took {2} milliseconds", media.FullPath, media.MediaStatus, Environment.TickCount - startTickCunt); } else media.MediaStatus = TMediaStatus.Available; }
public static XDocument Inform(FileInf[] files) { var xdoc = new XDocument(new XElement("Files")); foreach (FileInf file in files) { try { if (xdoc.Root != null) { XElement xfile = new XElement("File", new XAttribute("path", file.Path), new XAttribute("name", file.FileName)); MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo(); mediaInfo.Open(file.Path); mediaInfo.Option("Complete", "1"); string info = mediaInfo.Inform(); string[] infos = info.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); XElement xgeneral = null; XElement xaudio = null; XElement xvideo = null; // Build xgeneral foreach (var line in infos) { if (line == "General") { xgeneral = new XElement("General"); continue; } if (line == "Audio" || line == "Video") { break; } string[] tag = line.Split(':'); xgeneral.Add(new XElement("Tag", new XAttribute("name", tag[0].Trim()), new XAttribute("value", tag[1].Trim()))); } // Build xvideo var xvideoFound = false; foreach (var line in infos) { if (line == "Video") { xvideoFound = true; xvideo = new XElement("Video"); continue; } if (xvideoFound) { if (line == "Audio") { break; } string[] tag = line.Split(':'); xvideo.Add(new XElement("Tag", new XAttribute("name", tag[0].Trim()), new XAttribute("value", tag[1].Trim()))); } } // Build xaudio var xaudioFound = false; foreach (var line in infos) { if (line == "Audio") { xaudioFound = true; xaudio = new XElement("Audio"); continue; } if (xaudioFound) { if (line == "Video") { break; } string[] tag = line.Split(':'); xaudio.Add(new XElement("Tag", new XAttribute("name", tag[0].Trim()), new XAttribute("value", tag[1].Trim()))); } } if (xgeneral != null) { xfile.Add(xgeneral); } if (xvideo != null) { xfile.Add(xvideo); } if (xaudio != null) { xfile.Add(xaudio); } xdoc.Root.Add(xfile); } Logger.InfoFormat("MediaInfo of the file {0} generated.", file.Path); if (!_atLeastOneSucceed) { _atLeastOneSucceed = true; } } catch (ThreadAbortException) { throw; } catch (Exception e) { Logger.ErrorFormat("An error occured while generating the mediaInfo of the file {0}", e, file.Path); _success = false; } } return(xdoc); }
public string of_GetXmlStr(string lsFile) { try { string parameter = "";//存放所有参数 string tempstr; int i = 0; int VideoCount = 0; int AudioCount = 0; MediaInfoLib.MediaInfo m = new MediaInfoLib.MediaInfo(); int k = m.Open(lsFile); if (k != 1) { return("Not Media File!"); } parameter = "<Root>"; //General parameter += "\r\n" + "<General>"; i = 0; while (true) { tempstr = m.Get(StreamKind.General, 0, i++, InfoKind.Name);//.Replace("/", "_"); if (tempstr == "") { break; } //获得值 string V = m.Get(MediaInfoLib.StreamKind.General, 0, tempstr); if (V == "") { continue; } if (tempstr.Contains("/")) { continue; } //获得视频和音频数据 if (tempstr == "VideoCount") { VideoCount = int.Parse(V); } if (tempstr == "AudioCount") { AudioCount = int.Parse(V); } parameter += "\r\n" + "<item Name=\"" + tempstr + "\">" + V + "</item>"; } parameter += "\r\n" + "</General>"; //Video parameter += "\r\n" + "<Video>"; for (int j = 0; j < VideoCount; j++) { parameter += "\r\n" + "<Row>"; i = 0; while (true) { tempstr = m.Get(StreamKind.Video, j, i++, InfoKind.Name);//.Replace("/", "_"); if (tempstr == "") { break; } //获得值 string V = m.Get(MediaInfoLib.StreamKind.Video, j, tempstr); if (V == "") { continue; } //if (V.Contains("AMBA")) continue; if (tempstr.Contains("/")) { continue; } //if (tempstr.Contains("AMBA")) continue; parameter += "\r\n" + "<item Name=\"" + tempstr + "\">" + V + "</item>"; } parameter += "\r\n" + "</Row>"; } parameter += "\r\n" + "</Video>"; //Audio parameter += "\r\n" + "<Audio>"; for (int j = 0; j < AudioCount; j++) { parameter += "\r\n" + "<Row>"; i = 0; while (true) { tempstr = m.Get(StreamKind.Audio, j, i++, InfoKind.Name);//.Replace("/", "_"); if (tempstr == "") { break; } //获得值 string V = m.Get(MediaInfoLib.StreamKind.Audio, j, tempstr); if (V == "") { continue; } if (tempstr.Contains("/")) { continue; } parameter += "\r\n" + "<item Name=\"" + tempstr + "\">" + V + "</item>"; } parameter += "\r\n" + "</Row>"; } parameter += "\r\n" + "</Audio>"; parameter += "\r\n" + "</Root>"; m.Close(); return(parameter); } catch (Exception ex) { return("error:" + ex.Message + ex.StackTrace); } }
private static void DisplayMediaInfo() { String ToDisplay; MediaInfoLib.MediaInfo MI = new MediaInfoLib.MediaInfo(); ToDisplay = MI.Option("Info_Version", "0.7.0.0;MediaInfoDLL_Example_CS;0.7.0.0"); if (ToDisplay.Length == 0) { Console.Write("MediaInfo.Dll: this version of the DLL is not compatible"); return; } //Information about MediaInfo ToDisplay += "\r\n\r\nInfo_Parameters\r\n"; ToDisplay += MI.Option("Info_Parameters"); ToDisplay += "\r\n\r\nInfo_Capacities\r\n"; ToDisplay += MI.Option("Info_Capacities"); ToDisplay += "\r\n\r\nInfo_Codecs\r\n"; ToDisplay += MI.Option("Info_Codecs"); //An example of how to use the library ToDisplay += "\r\n\r\nOpen\r\n"; ToDisplay += "\r\n\r\nClose\r\n=========================="; ToDisplay += "\r\n\r\nClose\r\n=========================="; MI.Open("d:\temp\test.mp4"); ToDisplay += "\r\n\r\nInform with Complete=false\r\n"; MI.Option("Complete"); ToDisplay += MI.Inform(); ToDisplay += "\r\n\r\nInform with Complete=true\r\n"; MI.Option("Complete", "1"); ToDisplay += MI.Inform(); ToDisplay += "\r\n\r\nCustom Inform\r\n"; MI.Option("Inform", "General;File size is %FileSize% bytes"); ToDisplay += MI.Inform(); ToDisplay += "\r\n\r\nGet with Stream=General and Parameter='FileSize'\r\n"; ToDisplay += MI.Get(0, 0, "FileSize"); ToDisplay += "\r\n\r\nGet with Stream=General and Parameter=46\r\n"; ToDisplay += MI.Get(0, 0, 46); ToDisplay += "\r\n\r\nCount_Get with StreamKind=Stream_Audio\r\n"; ToDisplay += MI.Count_Get(MediaInfoLib.StreamKind.Audio); ToDisplay += "\r\n\r\nGet with Stream=General and Parameter='AudioCount'\r\n"; ToDisplay += MI.Get(MediaInfoLib.StreamKind.General, 0, "AudioCount"); ToDisplay += "\r\n\r\nGet with Stream=Audio and Parameter='StreamCount'\r\n"; ToDisplay += MI.Get(MediaInfoLib.StreamKind.Audio, 0, "StreamCount"); ToDisplay += "\r\n\r\nClose\r\n"; MI.Close(); ToDisplay += "\r\n\r\nClose\r\n=========================="; //Example with a stream ToDisplay += "\r\n" + ReadMediaInfo() + "\r\n"; //Displaying the text Console.Write(ToDisplay); }