public void Execute() { /* * Reads the values of the video (width, heigth, fps...) and stores them * into file_values. * * Returns (False,AUDIO) if the file is not a video (with AUDIO the number * of audio tracks) * * Returns (True,0) if the file is a right video file */ BackendPrograms mplayerLocation = new BackendPrograms(mplayerPath); int audio = 0; int video = 0; int nframes = 1; int minimum_audio = 10000; _AudioList = new List <int> (); _AudioTracks = new List <AudioTrackInfo> (); _SubtitleList = new List <SubtitlesInfo> (); // if CHECK_AUDIO is TRUE, we just check if it's an audio file //if check_audio: // nframes=0 //else: // nframes=1 using (var handle = new System.Diagnostics.Process()) { handle.StartInfo.UseShellExecute = false; handle.StartInfo.CreateNoWindow = true; handle.StartInfo.RedirectStandardOutput = true; handle.StartInfo.RedirectStandardError = true; handle.StartInfo.FileName = mplayerLocation.MPlayer; handle.StartInfo.Arguments = string.Format("-loop 1 -identify -ao null -vo null -frames 0 {0} \"{1}\"", nframes.ToString(), filePath); handle.Start(); string line = ""; StringReader strReader = new StringReader(handle.StandardOutput.ReadToEnd()); while ((line = strReader.ReadLine()) != null) //while (handle.HasExited == false) { if (line.Trim() == "") { continue; } int position = line.IndexOf("ID_"); if (position == -1) { continue; } line = line.Substring(position); if (line.StartsWith("ID_VIDEO_BITRATE")) { _VideoBitrate = Globals.IntParse(line.Substring(17)) / 1000; // kilobits per second } else if (line.StartsWith("ID_VIDEO_WIDTH")) { _Width = Globals.IntParse(line.Substring(15)); } else if (line.StartsWith("ID_VIDEO_HEIGHT")) { _Height = Globals.IntParse(line.Substring(16)); } else if (line.StartsWith("ID_VIDEO_ASPECT")) { _AspectRatio = Globals.FloatParse(line.Substring(16)); } else if (line.StartsWith("ID_VIDEO_FPS")) { _fps = (int)Globals.FloatParse(line.Substring(13)); } else if (line.StartsWith("ID_AUDIO_BITRATE")) { _AudioBitrate = Globals.IntParse(line.Substring(17)) / 1000; // kilobits per second } else if (line.StartsWith("ID_AUDIO_RATE")) { _AudioRate = Globals.IntParse(line.Substring(14)); } else if (line.StartsWith("ID_LENGTH")) { _Length = (int)Globals.FloatParse(line.Substring(10)); } else if (line.StartsWith("ID_VIDEO_ID")) { video += 1; _Video = true; } else if (line.StartsWith("ID_AUDIO_ID")) { audio += 1; _Audio = true; int audio_track = Globals.IntParse(line.Substring(12)); if (minimum_audio > audio_track) { minimum_audio = audio_track; } _AudioList.Add(audio_track); AudioTrackInfo info = new AudioTrackInfo(); info.ID = audio_track; _AudioTracks.Add(info); } else if (line.StartsWith("ID_AID_") && line.Substring(9, 4) == "LANG") { if (_AudioTracks.Count > 0) { string value = line.Substring(14); _AudioTracks [_AudioTracks.Count - 1].Language = value; } } else if (line.StartsWith("ID_AID_") && line.Substring(9, 4) == "NAME") { if (_AudioTracks.Count > 0) { string value = line.Substring(14); _AudioTracks [_AudioTracks.Count - 1].Name = value; } } else if (line.StartsWith("ID_SUBTITLE_ID")) { int value = Globals.IntParse(line.Substring(15)); SubtitlesInfo info = new SubtitlesInfo(); info.ID = value; _SubtitleList.Add(info); } else if (line.StartsWith("ID_SID_") && line.Substring(9, 4) == "LANG") { if (_SubtitleList.Count > 0) { string value = line.Substring(14); _SubtitleList [_SubtitleList.Count - 1].Language = value; } } else if (line.StartsWith("ID_SID_") && line.Substring(9, 4) == "NAME") { if (_SubtitleList.Count > 0) { string value = line.Substring(14); _SubtitleList [_SubtitleList.Count - 1].Name = value; } } } handle.WaitForExit(); handle.Close(); } if (_AspectRatio == 0.0) { _AspectRatio = ((float)_Width / (float)_Height); if (_AspectRatio <= 1.5) { _AspectRatio = (ScreenAspectRatio.FourThree); } } }
/// <summary> /// /// </summary> /// <param name="filePath"></param> /// <param name="mplayerPath">If mplayerPath is left empty it will search for mplayer.exe in /// "current directory\backend\mplayer.exe" on windows and mplayer in the path on linux.</param> public Discover(string filePath, string mplayerPath) { /* Reads the values of the video (width, heigth, fps...) and stores them into file_values. Returns (False,AUDIO) if the file is not a video (with AUDIO the number of audio tracks) Returns (True,0) if the file is a right video file */ BackendPrograms mplayerLocation = new BackendPrograms(mplayerPath); int audio = 0; int video = 0; int nframes = 1; int minimum_audio = 10000; _AudioList = new List<int>(); _AudioTracks = new List<AudioTrackInfo>(); _SubtitleList = new List<SubtitlesInfo>(); // if CHECK_AUDIO is TRUE, we just check if it's an audio file //if check_audio: // nframes=0 //else: // nframes=1 System.Diagnostics.Process handle = new System.Diagnostics.Process(); handle.StartInfo.UseShellExecute = false; handle.StartInfo.CreateNoWindow = true; handle.StartInfo.RedirectStandardOutput = true; handle.StartInfo.RedirectStandardError = true; handle.StartInfo.FileName = mplayerLocation.MPlayer; handle.StartInfo.Arguments = string.Format("-loop 1 -identify -ao null -vo null -frames 0 {0} \"{1}\"", nframes.ToString(), filePath); handle.Start(); string line = ""; StringReader strReader = new StringReader(handle.StandardOutput.ReadToEnd()); while ((line = strReader.ReadLine()) != null) //while (handle.HasExited == false) { if (line.Trim() == "") { continue; } int position = line.IndexOf("ID_"); if (position == -1) { continue; } line = line.Substring(position); if (line.StartsWith("ID_VIDEO_BITRATE")) { _VideoBitrate = Globals.IntParse(line.Substring(17)) / 1000; // kilobits per second } else if (line.StartsWith("ID_VIDEO_WIDTH")) { _Width = Globals.IntParse(line.Substring(15)); } else if (line.StartsWith("ID_VIDEO_HEIGHT")) { _Height = Globals.IntParse(line.Substring(16)); } else if (line.StartsWith("ID_VIDEO_ASPECT")) { _AspectRatio = Globals.FloatParse(line.Substring(16)); } else if (line.StartsWith("ID_VIDEO_FPS")) { _fps = (int)Globals.FloatParse(line.Substring(13)); } else if (line.StartsWith("ID_AUDIO_BITRATE")) { _AudioBitrate = Globals.IntParse(line.Substring(17)) / 1000; // kilobits per second } else if (line.StartsWith("ID_AUDIO_RATE")) { _AudioRate = Globals.IntParse(line.Substring(14)); } else if (line.StartsWith("ID_LENGTH")) { _Length = (int)Globals.FloatParse(line.Substring(10)); } else if (line.StartsWith("ID_VIDEO_ID")) { video += 1; _Video = true; } else if (line.StartsWith("ID_AUDIO_ID")) { audio += 1; _Audio = true; int audio_track = Globals.IntParse(line.Substring(12)); if (minimum_audio > audio_track) { minimum_audio = audio_track; } _AudioList.Add(audio_track); AudioTrackInfo info = new AudioTrackInfo(); info.ID = audio_track; _AudioTracks.Add(info); } else if (line.StartsWith("ID_AID_") && line.Substring(9, 4) == "LANG") { if (_AudioTracks.Count > 0) { string value = line.Substring(14); _AudioTracks[_AudioTracks.Count - 1].Language = value; } } else if (line.StartsWith("ID_AID_") && line.Substring(9, 4) == "NAME") { if (_AudioTracks.Count > 0) { string value = line.Substring(14); _AudioTracks[_AudioTracks.Count-1].Name = value; } } else if (line.StartsWith("ID_SUBTITLE_ID")) { int value = Globals.IntParse(line.Substring(15)); SubtitlesInfo info = new SubtitlesInfo(); info.ID = value; _SubtitleList.Add(info); } else if (line.StartsWith("ID_SID_") && line.Substring(9, 4) == "LANG") { if (_SubtitleList.Count > 0) { string value = line.Substring(14); _SubtitleList[_SubtitleList.Count - 1].Language = value; } } else if (line.StartsWith("ID_SID_") && line.Substring(9, 4) == "NAME") { if (_SubtitleList.Count > 0) { string value = line.Substring(14); _SubtitleList[_SubtitleList.Count - 1].Name = value; } } } handle.WaitForExit(); handle.Close(); if (_AspectRatio == 0.0) { _AspectRatio = ((float)_Width / (float)_Height); if (_AspectRatio <= 1.5) { _AspectRatio = (ScreenAspectRatio.FourThree); } } }
public void Execute() { // As work around can run mpv commandline and parse output // mpv video_name.mp4 --vo null -ao null --frames 1 -v /* * Reads the values of the video (width, heigth, fps...) and stores them * into file_values. * * Returns (False,AUDIO) if the file is not a video (with AUDIO the number * of audio tracks) * * Returns (True,0) if the file is a right video file */ _mpv = new Mpv(libmpvPath); // Must be set before initializeation _mpv.SetOption("frames", MpvFormat.MPV_FORMAT_INT64, 148); _mpv.Initialize(); _mpv.SetOption("wid", MpvFormat.MPV_FORMAT_INT64, -1); _mpv.SetOption("vo", MpvFormat.MPV_FORMAT_STRING, "null"); _mpv.SetOption("ao", MpvFormat.MPV_FORMAT_STRING, "null"); _mpv.DoMpvCommand("loadfile", filePath); // HACK: wait for video to load System.Threading.Thread.Sleep(1000); //_mpv.SetProperty ("pause", MpvFormat.MPV_FORMAT_STRING, "yes"); _Width = _mpv.GetPropertyInt("width"); _Height = _mpv.GetPropertyInt("height"); _AspectRatio = _mpv.GetPropertyFloat("video-aspect"); int bits = _mpv.GetPropertyInt("audio-bitrate"); //int bytes = Bits2Bytes (bits); //int kb = Bytes2Kilobytes (bytes); //_AudioBitrate = (int)Math.Round (bits / 1024m, 0); _AudioBitrate = bits; _AudioRate = _mpv.GetPropertyInt("audio-params/samplerate"); _Length = _mpv.GetPropertyInt("duration"); //_fps = _mpv.GetPropertyInt ("container-fps"); _fps = _mpv.GetPropertyInt("fps"); _mpv.TryGetPropertyInt("video-bitrate", out _VideoBitrate); string videoFormat = _mpv.GetProperty("video-format"); if (!string.IsNullOrWhiteSpace(videoFormat)) { _Video = true; } _AudioList = new List <int> (); _AudioTracks = new List <AudioTrackInfo> (); _SubtitleList = new List <SubtitlesInfo> (); int trackCount = _mpv.GetPropertyInt("track-list/count"); foreach (int i in Enumerable.Range(0, trackCount)) { string trackType = _mpv.GetProperty($"track-list/{i}/type"); int trackId = _mpv.GetPropertyInt($"track-list/{i}/id"); string name; _mpv.TryGetProperty($"track-list/{i}/title", out name); string language; _mpv.TryGetProperty($"track-list/{i}/lang", out language); if (trackType == "audio") { _AudioList.Add(trackId); var info = new AudioTrackInfo() { ID = trackId, Name = name, Language = language }; _AudioTracks.Add(info); } else if (trackType == "sub") { var info = new SubtitlesInfo() { ID = trackId, Name = name, Language = language }; _SubtitleList.Add(info); } } if (_AspectRatio == 0.0) { _AspectRatio = ((float)_Width / (float)_Height); if (_AspectRatio <= 1.5) { _AspectRatio = (ScreenAspectRatio.FourThree); } } }