Open() public method

public Open ( String FileName ) : int
FileName String
return int
        public TimeSpan GetRunTime(string filename)
        {
            MediaInfoLib.MediaInfo mediaInfo = null;
            try
            {
                mediaInfo = new MediaInfoLib.MediaInfo();
                _logger.Trace("Getting media info from {0}", filename);

                mediaInfo.Option("ParseSpeed", "0.2");
                int open = mediaInfo.Open(filename);

                if (open != 0)
                {
                    int runTime;
                    Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out runTime);

                    mediaInfo.Close();
                    return(TimeSpan.FromMilliseconds(runTime));
                }
            }
            catch (Exception ex)
            {
                _logger.ErrorException("Unable to parse media info from file: " + filename, ex);
            }
            finally
            {
                if (mediaInfo != null)
                {
                    mediaInfo.Close();
                }
            }

            return(new TimeSpan());
        }
        public static DateTime? GetVideoFileTakenDate(string filePath)
        {
            MediaInfo mediaInfo = null;
            try
            {
                mediaInfo = new MediaInfo();
                mediaInfo.Open(filePath);

                DateTime? result = null;
                string recordedDate = mediaInfo.Get(StreamKind.General, 0, "Recorded_Date");
                if (!string.IsNullOrWhiteSpace(recordedDate))
                {
                    result = DateTime.Parse(recordedDate, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);
                }

                if (result == null)
                {
                    recordedDate = mediaInfo.Get(StreamKind.General, 0, "Encoded_Date");
                    if (string.IsNullOrWhiteSpace(recordedDate))
                    {
                        recordedDate = mediaInfo.Get(StreamKind.General, 0, "Tagged_Date");
                    }
                    if (!string.IsNullOrWhiteSpace(recordedDate))
                    {
                        var dateTimeStyles = DateTimeStyles.AssumeUniversal;
                        // Canon records local time as UTC
                        var canonCameraIdentifier = mediaInfo.Get(StreamKind.General, 0, "CodecID/String");
                        if (canonCameraIdentifier.Contains("/CAEP"))
                        {
                            dateTimeStyles = DateTimeStyles.AssumeLocal;
                        }

                        result = DateTime.ParseExact(recordedDate, "\"UTC\" yyyy-MM-dd HH:mm:ss",
                            CultureInfo.InvariantCulture, dateTimeStyles);
                    }
                }

                if (result == null)
                {
                    recordedDate = mediaInfo.Get(StreamKind.General, 0, "Mastered_Date");
                    if (!string.IsNullOrWhiteSpace(recordedDate))
                    {
                        result = DateTime.ParseExact(recordedDate, "ddd MMM dd HH:mm:ss yyyy",
                            CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);
                    }
                }
                return result;
            }
            catch (Exception)
            {
            }
            finally
            {
                if (mediaInfo != null)
                {
                    mediaInfo.Close();
                }
            }
            return null;
        }
Beispiel #3
0
        public MediaViewModel(string Name = "",
            string ArtistName = "",
            string AlbumName = "",
            Uri Path = null,
            String Length = "00:00:00")
        {
            Dictionary<String, String> tmp = new Dictionary<string, string>();
            if (Path != null)
            {
                try
                {
                    MediaInfo lol = new MediaInfo();
                    if (lol.Open(Uri.UnescapeDataString(Path.AbsolutePath)) == 1)
                    {
                        foreach (string entry in lol.Inform().Split('\n'))
                        {
                            var tokens = entry.Split(':');
                            if (tokens.Length == 2)
                                tmp[tokens[0].Trim()] = tokens[1].Trim();
                        }
                        lol.Close();
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show("MediaInfo: "+ e.Message);
                }
            }

            Song = new Media(tmp.ContainsKey("Track name") ? tmp["Track name"] : "",
                            tmp.ContainsKey("Performer") ? tmp["Performer"] : "",
                            tmp.ContainsKey("Album") ? tmp["Album"] : "",
                            Path, tmp.ContainsKey("Duration") ? getLength(tmp["Duration"]) : "");
        }
Beispiel #4
0
        public static string[] ExtractInfo(string path)
        {
            MediaInfo MI = new MediaInfo();            
            MI.Open(path); 
            string[] returnInfo = new string[5];

            //File name 0
            returnInfo[0] = MI.Get(0, 0, "FileName");

            //Size 1
            string sizeInKBStr = MI.Get(0, 0, "FileSize/String").Substring(
                0, MI.Get(0, 0, "FileSize/String").LastIndexOf(" ")).Replace(" ", "");
            double sizeInKB = Double.Parse(sizeInKBStr);
            double sizeInMB = (double)(sizeInKB / 1024);
            string sizeInMBStr = String.Format("{0:0.00}", sizeInMB); 
            returnInfo[1] = sizeInMBStr + " MB";

            //Date created 2
            returnInfo[2] = MI.Get(0, 0, "File_Created_Date").Substring(
                MI.Get(0, 0, "File_Created_Date").IndexOf(" ") + 1, MI.Get(0, 0, "File_Created_Date").LastIndexOf(".") - 4);

            //Performer 3
            returnInfo[3] = MI.Get(0, 0, "Performer");

            //Length 4
            returnInfo[4] = MI.Get(0, 0, "Duration/String3").Substring(0, MI.Get(0, 0, "Duration/String3").LastIndexOf("."));

            return returnInfo;
        }
            public FileInput(string filename)
            {
                this.filename = filename;
                MediaInfo MI = new MediaInfo();
                if (MI.Open(this.GetFileName()) > 0)
                {

                    string s = MI.Option("Info_Parameters");

                    int width = int.Parse(MI.Get(StreamKind.Video, 0, "Width"));
                    int height = int.Parse(MI.Get(StreamKind.Video, 0, "Height"));
                    decimal aspect = (decimal)width / (decimal)height;
                    bool resize = false;
                    if (width > 1280)
                    {
                        width = 1280;
                        height = (int)(width / aspect);
                        resize = true;
                    }
                    if (height > 720)
                    {
                        height = 720;
                        width = (int)(height * aspect);
                        resize = true;
                    }
                    if (resize)
                    {
                        if (width % 2 > 0)
                            width -= 1;
                        if (height % 2 > 0)
                            height -= 1;
                        this._size = " -s " + width + "x" + height;
                    }
                    Log.WriteLine("resize=" + resize + ",size=" + width + "x" + height);


                    int videobitrate = int.Parse(MI.Get(StreamKind.Video, 0, "BitRate"));
                    if (videobitrate > 7 * 1024 * 1024 || resize)
                    {
                        this._parameter = " libx264 -coder 0 -flags -loop -cmp +chroma -partitions -parti8x8-parti4x4-partp8x8-partb8x8 -me_method dia -subq 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 0 -i_qfactor 0.71 -b_strategy 0 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -bf 0 -refs 1 -directpred 1 -trellis 0 -flags2 -bpyramid-mixed_refs-wpred-dct8x8+fastpskip-mbtree -wpredp 0 -b 4096k ";
                    }
                    else
                    {
                        this._parameter = " copy";
                    }
                    this._parameter = " -vcodec " + this._parameter;
                    //Log.WriteLine("media info supported :" + s);

                    MI.Close();
                }


                if (this.GetFileName().ToLower().EndsWith(".mp4") || this.GetFileName().ToLower().EndsWith(".mkv"))
                {
                    this._parameter += " -vbsf h264_mp4toannexb ";
                }
                this._parameter += " -acodec libfaac -ac 2 -ab 192k ";
            }
Beispiel #6
0
        public static void Main()
        {
            MediaInfo MI = new MediaInfo();

            //change the files accordingly, tested with .avi, .mpg, .mpeg - these should be enough
            MI.Open("1.flv"); 

            string display = "";
            display += "FileName: " + MI.Get(0, 0, "FileName") + "\n";
            display += "FileExtension: " + MI.Get(0, 0, "FileExtension") + "\n";
            display += "Title: " + MI.Get(0, 0, "Title") + "\n";
            display += "Subtitle: " + MI.Get(0, 0, "Title/More") + "\n";
            display += "Tags: " + MI.Get(0, 0, "WM/Category") + "\n";
            display += "Comments: " + MI.Get(0, 0, "Comment") + "\n";

            string sizeInKBStr = MI.Get(0, 0, "FileSize/String").Substring(0, MI.Get(0, 0, "FileSize/String").LastIndexOf(" ")).Replace(" ", "");
            double sizeInKB = Double.Parse(sizeInKBStr);
            double sizeInMB = (double)(sizeInKB / 1024);
            string sizeInMBStr = String.Format("{0:0.00}", sizeInMB); 
            display += "Size: " + sizeInMBStr + " MB" + "\n";
            display += "Date created: " + MI.Get(0, 0, "File_Created_Date").Substring(MI.Get(0, 0, "File_Created_Date").IndexOf(" ") + 1, MI.Get(0, 0, "File_Created_Date").LastIndexOf(".")-4) + "\n";
            display += "Date modified: " + MI.Get(0, 0, "File_Modified_Date").Substring(MI.Get(0, 0, "File_Modified_Date").IndexOf(" ") + 1, MI.Get(0, 0, "File_Modified_Date").LastIndexOf(".")-4) + "\n";

            display += "\nVIDEO\n";
            display += "Length: " + MI.Get(0, 0, "Duration/String3").Substring(0, MI.Get(0, 0, "Duration/String3").LastIndexOf(".")) + "\n";
            display += "Frame width: " + MI.Get(StreamKind.Video, 0, "Width/String") + "\n";
            display += "Frame height: " + MI.Get(StreamKind.Video, 0, "Height/String") + "\n";
            if (MI.Get(StreamKind.Video, 0, "BitRate/String") != "")
                display += "Data rate: " + MI.Get(StreamKind.Video, 0, "BitRate/String").Substring(0, MI.Get(StreamKind.Video, 0, "BitRate/String").LastIndexOf(" ")).Replace(" ", "") + " kbps" + "\n";
            else
                display += "Data rate:\n";
            string frameRateOriStr = MI.Get(StreamKind.Video, 0, "FrameRate/String").Substring(0, MI.Get(StreamKind.Video, 0, "FrameRate/String").LastIndexOf(" ")).Replace(" ", "");
            double frameRate = Double.Parse(frameRateOriStr);
            string frameRateStr = String.Format("{0:0}", frameRate);
            display += "Frame rate: " + frameRateStr + " fps" + "\n";

            display += "\nAUDIO\n";
            string bitrateOriStr = MI.Get(StreamKind.Audio, 0, "BitRate/String").Substring(0, MI.Get(StreamKind.Audio, 0, "BitRate/String").LastIndexOf(" ")).Replace(" ", "");
            double bitrateRate = Double.Parse(bitrateOriStr);
            string bitrateRateStr = String.Format("{0:0}", bitrateRate);
            display += "Bitrate: " + bitrateRateStr + " kbps" + "\n";
            display += "Channels: " + MI.Get(StreamKind.Audio, 0, "Channel(s)/String") + "\n";
            string audioSampleRateOriStr = MI.Get(StreamKind.Audio, 0, "SamplingRate/String").Substring(0, MI.Get(StreamKind.Audio, 0, "SamplingRate/String").LastIndexOf(" ")).Replace(" ", "");
            double audioSampleRate = Double.Parse(audioSampleRateOriStr);
            string audioSampleRateStr = String.Format("{0:0}", audioSampleRate);
            display += "Audio sample rate: " + audioSampleRateStr + " kHz" + "\n";

            display += "\nMEDIA\n";
            display += "Artist: " + MI.Get(0, 0, "Performer") + "\n";
            display += "Year: " + MI.Get(0, 0, "Recorded_Date") + "\n";
            display += "Genre: " + MI.Get(0, 0, "Genre") + "\n";            

            MI.Close();

            Console.WriteLine(display);

        }
Beispiel #7
0
        /// <summary>
        /// Reads a media file details.
        /// </summary>
        /// <param name="fileName">File name to be read.</param>
        /// <returns>Media file details.</returns>
        public virtual MediaFileInfo Read(string fileName)
        {
            var FileInfo = new MediaFileInfo();
            var MI       = new MediaInfoLib.MediaInfo();

            var s = MI.Option("Info_Version", Constants.INFO_VERSION_VALUE);

            if (s.Length == 0)
            {
                throw new Exception(string.Format("MediaInfo.Dll: this version of the DLL is not compatible. Version found: {0}", s));
            }

            MI.Open(fileName);

            ReadProperties(MI, FileInfo.GeneralInfo, StreamKind.General, 0);

            int iNbVideoStreams = int.Parse(MI.Get(StreamKind.Video, 0, "StreamCount"));
            int iNbAudioStreams = int.Parse(MI.Get(StreamKind.Audio, 0, "StreamCount"));
            int iNbTextStreams  = int.Parse(MI.Get(StreamKind.Text, 0, "StreamCount"));
            int iNbMenuStreams  = int.Parse(MI.Get(StreamKind.Menu, 0, "StreamCount"));

            for (int i = 0; i < iNbVideoStreams; i++)
            {
                var vs = new VideoStream();
                ReadProperties(MI, vs, StreamKind.Video, i);
                FileInfo.VideoStreams.Add(vs);
            }

            for (int i = 0; i < iNbAudioStreams; i++)
            {
                var aus = new AudioStream();
                ReadProperties(MI, aus, StreamKind.Audio, i);
                FileInfo.AudioStreams.Add(aus);
            }

            for (int i = 0; i < iNbTextStreams; i++)
            {
                var ts = new TextStream();
                ReadProperties(MI, ts, StreamKind.Text, i);
                FileInfo.TextStreams.Add(ts);
            }

            for (int i = 0; i < iNbMenuStreams; i++)
            {
                var ms = new MenuStream();
                ReadProperties(MI, ms, StreamKind.Menu, i);
                for (int j = ms.Chapters_Pos_Begin; j < ms.Chapters_Pos_End; j++)
                {
                    ms.Chapters.Add(MI.Get(StreamKind.Menu, i, j));
                }
                FileInfo.MenuStreams.Add(ms);
            }

            return(FileInfo);
        }
 public Musiikki(string nimi, string filePath)
 {
     FilePath = filePath;
     MediaInfo MI = new MediaInfo();
     MI.Open(FilePath);
     Nimi = MI.Get(StreamKind.General, 0, "FileName");
     Pituus = MI.Get(StreamKind.General, 0, "Duration/String");
     SoundEncoding = MI.Get(StreamKind.Audio, 0, "Language/String") + "," + MI.Get(StreamKind.Audio, 0, "SamplingRate/String") + "," + MI.Get(StreamKind.Audio, 0, "Channel(s)/String") + "," + MI.Get(StreamKind.General, 0, "Audio_Format_List");
     TiedostonKoko = MI.Get(StreamKind.General, 0, "FileSize/String");
     MI.Close();
 }
Beispiel #9
0
 public AudioMetadata(string Filename)
 {
     var MI = new MediaInfo();
     MI.Open(Filename);
     Title = MI.Get(StreamKind.General, 0, "Title");
     Album = MI.Get(StreamKind.General, 0, "Album");
     Artist = MI.Get(StreamKind.General, 0, "Performer");
     Genre = MI.Get(StreamKind.General, 0, "Genre");
     RecordDate = MI.Get(StreamKind.General, 0, "Recorded_Date");
     var duration = MI.Get(StreamKind.General, 0, "Duration");
     Duration = new TimeSpan(Convert.ToInt64(duration) * 10000);
 }
        private Int32 GetDuration(string location)
        {
            MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo();
            mediaInfo.Option("ParseSpeed", "0.3");
            int i       = mediaInfo.Open(location);
            int runTime = 0;

            if (i != 0)
            {
                Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out runTime);
            }
            mediaInfo.Close();
            return(runTime);
        }
 public Elokuva(string nimi, string filePath)
 {
     Watched = false;
     FilePath = filePath;
     MediaInfo MI = new MediaInfo();
     MI.Open(FilePath);
     nimi = MI.Get(StreamKind.General, 0, "FileName");
     Nimi = TrimNimi(nimi);
     Pituus = MI.Get(StreamKind.General, 0, "Duration/String");
     VideoEncoding = MI.Get(StreamKind.General, 0, "Format");
     SoundEncoding = MI.Get(StreamKind.Audio, 0, "Language/String") + "," + MI.Get(StreamKind.Audio, 0, "SamplingRate/String") + "," + MI.Get(StreamKind.Audio, 0, "Channel(s)/String") + "," + MI.Get(StreamKind.General, 0, "Audio_Format_List");
     TiedostonKoko = MI.Get(StreamKind.General, 0, "FileSize/String");
     Fps = MI.Get(StreamKind.Video, 0, "FrameRate/String");
     Resolution = MI.Get(StreamKind.Video, 0, "Width") + "x" + MI.Get(StreamKind.Video, 0, "Height");
     MI.Close();
     Movie movie = Search.getMovieInfoFromDb(Nimi);
       //  movie.Elokuva = this;
     DbTiedot=movie;
 }
Beispiel #12
0
        public static void Main(string[] args)
        {
            String ToDisplay = "";
            MediaInfo MI = new MediaInfo();
            //An example of how to use the library
            ToDisplay += "\r\n\r\nOpen\r\n";
            MI.Open(args[0]);

            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(StreamKind.Audio);

            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter='AudioCount'\r\n";
            ToDisplay += MI.Get(StreamKind.General, 0, "AudioCount");

            ToDisplay += "\r\n\r\nGet with Stream=Audio and Parameter='StreamCount'\r\n";
            ToDisplay += MI.Get(StreamKind.Audio, 0, "StreamCount");

            ToDisplay += "\r\n\r\nClose\r\n";
            MI.Close();

            Console.WriteLine(ToDisplay);
        }
        private static void OpenMediaFileForProcessing(FileSystemInfo file, MediaInfo mediaInfo)
        {
            Application.DoEvents();

            MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress, "Analyzing file " + file.Name + "...");
            Debugger.LogMessageToFile(Environment.NewLine + "Creating MediaInfo instance for file " + file.Name + "...");

            try
            {
                int openResult = mediaInfo.Open(file.FullName);
            }
            catch (Exception e)
            {
                Debugger.LogMessageToFile("[Madia File Analyzer] An unexpected error occured while" +
                                          " the Media File Analyzer was trying to open a media file for Media Info extraction." +
                                          "The error was: " + e);
            }

            Application.DoEvents();
        }
        public virtual MediaInfoModel GetMediaInfo(string filename)
        {
            if (!_diskProvider.FileExists(filename))
                throw new FileNotFoundException("Media file does not exist: " + filename);

            var mediaInfo = new MediaInfo();

            try
            {
                logger.Trace("Getting media info from {0}", filename);

                mediaInfo.Option("ParseSpeed", "0.2");
                int open = mediaInfo.Open(filename);

                if (open != 0)
                {
                    int width;
                    int height;
                    int videoBitRate;
                    int audioBitRate;
                    int runTime;
                    int streamCount;
                    int audioChannels;

                    string subtitles = mediaInfo.Get(StreamKind.General, 0, "Text_Language_List");
                    string scanType = mediaInfo.Get(StreamKind.Video, 0, "ScanType");
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Width"), out width);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Height"), out height);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);

                    string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                    int ABindex = aBitRate.IndexOf(" /");
                    if (ABindex > 0)
                        aBitRate = aBitRate.Remove(ABindex);

                    Int32.TryParse(aBitRate, out audioBitRate);
                    Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out runTime);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "StreamCount"), out streamCount);

                    string audioChannelsStr = mediaInfo.Get(StreamKind.Audio, 0, "Channel(s)");
                    int ACindex = audioChannelsStr.IndexOf(" /");
                    if (ACindex > 0)
                        audioChannelsStr = audioChannelsStr.Remove(ACindex);

                    string audioLanguages = mediaInfo.Get(StreamKind.General, 0, "Audio_Language_List");
                    decimal videoFrameRate = Decimal.Parse(mediaInfo.Get(StreamKind.Video, 0, "FrameRate"));
                    string audioProfile = mediaInfo.Get(StreamKind.Audio, 0, "Format_Profile");

                    int APindex = audioProfile.IndexOf(" /");
                    if (APindex > 0)
                        audioProfile = audioProfile.Remove(APindex);

                    Int32.TryParse(audioChannelsStr, out audioChannels);
                    var mediaInfoModel = new MediaInfoModel
                                                {
                                                    VideoCodec = mediaInfo.Get(StreamKind.Video, 0, "Codec/String"),
                                                    VideoBitrate = videoBitRate,
                                                    Height = height,
                                                    Width = width,
                                                    AudioFormat = mediaInfo.Get(StreamKind.Audio, 0, "Format"),
                                                    AudioBitrate = audioBitRate,
                                                    RunTime = (runTime / 1000), //InSeconds
                                                    AudioStreamCount = streamCount,
                                                    AudioChannels = audioChannels,
                                                    AudioProfile = audioProfile.Trim(),
                                                    VideoFps = videoFrameRate,
                                                    AudioLanguages = audioLanguages,
                                                    Subtitles = subtitles,
                                                    ScanType = scanType
                                                };

                    mediaInfo.Close();
                    return mediaInfoModel;
                }
            }
            catch (Exception ex)
            {
                logger.ErrorException("Unable to parse media info from file: " + filename, ex);
                mediaInfo.Close();
            }

            return null;
        }
Beispiel #15
0
        private void AudioOnePicButton_Click(object sender, EventArgs e)
        {
            if (!File.Exists(AudioPicTextBox.Text))
            {
                ShowErrorMessage("请选择图片文件");
            }
            else if (!File.Exists(AudioPicAudioTextBox.Text))
            {
                ShowErrorMessage("请选择音频文件");
            }
            else if (AudioOnePicOutputTextBox.Text == "")
            {
                ShowErrorMessage("请选择输出文件");
            }
            else
            {
                System.Drawing.Image img = System.Drawing.Image.FromFile(AudioPicTextBox.Text);
                // if not even number, chop 1 pixel out
                int newWidth = (img.Width % 2 == 0 ? img.Width : img.Width - 1);
                int newHeight = (img.Height % 2 == 0 ? img.Height : img.Height - 1);
                Rectangle cropArea;
                if (img.Width % 2 != 0 || img.Height % 2 != 0)
                {
                    Bitmap bmp = new Bitmap(img);
                    cropArea = new Rectangle(0, 0, newWidth, newHeight);
                    img = (Image)bmp.Clone(cropArea, bmp.PixelFormat);
                }

                //if (img.Width % 2 != 0 || img.Height % 2 != 0)
                //{
                //    MessageBox.Show("图片的长和宽必须是偶数。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //    img.Dispose();
                //    return;
                //}
                //if (img.RawFormat.Equals(ImageFormat.Jpeg))
                //{
                //    File.Copy(AudioPicTextBox.Text, tempPic, true);
                //}
                //else
                {
                    System.Drawing.Imaging.Encoder ImageEncoder = System.Drawing.Imaging.Encoder.Quality;
                    EncoderParameter ep = new EncoderParameter(ImageEncoder, 100L);
                    EncoderParameters eps = new EncoderParameters(1);
                    ImageCodecInfo ImageCoderType = getImageCoderInfo("image/jpeg");
                    eps.Param[0] = ep;
                    img.Save(tempPic, ImageCoderType, eps);
                    //img.Save(tempPic, ImageFormat.Jpeg);
                }
                //获得音频时长
                MediaInfo MI = new MediaInfo();
                MI.Open(AudioPicAudioTextBox.Text);
                int seconds = SecondsFromHHMMSS(MI.Get(StreamKind.General, 0, "Duration/String3"));
                string ffPath = Path.Combine(workPath, "ffmpeg.exe");
                string neroPath = Path.Combine(workPath, "neroaacenc.exe");
                if (AudioCopyCheckBox.Checked)
                {
                    mux = "\"" + ffPath + "\" -loop 1 -r " + OnePicFPSNum.Value.ToString() + " -t " + seconds.ToString() + " -f image2 -i \"" + tempPic + "\" -c:v libx264 -crf " + OnePicCRFNum.Value.ToString() + " -y SinglePictureVideo.mp4\r\n";
                    mux += "\"" + ffPath + "\" -i SinglePictureVideo.mp4 -i \"" + AudioPicAudioTextBox.Text + "\" -c:v copy -c:a copy -y \"" + AudioOnePicOutputTextBox.Text + "\"\r\n";
                    mux += "del SinglePictureVideo.mp4\r\n";
                    mux += "cmd";
                }
                else
                {
                    mux = "\"" + ffPath + "\" -i \"" + AudioPicAudioTextBox.Text + "\" -f wav - |" + neroPath + " -br " + OnePicAudioBitrateNum.Value.ToString() + "000 -ignorelength -if - -of audio.mp4 -lc\r\n";
                    mux += "\"" + ffPath + "\" -loop 1 -r " + OnePicFPSNum.Value.ToString() + " -t " + seconds.ToString() + " -f image2 -i \"" + tempPic + "\" -c:v libx264 -crf " + OnePicCRFNum.Value.ToString() + " -y SinglePictureVideo.mp4\r\n";
                    mux += "\"" + ffPath + "\" -i SinglePictureVideo.mp4 -i audio.mp4 -c:v copy -c:a copy -y \"" + AudioOnePicOutputTextBox.Text + "\"\r\n";
                    mux += "del SinglePictureVideo.mp4\r\ndel audio.mp4\r\n";
                    mux += "cmd";
                }
                /*
                string audioPath = AddExt(Path.GetFileName(AudioPicAudioTextBox.Text), "_atmp.mp4");
                string videoPath = AddExt(Path.GetFileName(AudioPicAudioTextBox.Text), "_vtmp.mp4");
                string picturePath = "c:\\" + Path.GetFileNameWithoutExtension(AudioPicTextBox.Text) + "_tmp.jpg";
                if (AudioCopyCheckBox.Checked)
                {
                    mux = "ffmpeg -loop 1 -r " + AudioOnePicFPSNum.Value.ToString() + " -t " + seconds.ToString() + " -f image2 -i \"" + picturePath + "\" -vcodec libx264 -crf 24 -y \"" + videoPath + "\"\r\n";
                    mux += "ffmpeg -i \"" + videoPath + "\" -i \"" + AudioPicAudioTextBox.Text + "\" -c:v copy -c:a copy -y \"" + AudioOnePicOutputTextBox.Text + "\"\r\n";
                    mux += "del \"" + videoPath + "\"\r\ndel \"" + picturePath + "\"\r\n";
                }
                else
                {
                    mux = "ffmpeg -i \"" + AudioPicAudioTextBox.Text + "\" -f wav - |neroaacenc -br " + AudioOnePicAudioBitrateNum.Value.ToString() + "000 -ignorelength -if - -of \"" + audioPath + "\" -lc\r\n";
                    mux += "ffmpeg -loop 1 -r " + AudioOnePicFPSNum.Value.ToString() + " -t " + seconds.ToString() + " -f image2 -i \"" + picturePath + "\" -vcodec libx264 -crf 24 -y \"" + videoPath + "\"\r\n";
                    mux += "ffmpeg -i \"" + videoPath + "\" -i \"" + audioPath + "\" -c:v copy -c:a copy -y \"" + AudioOnePicOutputTextBox.Text + "\"\r\n";
                    mux += "del \"" + videoPath + "\"\r\ndel \"" + audioPath + "\"\r\ndel \"" + picturePath + "\"\r\n";
                }
                */
                batpath = Path.Combine(workPath, Path.GetRandomFileName() + ".bat");
                File.WriteAllText(batpath, mux, Encoding.Default);
                LogRecord(mux);
                Process.Start(batpath);
            }
        }
Beispiel #16
0
        public string x264bat(string input, string output, int pass = 1, string sub = "")
        {
            StringBuilder sb = new StringBuilder();
            //keyint设为fps的10倍
            MediaInfo MI = new MediaInfo();
            MI.Open(input);
            string frameRate = MI.Get(StreamKind.Video, 0, "FrameRate");
            double fps;
            string keyint = "-1";
            if (double.TryParse(frameRate, out fps))
            {
                fps = Math.Round(fps);
                keyint = (fps * 10).ToString();
            }

            if (Path.GetExtension(input) == ".avs")
                sb.Append("\"" + workPath + "\\avs4x26x.exe\"" + " -L ");
            sb.Append("\"" + Path.Combine(workPath, x264ExeComboBox.SelectedItem.ToString()) + "\"");
            // 编码模式
            switch (x264mode)
            {
                case 0: // 自定义
                    sb.Append(" " + x264CustomParameterTextBox.Text);
                    break;

                case 1: // crf
                    sb.Append(" --crf " + x264CRFNum.Value);
                    break;

                case 2: // 2pass
                    sb.Append(" --pass " + pass + " --bitrate " + x264BitrateNum.Value + " --stats \"" + Path.Combine(tempfilepath, Path.GetFileNameWithoutExtension(output)) + ".stats\"");
                    break;
            }
            if (x264mode != 0)
            {
                if (x264DemuxerComboBox.Text != "auto" && x264DemuxerComboBox.Text != string.Empty)
                    sb.Append(" --demuxer " + x264DemuxerComboBox.Text);
                if (x264ThreadsComboBox.SelectedItem.ToString() != "auto" && x264ThreadsComboBox.SelectedItem.ToString() != string.Empty)
                    sb.Append(" --threads " + x264ThreadsComboBox.SelectedItem.ToString());
                if (x264extraLine.Text != string.Empty)
                    sb.Append(" " + x264extraLine.Text);
                else
                    sb.Append(" --preset 8 " + " -I " + keyint + " -r 4 -b 3 --me umh -i 1 --scenecut 60 -f 1:1 --qcomp 0.5 --psy-rd 0.3:0 --aq-mode 2 --aq-strength 0.8");
                if (x264HeightNum.Value != 0 && x264WidthNum.Value != 0 && !MaintainResolutionCheckBox.Checked)
                    sb.Append(" --vf resize:" + x264WidthNum.Value + "," + x264HeightNum.Value + ",,,,lanczos");
            }
            if (!string.IsNullOrEmpty(sub))
            {
                string x264tmpline = sb.ToString();
                if (x264tmpline.IndexOf("--vf") == -1)
                    sb.Append(" --vf subtitles --sub \"" + sub + "\"");
                else
                {
                    Regex r = new Regex("--vf\\s\\S*");
                    Match m = r.Match(x264tmpline);
                    sb.Insert(m.Index + 5, "subtitles/").Append(" --sub \"" + sub + "\"");
                }
            }
            if (x264SeekNumericUpDown.Value != 0)
                sb.Append(" --seek " + x264SeekNumericUpDown.Value.ToString());
            if (x264FramesNumericUpDown.Value != 0)
                sb.Append(" --frames " + x264FramesNumericUpDown.Value.ToString());
            if (x264mode == 2 && pass == 1)
                sb.Append(" -o NUL");
            else if (!string.IsNullOrEmpty(output))
                sb.Append(" -o " + "\"" + output + "\"");
            if (!string.IsNullOrEmpty(input))
                sb.Append(" \"" + input + "\"");
            return sb.ToString();
        }
Beispiel #17
0
        private void btnBatchMP4_Click(object sender, EventArgs e)
        {
            if (lbffmpeg.Items.Count != 0)
            {
                string ext = MuxFormatComboBox.Text;
                string mux = "";
                for (int i = 0; i < lbffmpeg.Items.Count; i++)
                {
                    string filePath = lbffmpeg.Items[i].ToString();
                    //如果是源文件的格式和目标格式相同则跳过
                    if (Path.GetExtension(filePath).Contains(ext))
                        continue;
                    string finish = Path.ChangeExtension(filePath, ext);
                    aextract = "";

                    //检测音频是否需要转换为AAC
                    MediaInfo MI = new MediaInfo();
                    MI.Open(filePath);
                    string audio = MI.Get(StreamKind.Audio, 0, "Format");
                    if (audio.ToLower() != "aac")
                    {
                        mux += "\"" + workPath + "\\ffmpeg.exe\" -y -i \"" + lbffmpeg.Items[i].ToString() + "\" -c:v copy -c:a " + MuxAacEncoderComboBox.Text + " -strict -2 \"" + finish + "\" \r\n";
                    }
                    else
                    {
                        mux += "\"" + workPath + "\\ffmpeg.exe\" -y -i \"" + lbffmpeg.Items[i].ToString() + "\" -c copy \"" + finish + "\" \r\n";
                    }
                }
                mux += "\r\ncmd";
                batpath = workPath + "\\mux.bat";
                File.WriteAllText(batpath, mux, Encoding.Default);
                LogRecord(mux);
                Process.Start(batpath);
            }
            else ShowErrorMessage("请输入视频!");
        }
Beispiel #18
0
        public string GetMediaInfoString(string VideoName)
        {
            StringBuilder info = new StringBuilder();
            if (File.Exists(VideoName))
            {
                MediaInfo MI = new MediaInfo();
                MI.Open(VideoName);
                //全局
                string container = MI.Get(StreamKind.General, 0, "Format");
                string bitRate = MI.Get(StreamKind.General, 0, "BitRate/String");
                string duration = MI.Get(StreamKind.General, 0, "Duration/String1");
                string fileSize = MI.Get(StreamKind.General, 0, "FileSize/String");
                //视频
                string v_id = MI.Get(StreamKind.Video, 0, "ID");
                string v_format = MI.Get(StreamKind.Video, 0, "Format");
                string v_bitRate = MI.Get(StreamKind.Video, 0, "BitRate/String");
                string v_size = MI.Get(StreamKind.Video, 0, "StreamSize/String");
                string v_width = MI.Get(StreamKind.Video, 0, "Width");
                string v_height = MI.Get(StreamKind.Video, 0, "Height");
                string v_displayAspectRatio = MI.Get(StreamKind.Video, 0, "DisplayAspectRatio/String");
                string v_displayAspectRatio2 = MI.Get(StreamKind.Video, 0, "DisplayAspectRatio");
                string v_frameRate = MI.Get(StreamKind.Video, 0, "FrameRate/String");
                string v_colorSpace = MI.Get(StreamKind.Video, 0, "ColorSpace");
                string v_chromaSubsampling = MI.Get(StreamKind.Video, 0, "ChromaSubsampling");
                string v_bitDepth = MI.Get(StreamKind.Video, 0, "BitDepth/String");
                string v_scanType = MI.Get(StreamKind.Video, 0, "ScanType/String");
                string v_pixelAspectRatio = MI.Get(StreamKind.Video, 0, "PixelAspectRatio");
                string v_encodedLibrary = MI.Get(StreamKind.Video, 0, "Encoded_Library/String");
                string v_encodingSettings = MI.Get(StreamKind.Video, 0, "Encoded_Library_Settings");
                string v_encodedTime = MI.Get(StreamKind.Video, 0, "Encoded_Date");
                string v_codecProfile = MI.Get(StreamKind.Video, 0, "Codec_Profile");
                string v_frameCount = MI.Get(StreamKind.Video, 0, "FrameCount");

                //音频
                string a_id = MI.Get(StreamKind.Audio, 0, "ID");
                string a_format = MI.Get(StreamKind.Audio, 0, "Format");
                string a_bitRate = MI.Get(StreamKind.Audio, 0, "BitRate/String");
                string a_samplingRate = MI.Get(StreamKind.Audio, 0, "SamplingRate/String");
                string a_channel = MI.Get(StreamKind.Audio, 0, "Channel(s)");
                string a_size = MI.Get(StreamKind.Audio, 0, "StreamSize/String");

                string audioInfo = MI.Get(StreamKind.Audio, 0, "Inform")
                    + MI.Get(StreamKind.Audio, 1, "Inform")
                    + MI.Get(StreamKind.Audio, 2, "Inform")
                    + MI.Get(StreamKind.Audio, 3, "Inform");
                string videoInfo = MI.Get(StreamKind.Video, 0, "Inform");

                info = info.Append(Path.GetFileName(VideoName) + "\r\n");
                if (!string.IsNullOrEmpty(container))
                    info.Append("容器:" + container + "\r\n");
                if (!string.IsNullOrEmpty(bitRate))
                    info.Append("总码率:" + bitRate + "\r\n");
                if (!string.IsNullOrEmpty(fileSize))
                    info.Append("大小:" + fileSize + "\r\n");
                if (!string.IsNullOrEmpty(duration))
                    info.Append("时长:" + duration + "\r\n");

                if (!string.IsNullOrEmpty(v_format))
                    info.Append("\r\n" + "视频(" + v_id + "):" + v_format + "\r\n");
                if (!string.IsNullOrEmpty(v_codecProfile))
                    info.Append("Profile:" + v_codecProfile + "\r\n");
                if (!string.IsNullOrEmpty(v_bitRate))
                    info.Append("码率:" + v_bitRate + "\r\n");
                if (!string.IsNullOrEmpty(v_size))
                    info.Append("文件大小:" + v_size + "\r\n");
                if (!string.IsNullOrEmpty(v_width) && !string.IsNullOrEmpty(v_height))
                    info.Append("分辨率:" + v_width + "x" + v_height + "\r\n");
                if (!string.IsNullOrEmpty(v_displayAspectRatio) && !string.IsNullOrEmpty(v_displayAspectRatio2))
                    info.Append("画面比例:" + v_displayAspectRatio + "(" + v_displayAspectRatio2 + ")" + "\r\n");
                if (!string.IsNullOrEmpty(v_pixelAspectRatio))
                    info.Append("像素宽高比:" + v_pixelAspectRatio + "\r\n");
                if (!string.IsNullOrEmpty(v_frameRate))
                    info.Append("帧率:" + v_frameRate + "\r\n");
                if (!string.IsNullOrEmpty(v_colorSpace))
                    info.Append("色彩空间:" + v_colorSpace + "\r\n");
                if (!string.IsNullOrEmpty(v_chromaSubsampling))
                    info.Append("色度抽样:" + v_chromaSubsampling + "\r\n");
                if (!string.IsNullOrEmpty(v_bitDepth))
                    info.Append("位深度:" + v_bitDepth + "\r\n");
                if (!string.IsNullOrEmpty(v_scanType))
                    info.Append("扫描方式:" + v_scanType + "\r\n");
                if (!string.IsNullOrEmpty(v_encodedTime))
                    info.Append("编码时间:" + v_encodedTime + "\r\n");
                if (!string.IsNullOrEmpty(v_frameCount))
                    info.Append("总帧数:" + v_frameCount + "\r\n");
                if (!string.IsNullOrEmpty(v_encodedLibrary))
                    info.Append("编码库:" + v_encodedLibrary + "\r\n");
                if (!string.IsNullOrEmpty(v_encodingSettings))
                    info.Append("编码设置:" + v_encodingSettings + "\r\n");

                if (!string.IsNullOrEmpty(a_format))
                    info.Append("\r\n" + "音频(" + a_id + "):" + a_format + "\r\n");
                if (!string.IsNullOrEmpty(a_size))
                    info.Append("大小:" + a_size + "\r\n");
                if (!string.IsNullOrEmpty(a_bitRate))
                    info.Append("码率:" + a_bitRate + "\r\n");
                if (!string.IsNullOrEmpty(a_samplingRate))
                    info.Append("采样率:" + a_samplingRate + "\r\n");
                if (!string.IsNullOrEmpty(a_channel))
                    info.Append("声道数:" + a_channel + "\r\n");
                info.Append("\r\n====详细信息====\r\n" + videoInfo + "\r\n" + audioInfo + "\r\n");
                MI.Close();
            }
            else
                info.Append("文件不存在、非有效文件或者文件夹 无视频信息");
            return info.ToString();
        }
Beispiel #19
0
        private void ReadDirectory()
        {
            // if a folder then read all media files
            // append all the durations and save in Duration
            if (Directory.Exists(Location))
            {
                // get largest file
                FileCollection = GetFilesToProcess(Location);
                List <FileInfo> listFileInfo = new List <FileInfo>();
                foreach (string fp in FileCollection)
                {
                    listFileInfo.Add(new FileInfo(fp));
                }

                // Subtitles, Format: DVD Video using VTS_01_0.IFO
                string[] ifo = Directory.GetFiles(Location, "VTS_01_0.IFO", SearchOption.AllDirectories);
                if (ifo.Length == 1) // CHECK IF A DVD
                {
                    this.MediaTypeChoice = MediaType.MediaDisc;
                    MediaInfoLib.MediaInfo mi = new MediaInfoLib.MediaInfo();
                    this.DiscType = TDMakerLib.SourceType.DVD;

                    mi.Open(ifo[0]);

                    // most prolly this will be: DVD Video
                    this.Overall.Format = mi.Get(StreamKind.General, 0, "Format");

                    int subCount = 0;
                    int.TryParse(mi.Get(StreamKind.Text, 0, "StreamCount"), out subCount);

                    if (subCount > 0)
                    {
                        List <string> langs = new List <string>();
                        for (int i = 0; i < subCount; i++)
                        {
                            string lang = mi.Get(StreamKind.Text, i, "Language/String");
                            if (!string.IsNullOrEmpty(lang))
                            {
                                // System.Windows.Forms.MessageBox.Show(lang);
                                if (!langs.Contains(lang))
                                {
                                    langs.Add(lang);
                                }
                            }
                        }
                        StringBuilder sbLangs = new StringBuilder();
                        for (int i = 0; i < langs.Count; i++)
                        {
                            sbLangs.Append(langs[i]);
                            if (i < langs.Count - 1)
                            {
                                sbLangs.Append(", ");
                            }
                        }

                        this.Overall.Subtitles = sbLangs.ToString();
                    }

                    // close ifo file
                    mi.Close();

                    // AFTER IDENTIFIED THE MEDIA TYPE IS A DVD
                    listFileInfo.RemoveAll(x => x.Length < 1000000000);
                }

                // Set Media Type
                bool allAudio = Adapter.MediaIsAudio(FileCollection);
                if (allAudio)
                {
                    this.MediaTypeChoice = MediaType.MusicAudioAlbum;
                }

                if (FileCollection.Count > 0)
                {
                    foreach (FileInfo fi in listFileInfo)
                    {
                        this.AddMedia(new MediaFile(fi.FullName, this.Source));
                    }

                    this.Overall = new MediaFile(FileSystemHelper.GetLargestFilePathFromDir(Location), this.Source);

                    // Set Overall File Name
                    this.Overall.FileName = Path.GetFileName(Location);
                    if (Overall.FileName.ToUpper().Equals("VIDEO_TS"))
                    {
                        Overall.FileName = Path.GetFileName(Path.GetDirectoryName(Location));
                    }
                    if (string.IsNullOrEmpty(Title))
                    {
                        this.Title = this.Overall.FileName;
                    }
                }

                // DVD Video
                // Combined Duration and File Size
                if (MediaTypeChoice == MediaType.MediaDisc)
                {
                    if (listFileInfo.Count > 0)
                    {
                        long   dura = 0;
                        double size = 0;
                        foreach (FileInfo fiVob in listFileInfo)
                        {
                            MediaInfoLib.MediaInfo mi = new MediaInfoLib.MediaInfo();
                            mi.Open(fiVob.FullName);
                            string temp = mi.Get(0, 0, "Duration");
                            if (!string.IsNullOrEmpty(temp))
                            {
                                long d = 0;
                                long.TryParse(temp, out d);
                                dura += d;
                            }

                            // we are interested in combined file size only for VOB files
                            // thats why we dont calculate FileSize in FileInfo while determining largest file
                            double sz = 0;
                            double.TryParse(mi.Get(0, 0, "FileSize"), out sz);
                            size += sz;

                            // close vob file
                            mi.Close();
                        }

                        this.Overall.FileSize       = size; // override any previous file size
                        this.Overall.FileSizeString = string.Format("{0} MiB", (this.Overall.FileSize / 1024.0 / 1024.0).ToString("0.00"));

                        this.Overall.Duration        = dura;
                        this.Overall.DurationString2 = Program.GetDurationString(dura);
                    }
                }
            } // if Location is a directory
        }
        static void Main(string[] Args)
        {
            String ToDisplay;
            MediaInfo MI = new MediaInfo();

            ToDisplay = MI.Option("Info_Version", "0.7.0.0;MediaInfoDLL_Example_CS;0.7.0.0");
            if (ToDisplay.Length == 0)
            {
                Console.Out.WriteLine("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";
            String File_Name;
            if (Args.Length == 0)
                File_Name = "Example.ogg";
            else
                File_Name = Args[0];
            MI.Open(File_Name);

            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(StreamKind.Audio);

            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter='AudioCount'\r\n";
            ToDisplay += MI.Get(StreamKind.General, 0, "AudioCount");

            ToDisplay += "\r\n\r\nGet with Stream=Audio and Parameter='StreamCount'\r\n";
            ToDisplay += MI.Get(StreamKind.Audio, 0, "StreamCount");

            ToDisplay += "\r\n\r\nClose\r\n";
            MI.Close();

            //Displaying the text
            Console.Out.WriteLine(ToDisplay);

            Console.Out.WriteLine("Press a key to close window.");
            Console.Read();
        }
Beispiel #21
0
        public string MediaInfo(string VideoName)
        {
            string info = "无视频信息";
            if (File.Exists(VideoName))
            {
                MediaInfo MI = new MediaInfo();
                MI.Open(VideoName);
                //全局
                string container = MI.Get(StreamKind.General, 0, "Format");
                string bitrate = MI.Get(StreamKind.General, 0, "BitRate/String");
                string duration = MI.Get(StreamKind.General, 0, "Duration/String1");
                string fileSize = MI.Get(StreamKind.General, 0, "FileSize/String");
                //视频
                string vid = MI.Get(StreamKind.Video, 0, "ID");
                string video = MI.Get(StreamKind.Video, 0, "Format");
                string vBitRate = MI.Get(StreamKind.Video, 0, "BitRate/String");
                string vSize = MI.Get(StreamKind.Video, 0, "StreamSize/String");
                string width = MI.Get(StreamKind.Video, 0, "Width");
                string height = MI.Get(StreamKind.Video, 0, "Height");
                string risplayAspectRatio = MI.Get(StreamKind.Video, 0, "DisplayAspectRatio/String");
                string risplayAspectRatio2 = MI.Get(StreamKind.Video, 0, "DisplayAspectRatio");
                string frameRate = MI.Get(StreamKind.Video, 0, "FrameRate/String");
                string bitDepth = MI.Get(StreamKind.Video, 0, "BitDepth/String");
                string pixelAspectRatio = MI.Get(StreamKind.Video, 0, "PixelAspectRatio");
                string encodedLibrary = MI.Get(StreamKind.Video, 0, "Encoded_Library");
                string encodeTime = MI.Get(StreamKind.Video, 0, "Encoded_Date");
                string codecProfile = MI.Get(StreamKind.Video, 0, "Codec_Profile");
                string frameCount = MI.Get(StreamKind.Video, 0, "FrameCount");

                //音频
                string aid = MI.Get(StreamKind.Audio, 0, "ID");
                string audio = MI.Get(StreamKind.Audio, 0, "Format");
                string aBitRate = MI.Get(StreamKind.Audio, 0, "BitRate/String");
                string samplingRate = MI.Get(StreamKind.Audio, 0, "SamplingRate/String");
                string channel = MI.Get(StreamKind.Audio, 0, "Channel(s)");
                string aSize = MI.Get(StreamKind.Audio, 0, "StreamSize/String");

                string audioInfo = MI.Get(StreamKind.Audio, 0, "Inform") + MI.Get(StreamKind.Audio, 1, "Inform") + MI.Get(StreamKind.Audio, 2, "Inform") + MI.Get(StreamKind.Audio, 3, "Inform");
                string videoInfo = MI.Get(StreamKind.Video, 0, "Inform");

                info = Path.GetFileName(VideoName) + "\r\n" +
                    "容器:" + container + "\r\n" +
                    "总码率:" + bitrate + "\r\n" +
                    "大小:" + fileSize + "\r\n" +
                    "时长:" + duration + "\r\n" +
                    "\r\n" +
                    "视频(" + vid + "):" + video + "\r\n" +
                    "码率:" + vBitRate + "\r\n" +
                    "大小:" + vSize + "\r\n" +
                    "分辨率:" + width + "x" + height + "\r\n" +
                    "宽高比:" + risplayAspectRatio + "(" + risplayAspectRatio2 + ")" + "\r\n" +
                    "帧率:" + frameRate + "\r\n" +
                    "位深度:" + bitDepth + "\r\n" +
                    "像素宽高比:" + pixelAspectRatio + "\r\n" +
                    "编码库:" + encodedLibrary + "\r\n" +
                    "Profile:" + codecProfile + "\r\n" +
                    "编码时间:" + encodeTime + "\r\n" +
                    "总帧数:" + frameCount + "\r\n" +

                    "\r\n" +
                    "音频(" + aid + "):" + audio + "\r\n" +
                    "大小:" + aSize + "\r\n" +
                    "码率:" + aBitRate + "\r\n" +
                    "采样率:" + samplingRate + "\r\n" +
                    "声道数:" + channel + "\r\n" +
                    "\r\n====详细信息====\r\n" +
                    videoInfo + "\r\n" +
                    audioInfo + "\r\n"
                    ;
                MI.Close();
            }
            return info;
        }
        private void media_info()
        {
            try
            {
                MediaInfo MI = new MediaInfo();
                MI.Open(inputfilename);
                if (MI.Count_Get(StreamKind.Video) > 0)
                {
                    InputWidth = Convert.ToInt32(MI.Get(StreamKind.Video, 0, "Width"));
                    InputHeight = Convert.ToInt32(MI.Get(StreamKind.Video, 0, "Height"));
                    frames = Convert.ToInt32(MI.Get(StreamKind.Video, 0, "FrameCount"));
                    videoFormat = MI.Get(StreamKind.Video, 0, "Format");
                    videoFormatVersion = MI.Get(StreamKind.Video, 0, "Format_Version");
                    videoFormatProfile = MI.Get(StreamKind.Video, 0, "Format_Profile");
                }

                if (MI.Count_Get(StreamKind.Audio) > 0)
                {
                    audioFormat = MI.Get(StreamKind.Audio, 0, "Format");
                    audioFormatVersion = MI.Get(StreamKind.Audio, 0, "Format_Version");
                    audioFormatProfile = MI.Get(StreamKind.Audio, 0, "Format_Profile");
                    audioSamplingRate = Convert.ToInt32(MI.Get(StreamKind.Audio, 0, "SamplingRate"));
                }

                MI.Close();
            }
            catch (System.Exception excep)
            {
                MessageBox.Show("An error occured while opening the file. \r\nThe following error message was reported: \r\n" + excep.Message, "Error");
            }
        }
Beispiel #23
0
 private static string GetInfo(string file_from, string param)
 {
     string result = string.Empty;
     MediaInfo mi = new MediaInfo();
     mi.Open(file_from);
     result = mi.Get(StreamKind.Audio, 0, param).ToUpperInvariant();
     return result;
 }
        private MediaInfoData GetMediaInfo(string location, MediaType mediaType)
        {
            Logger.ReportInfo("Getting media info from " + location);
            MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo();
            mediaInfo.Option("ParseSpeed", "0.2");
            int           i             = mediaInfo.Open(location);
            MediaInfoData mediaInfoData = null;

            if (i != 0)
            {
                string subtitles = mediaInfo.Get(StreamKind.General, 0, "Text_Language_List");
                string scanType  = mediaInfo.Get(StreamKind.Video, 0, "ScanType");
                int    width;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Width"), out width);
                int height;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Height"), out height);
                int videoBitRate;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);

                int    audioBitRate;
                string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                int    ABindex  = aBitRate.IndexOf(" /");
                if (ABindex > 0)
                {
                    aBitRate = aBitRate.Remove(ABindex);
                }
                Int32.TryParse(aBitRate, out audioBitRate);

                int runTime;
                Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out runTime);
                int streamCount;
                Int32.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "StreamCount"), out streamCount);

                string audioChannels = mediaInfo.Get(StreamKind.Audio, 0, "Channel(s)");
                int    ACindex       = audioChannels.IndexOf(" /");
                if (ACindex > 0)
                {
                    audioChannels = audioChannels.Remove(ACindex);
                }

                string audioLanguages = mediaInfo.Get(StreamKind.General, 0, "Audio_Language_List");

                string videoFrameRate = mediaInfo.Get(StreamKind.Video, 0, "FrameRate");

                string audioProfile = mediaInfo.Get(StreamKind.Audio, 0, "Format_Profile");
                int    APindex      = audioProfile.IndexOf(" /");
                if (APindex > 0)
                {
                    audioProfile = audioProfile.Remove(APindex);
                }



                mediaInfoData = new MediaInfoData
                {
                    PluginData = new MediaInfoData.MIData()
                    {
                        VideoCodec   = mediaInfo.Get(StreamKind.Video, 0, "Codec/String"),
                        VideoBitRate = videoBitRate,
                        //MI.Get(StreamKind.Video, 0, "DisplayAspectRatio")),
                        Height = height,
                        Width  = width,
                        //MI.Get(StreamKind.Video, 0, "Duration/String3")),
                        AudioFormat       = mediaInfo.Get(StreamKind.Audio, 0, "Format"),
                        AudioBitRate      = audioBitRate,
                        RunTime           = (runTime / 60000),
                        AudioStreamCount  = streamCount,
                        AudioChannelCount = audioChannels.Trim(),
                        AudioProfile      = audioProfile.Trim(),
                        VideoFPS          = videoFrameRate,
                        AudioLanguages    = audioLanguages,
                        Subtitles         = subtitles,
                        ScanType          = scanType
                    }
                };
            }
            else
            {
                Logger.ReportInfo("Could not extract media information from " + location);
            }
            if (mediaType == MediaType.DVD && i != 0)
            {
                mediaInfo.Close();
                location = location.Replace("0.IFO", "1.vob");
                Logger.ReportInfo("Getting additional media info from " + location);
                mediaInfo.Option("ParseSpeed", "0.0");
                i = mediaInfo.Open(location);
                if (i != 0)
                {
                    int videoBitRate;
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);

                    int    audioBitRate;
                    string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                    int    ABindex  = aBitRate.IndexOf(" /");
                    if (ABindex > 0)
                    {
                        aBitRate = aBitRate.Remove(ABindex);
                    }
                    Int32.TryParse(aBitRate, out audioBitRate);
                    string scanType = mediaInfo.Get(StreamKind.Video, 0, "ScanType");

                    mediaInfoData.PluginData.AudioBitRate = audioBitRate;
                    mediaInfoData.PluginData.VideoBitRate = videoBitRate;
                    mediaInfoData.PluginData.ScanType     = scanType;
                }
                else
                {
                    Logger.ReportInfo("Could not extract additional media info from " + location);
                }
            }
            mediaInfo.Close();
            return(mediaInfoData);
        }
Beispiel #25
0
        public MediaInfoModel GetMediaInfo(string filename)
        {
            if (!_diskProvider.FileExists(filename))
            {
                throw new FileNotFoundException("Media file does not exist: " + filename);
            }

            MediaInfoLib.MediaInfo mediaInfo = null;

            try
            {
                mediaInfo = new MediaInfoLib.MediaInfo();
                _logger.Debug("Getting media info from {0}", filename);

                mediaInfo.Option("ParseSpeed", "0.2");
                int open = mediaInfo.Open(filename);

                if (open != 0)
                {
                    int     width;
                    int     height;
                    int     videoBitRate;
                    int     audioBitRate;
                    int     audioRuntime;
                    int     videoRuntime;
                    int     generalRuntime;
                    int     streamCount;
                    int     audioChannels;
                    decimal videoFrameRate;

                    string subtitles = mediaInfo.Get(StreamKind.General, 0, "Text_Language_List");
                    string scanType  = mediaInfo.Get(StreamKind.Video, 0, "ScanType");
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Width"), out width);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Height"), out height);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);
                    Decimal.TryParse(mediaInfo.Get(StreamKind.Video, 0, "FrameRate"), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out videoFrameRate);

                    //Runtime
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "PlayTime"), out videoRuntime);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "PlayTime"), out audioRuntime);
                    Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out generalRuntime);

                    string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                    int    aBindex  = aBitRate.IndexOf(" /", StringComparison.InvariantCultureIgnoreCase);
                    if (aBindex > 0)
                    {
                        aBitRate = aBitRate.Remove(aBindex);
                    }

                    Int32.TryParse(aBitRate, out audioBitRate);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "StreamCount"), out streamCount);


                    string audioChannelsStr = mediaInfo.Get(StreamKind.Audio, 0, "Channel(s)");
                    int    aCindex          = audioChannelsStr.IndexOf(" /", StringComparison.InvariantCultureIgnoreCase);
                    if (aCindex > 0)
                    {
                        audioChannelsStr = audioChannelsStr.Remove(aCindex);
                    }

                    string audioLanguages = mediaInfo.Get(StreamKind.General, 0, "Audio_Language_List");
                    string audioProfile   = mediaInfo.Get(StreamKind.Audio, 0, "Format_Profile");

                    int aPindex = audioProfile.IndexOf(" /", StringComparison.InvariantCultureIgnoreCase);
                    if (aPindex > 0)
                    {
                        audioProfile = audioProfile.Remove(aPindex);
                    }

                    Int32.TryParse(audioChannelsStr, out audioChannels);
                    var mediaInfoModel = new MediaInfoModel
                    {
                        VideoCodec       = mediaInfo.Get(StreamKind.Video, 0, "Codec/String"),
                        VideoBitrate     = videoBitRate,
                        Height           = height,
                        Width            = width,
                        AudioFormat      = mediaInfo.Get(StreamKind.Audio, 0, "Format"),
                        AudioBitrate     = audioBitRate,
                        RunTime          = GetBestRuntime(audioRuntime, videoRuntime, generalRuntime),
                        AudioStreamCount = streamCount,
                        AudioChannels    = audioChannels,
                        AudioProfile     = audioProfile.Trim(),
                        VideoFps         = videoFrameRate,
                        AudioLanguages   = audioLanguages,
                        Subtitles        = subtitles,
                        ScanType         = scanType
                    };

                    return(mediaInfoModel);
                }
            }
            catch (DllNotFoundException ex)
            {
                _logger.ErrorException("mediainfo is required but was not found", ex);
            }
            catch (Exception ex)
            {
                _logger.ErrorException("Unable to parse media info from file: " + filename, ex);
            }
            finally
            {
                if (mediaInfo != null)
                {
                    mediaInfo.Close();
                }
            }

            return(null);
        }
Beispiel #26
0
        public static Media Convert(string filename, IFile file)
        {
            if (file == null)
            {
                return(null);
            }
            try
            {
                lock (_lock)
                {
                    Media  m = new Media();
                    Part   p = new Part();
                    Thread mediaInfoThread = new Thread(() =>
                    {
                        if (minstance == null)
                        {
                            minstance = new MediaInfoLib.MediaInfo();
                        }
                        if (minstance.Open(filename) == 0)
                        {
                            return;                                //it's a boolean response.
                        }
                        Stream VideoStream = null;

                        m.Duration = p.Duration = minstance.GetLong(StreamKind.General, 0, "Duration");
                        p.Size     = minstance.GetLong(StreamKind.General, 0, "FileSize");

                        int brate = minstance.GetInt(StreamKind.General, 0, "BitRate");
                        if (brate != 0)
                        {
                            m.Bitrate = (int)Math.Round(brate / 1000F);
                        }

                        int chaptercount = minstance.GetInt(StreamKind.General, 0, "MenuCount");
                        m.Chaptered      = chaptercount > 0;

                        int video_count = minstance.GetInt(StreamKind.General, 0, "VideoCount");
                        int audio_count = minstance.GetInt(StreamKind.General, 0, "AudioCount");
                        int text_count  = minstance.GetInt(StreamKind.General, 0, "TextCount");

                        m.Container  = p.Container = TranslateContainer(minstance.Get(StreamKind.General, 0, "Format"));
                        string codid = minstance.Get(StreamKind.General, 0, "CodecID");
                        if (!string.IsNullOrEmpty(codid) && (codid.Trim().ToLower() == "qt"))
                        {
                            m.Container = p.Container = "mov";
                        }

                        List <Stream> streams = new List <Stream>();
                        byte iidx             = 0;
                        if (video_count > 0)
                        {
                            for (int x = 0; x < video_count; x++)
                            {
                                Stream s = TranslateVideoStream(minstance, x);
                                if (x == 0)
                                {
                                    VideoStream = s;
                                    m.Width     = s.Width;
                                    m.Height    = s.Height;
                                    if (m.Height != 0)
                                    {
                                        if (m.Width != 0)
                                        {
                                            m.VideoResolution = GetResolution(m.Width, m.Height);
                                            m.AspectRatio     = GetAspectRatio(m.Width, m.Height, s.PA);
                                        }
                                    }
                                    if (s.FrameRate != 0)
                                    {
                                        float fr   = System.Convert.ToSingle(s.FrameRate);
                                        string frs = ((int)Math.Round(fr)).ToString(CultureInfo.InvariantCulture);
                                        if (!string.IsNullOrEmpty(s.ScanType))
                                        {
                                            if (s.ScanType.ToLower().Contains("int"))
                                            {
                                                frs += "i";
                                            }
                                            else
                                            {
                                                frs += "p";
                                            }
                                        }
                                        else
                                        {
                                            frs += "p";
                                        }
                                        if ((frs == "25p") || (frs == "25i"))
                                        {
                                            frs = "PAL";
                                        }
                                        else if ((frs == "30p") || (frs == "30i"))
                                        {
                                            frs = "NTSC";
                                        }
                                        m.VideoFrameRate = frs;
                                    }
                                    m.VideoCodec = string.IsNullOrEmpty(s.CodecID) ? s.Codec : s.CodecID;
                                    if (m.Duration != 0 && s.Duration != 0)
                                    {
                                        if (s.Duration > m.Duration)
                                        {
                                            m.Duration = p.Duration = s.Duration;
                                        }
                                    }
                                    if (video_count == 1)
                                    {
                                        s.Default = 0;
                                        s.Forced  = 0;
                                    }
                                }

                                if (m.Container != "mkv")
                                {
                                    s.Index = iidx;
                                    iidx++;
                                }
                                streams.Add(s);
                            }
                        }
                        int totalsoundrate = 0;
                        if (audio_count > 0)
                        {
                            for (int x = 0; x < audio_count; x++)
                            {
                                Stream s = TranslateAudioStream(minstance, x);
                                if ((s.Codec == "adpcm") && (p.Container == "flv"))
                                {
                                    s.Codec = "adpcm_swf";
                                }
                                if (x == 0)
                                {
                                    m.AudioCodec    = string.IsNullOrEmpty(s.CodecID) ? s.Codec : s.CodecID;
                                    m.AudioChannels = s.Channels;
                                    if (m.Duration != 0 && s.Duration != 0)
                                    {
                                        if (s.Duration > m.Duration)
                                        {
                                            m.Duration = p.Duration = s.Duration;
                                        }
                                    }
                                    if (audio_count == 1)
                                    {
                                        s.Default = 0;
                                        s.Forced  = 0;
                                    }
                                }
                                if (s.Bitrate != 0)
                                {
                                    totalsoundrate += s.Bitrate;
                                }
                                if (m.Container != "mkv")
                                {
                                    s.Index = iidx;
                                    iidx++;
                                }
                                streams.Add(s);
                            }
                        }
                        if ((VideoStream != null) && VideoStream.Bitrate == 0 && m.Bitrate != 0)
                        {
                            VideoStream.Bitrate = m.Bitrate - totalsoundrate;
                        }
                        if (text_count > 0)
                        {
                            for (int x = 0; x < audio_count; x++)
                            {
                                Stream s = TranslateTextStream(minstance, x);
                                streams.Add(s);
                                if (text_count == 1)
                                {
                                    s.Default = 0;
                                    s.Forced  = 0;
                                }
                                if (m.Container != "mkv")
                                {
                                    s.Index = iidx;
                                    iidx++;
                                }
                            }
                        }

                        m.Parts = new List <Part> {
                            p
                        };
                        bool over = false;
                        if (m.Container == "mkv")
                        {
                            byte val = byte.MaxValue;
                            foreach (Stream s in streams.OrderBy(a => a.Index).Skip(1))
                            {
                                if (s.Index <= 0)
                                {
                                    over = true;
                                    break;
                                }
                                s.idx = s.Index;
                                if (s.idx < val)
                                {
                                    val = s.idx;
                                }
                            }
                            if (val != 0 && !over)
                            {
                                foreach (Stream s in streams)
                                {
                                    s.idx   = (byte)(s.idx - val);
                                    s.Index = s.idx;
                                }
                            }
                            else if (over)
                            {
                                byte xx = 0;
                                foreach (Stream s in streams)
                                {
                                    s.idx   = xx++;
                                    s.Index = s.idx;
                                }
                            }
                            streams = streams.OrderBy(a => a.idx).ToList();
                        }
                        p.Streams = streams;
                    });
                    mediaInfoThread.Start();
                    bool finished = mediaInfoThread.Join(TimeSpan.FromMinutes(5)); //TODO Move Timeout to settings
                    if (!finished)
                    {
                        try
                        {
                            mediaInfoThread.Abort();
                        }
                        catch
                        {
                            /*ignored*/
                        }
                        try
                        {
                            CloseMediaInfo();
                        }
                        catch
                        {
                            /*ignored*/
                        }
                        return(null);
                    }
                    if ((p.Container == "mp4") || (p.Container == "mov"))
                    {
                        p.Has64bitOffsets       = 0;
                        p.OptimizedForStreaming = 0;
                        m.OptimizedForStreaming = 0;
                        byte[] buffer = new byte[8];
                        FileSystemResult <System.IO.Stream> fsr = file.OpenRead();
                        if (fsr == null || !fsr.IsOk)
                        {
                            return(null);
                        }
                        System.IO.Stream fs = fsr.Result;
                        fs.Read(buffer, 0, 4);
                        int siz = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
                        fs.Seek(siz, SeekOrigin.Begin);
                        fs.Read(buffer, 0, 8);
                        if ((buffer[4] == 'f') && (buffer[5] == 'r') && (buffer[6] == 'e') && (buffer[7] == 'e'))
                        {
                            siz = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | (buffer[3] - 8);
                            fs.Seek(siz, SeekOrigin.Current);
                            fs.Read(buffer, 0, 8);
                        }
                        if ((buffer[4] == 'm') && (buffer[5] == 'o') && (buffer[6] == 'o') && (buffer[7] == 'v'))
                        {
                            p.OptimizedForStreaming = 1;
                            m.OptimizedForStreaming = 1;
                            siz = ((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]) - 8;

                            buffer = new byte[siz];
                            fs.Read(buffer, 0, siz);
                            if (!FindInBuffer("trak", 0, siz, buffer, out int opos, out int oposmax))
                            {
                                return(m);
                            }
                            if (!FindInBuffer("mdia", opos, oposmax, buffer, out opos, out oposmax))
                            {
                                return(m);
                            }
                            if (!FindInBuffer("minf", opos, oposmax, buffer, out opos, out oposmax))
                            {
                                return(m);
                            }
                            if (!FindInBuffer("stbl", opos, oposmax, buffer, out opos, out oposmax))
                            {
                                return(m);
                            }
                            if (!FindInBuffer("co64", opos, oposmax, buffer, out opos, out oposmax))
                            {
                                return(m);
                            }
                            p.Has64bitOffsets = 1;
                        }
                    }
                    return(m);
                }
            }
            finally
            {
                minstance?.Close();

                GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
                GC.Collect();
            }
        }
Beispiel #27
0
        private void ExtractAV(string namevideo, string av, int streamIndex)
        {
            if (string.IsNullOrEmpty(namevideo))
            {
                ShowErrorMessage("请选择视频文件");
                return;
            }

            string ext = Path.GetExtension(namevideo);
            //aextract = "\"" + workPath + "\\mp4box.exe\" -raw 2 \"" + namevideo + "\"";
            string aextract = "";
            aextract += Util.FormatPath(workPath + "\\ffmpeg.exe");
            aextract += " -i " + Util.FormatPath(namevideo);
            if (av == "a")
            {
                aextract += " -vn -sn -c:a copy -y -map 0:a:" + streamIndex + " ";

                MediaInfo MI = new MediaInfo();
                MI.Open(namevideo);
                string audioFormat = MI.Get(StreamKind.Audio, streamIndex, "Format");
                string audioProfile = MI.Get(StreamKind.Audio, streamIndex, "Format_Profile");
                if (!string.IsNullOrEmpty(audioFormat))
                {
                    if (audioFormat.Contains("MPEG") && audioProfile == "Layer 3")
                        ext = ".mp3";
                    else if (audioFormat.Contains("MPEG") && audioProfile == "Layer 2")
                        ext = ".mp2";
                    else if (audioFormat.Contains("PCM")) //flv support(PCM_U8 * PCM_S16BE * PCM_MULAW * PCM_ALAW * ADPCM_SWF)
                        ext = ".wav";
                    else if (audioFormat == "AAC")
                        ext = ".aac";
                    else if (audioFormat == "AC-3")
                        ext = ".ac3";
                    else if (audioFormat == "ALAC")
                        ext = ".m4a";
                    else
                        ext = ".mka";
                }
                else
                {
                    ShowInfoMessage("该轨道无音频");
                    return;
                }
            }
            else if (av == "v")
            {
                aextract += " -an -sn -c:v copy -y -map 0:v:" + streamIndex + " ";
            }
            else
            {
                throw new Exception("未知流!");
            }
            string suf = "_audio_";
            if (av == "v")
            {
                suf = "_video_";
            }
            suf += "index" + streamIndex;
            string outfile = Util.GetDir(namevideo) +
                Path.GetFileNameWithoutExtension(namevideo) + suf + ext;
            aextract += Util.FormatPath(outfile);
            batpath = workPath + "\\" + av + "extract.bat";
            File.WriteAllText(batpath, aextract, Encoding.Default);
            LogRecord(aextract);
            Process.Start(batpath);
        }
        public MediaInfoModel GetMediaInfo(string filename)
        {
            if (!_diskProvider.FileExists(filename))
            {
                throw new FileNotFoundException("Media file does not exist: " + filename);
            }

            var mediaInfo = new MediaInfoLib.MediaInfo();

            try
            {
                _logger.Trace("Getting media info from {0}", filename);

                mediaInfo.Option("ParseSpeed", "0.2");
                int open = mediaInfo.Open(filename);

                if (open != 0)
                {
                    int width;
                    int height;
                    int videoBitRate;
                    int audioBitRate;
                    int runTime;
                    int streamCount;
                    int audioChannels;

                    string subtitles = mediaInfo.Get(StreamKind.General, 0, "Text_Language_List");
                    string scanType  = mediaInfo.Get(StreamKind.Video, 0, "ScanType");
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Width"), out width);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Height"), out height);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);

                    string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                    int    ABindex  = aBitRate.IndexOf(" /");
                    if (ABindex > 0)
                    {
                        aBitRate = aBitRate.Remove(ABindex);
                    }

                    Int32.TryParse(aBitRate, out audioBitRate);
                    Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out runTime);
                    Int32.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "StreamCount"), out streamCount);

                    string audioChannelsStr = mediaInfo.Get(StreamKind.Audio, 0, "Channel(s)");
                    int    ACindex          = audioChannelsStr.IndexOf(" /");
                    if (ACindex > 0)
                    {
                        audioChannelsStr = audioChannelsStr.Remove(ACindex);
                    }

                    string  audioLanguages = mediaInfo.Get(StreamKind.General, 0, "Audio_Language_List");
                    decimal videoFrameRate = Decimal.Parse(mediaInfo.Get(StreamKind.Video, 0, "FrameRate"));
                    string  audioProfile   = mediaInfo.Get(StreamKind.Audio, 0, "Format_Profile");

                    int APindex = audioProfile.IndexOf(" /");
                    if (APindex > 0)
                    {
                        audioProfile = audioProfile.Remove(APindex);
                    }

                    Int32.TryParse(audioChannelsStr, out audioChannels);
                    var mediaInfoModel = new MediaInfoModel
                    {
                        VideoCodec       = mediaInfo.Get(StreamKind.Video, 0, "Codec/String"),
                        VideoBitrate     = videoBitRate,
                        Height           = height,
                        Width            = width,
                        AudioFormat      = mediaInfo.Get(StreamKind.Audio, 0, "Format"),
                        AudioBitrate     = audioBitRate,
                        RunTime          = (runTime / 1000),                    //InSeconds
                        AudioStreamCount = streamCount,
                        AudioChannels    = audioChannels,
                        AudioProfile     = audioProfile.Trim(),
                        VideoFps         = videoFrameRate,
                        AudioLanguages   = audioLanguages,
                        Subtitles        = subtitles,
                        ScanType         = scanType
                    };

                    mediaInfo.Close();
                    return(mediaInfoModel);
                }
            }
            catch (Exception ex)
            {
                _logger.ErrorException("Unable to parse media info from file: " + filename, ex);
                mediaInfo.Close();
            }

            return(null);
        }
Beispiel #29
0
		private void Form1_Load(object sender, System.EventArgs e)
		{
			//Test if version of DLL is compatible : 3rd argument is "version of DLL tested;Your application name;Your application version"
            String ToDisplay;
            MediaInfo MI = new MediaInfo();

            ToDisplay = MI.Option("Info_Version", "0.7.0.0;MediaInfoDLL_Example_CS;0.7.0.0");
			if (ToDisplay.Length == 0)
			{
                richTextBox1.Text = "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";
			MI.Open("Example.ogg");

			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(StreamKind.Audio);

            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter='AudioCount'\r\n";
            ToDisplay += MI.Get(StreamKind.General, 0, "AudioCount");

            ToDisplay += "\r\n\r\nGet with Stream=Audio and Parameter='StreamCount'\r\n";
            ToDisplay += MI.Get(StreamKind.Audio, 0, "StreamCount");

            ToDisplay += "\r\n\r\nClose\r\n";
            MI.Close();

			//Example with a stream
            //ToDisplay+="\r\n"+ExampleWithStream()+"\r\n";

            //Displaying the text
			richTextBox1.Text = ToDisplay;
		}
Beispiel #30
0
        public string VideoBatch(string input, string output)
        {
            bool hasAudio = false;
            string bat = "";
            string inputName = Path.GetFileNameWithoutExtension(input);
            string tempVideo = Path.Combine(tempfilepath, inputName + "_vtemp.mp4");
            string tempAudio = Path.Combine(tempfilepath, inputName + "_atemp" + getAudioExt());

            //检测是否含有音频
            MediaInfo MI = new MediaInfo();
            MI.Open(input);
            string audio = MI.Get(StreamKind.Audio, 0, "Format");
            if (!string.IsNullOrEmpty(audio)) { hasAudio = true; }
            string sub = (x264BatchSubCheckBox.Checked) ? GetSubtitlePath(input) : string.Empty;

            int audioMode = x264AudioModeComboBox.SelectedIndex;
            if (!hasAudio)
                audioMode = 1;
            switch (audioMode)
            {
                case 0:
                    aextract = audiobat(input, tempAudio);
                    break;
                case 1:
                    aextract = string.Empty;
                    break;
                case 2:
                    if (audio.ToLower() == "aac")
                    {
                        tempAudio = Path.Combine(tempfilepath, inputName + "_atemp.aac");
                        aextract = ExtractAudio(input, tempAudio);
                    }
                    else
                        aextract = audiobat(input, tempAudio);
                    break;
                default:
                    break;
            }

            if (x264ExeComboBox.SelectedItem.ToString().ToLower().Contains("x264"))
            {
                if (x264mode == 2)
                    x264 = x264bat(input, tempVideo, 1, sub) + "\r\n" +
                           x264bat(input, tempVideo, 2, sub);
                else x264 = x264bat(input, tempVideo, 0, sub);
                if (audioMode == 1 || !hasAudio)
                    x264 = x264.Replace(tempVideo, output);
            }
            else if (x264ExeComboBox.SelectedItem.ToString().ToLower().Contains("x265"))
            {
                tempVideo = Path.Combine(tempfilepath, inputName + "_vtemp.hevc");
                if (x264mode == 2)
                    x264 = x265bat(input, tempVideo, 1) + "\r\n" +
                           x265bat(input, tempVideo, 2);
                else x264 = x265bat(input, tempVideo);
                if (audioMode == 1 || !hasAudio)
                    x264 += "\r\n\"" + workPath + "\\mp4box.exe\"  -add  \"" + tempVideo + "#trackID=1:name=\" -new \"" + output + "\" \r\n";
            }
            x264 += "\r\n";

            //封装
            if (VideoBatchFormatComboBox.Text == "mp4")
                mux = boxmuxbat(tempVideo, tempAudio, output);
            else
                mux = ffmuxbat(tempVideo, tempAudio, output);
            if (audioMode != 1 && hasAudio) //如果压制音频
                bat += aextract + x264 + mux + " \r\n";
            else
                bat += x264 + " \r\n";

            bat += "del \"" + tempAudio + "\"\r\n";
            bat += "del \"" + tempVideo + "\"\r\n";
            bat += "echo ===== one file is completed! =====\r\n";
            return bat;
        }
Beispiel #31
0
 private string getNewNameForMp4(string path)
 {
     try
     {
         FileInfo fi = new FileInfo(path);
         MediaInfo mi = new MediaInfo();
         mi.Open(path);
         string[] dataLines = mi.Inform().Split('\n');
         foreach (string line in dataLines)
         {
             if (line.StartsWith("Encoded date"))
             {
                 // parse `encoded date` tag:
                 // >Encoded date                             : UTC 2014-07-29 15:21:29
                 string newLine = line.Substring(line.IndexOf(':') + 1);    // > UTC 2014-07-29 15:21:29
                 newLine = newLine.Replace("UTC", "");                       // >  2014-07-29 15:21:29
                 newLine = newLine.Trim();                                   // >2014-07-29 15:21:29
                 //newLine = newLine.Replace(':', '-');                      // >2014-07-29 15-21-29
                 DateTime dt = DateTime.Parse(newLine);
                 PersianCalendar pc = new PersianCalendar();
                 StringBuilder result = new StringBuilder();
                 result.Append(pc.GetYear(dt));
                 result.Append('_');
                 result.Append(pc.GetMonth(dt));
                 return String.Format(
                     "{0}_{1,2:D2}_{2,2:D2} - {3:D2}_{4:D2}_{5:D2}{6}",
                     pc.GetYear(dt),
                     pc.GetMonth(dt),
                     pc.GetDayOfMonth(dt),
                     pc.GetHour(dt),
                     pc.GetMinute(dt),
                     pc.GetSecond(dt),
                     fi.Extension
                 );
             }
         }
         return "";
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
         return "";
     }
 }
Beispiel #32
0
        private void btnAVS9_Click(object sender, EventArgs e)
        {
            x264DemuxerComboBox.SelectedIndex = 0; //压制AVS始终使用分离器为auto

            if (string.IsNullOrEmpty(nameout9))
            {
                ShowErrorMessage("请选择输出文件");
                return;
            }

            if (Path.GetExtension(nameout9).ToLower() != ".mp4")
            {
                ShowErrorMessage("仅支持MP4输出", "不支持的输出格式");
                return;
            }

            if (File.Exists(txtout9.Text.Trim()))
            {
                DialogResult dgs = ShowQuestion("目标文件:\r\n\r\n" + txtout9.Text.Trim() + "\r\n\r\n已经存在,是否覆盖继续压制?", "目标文件已经存在");
                if (dgs == DialogResult.No) return;
            }

            if (string.IsNullOrEmpty(Util.CheckAviSynth()) && string.IsNullOrEmpty(Util.CheckinternalAviSynth()))
            {
                if (ShowQuestion("检测到本机未安装avisynth无法继续压制,是否去下载安装", "avisynth未安装") == DialogResult.Yes)
                    Process.Start("http://sourceforge.net/projects/avisynth2/");
                return;
            }

            string inputName = Path.GetFileNameWithoutExtension(namevideo9);
            string tempVideo = Path.Combine(tempfilepath, inputName + "_vtemp.mp4");
            string tempAudio = Path.Combine(tempfilepath, inputName + "_atemp" + getAudioExt());
            Util.ensureDirectoryExists(tempfilepath);

            string filepath = tempavspath;
            //string filepath = workpath + "\\temp.avs";
            File.WriteAllText(filepath, AVSScriptTextBox.Text, Encoding.Default);

            //检测是否含有音频
            bool hasAudio = false;
            MediaInfo MI = new MediaInfo();
            MI.Open(namevideo9);
            string audio = MI.Get(StreamKind.Audio, 0, "Format");
            if (!string.IsNullOrEmpty(audio)) { hasAudio = true; }

            //audio
            if (AVSwithAudioCheckBox.Checked && hasAudio)
            {
                if (!File.Exists(txtvideo9.Text))
                {
                    ShowErrorMessage("请选择视频文件");
                    return;
                }
                aextract = audiobat(namevideo9, tempAudio);
            }
            else
                aextract = string.Empty;

            //video
            if (x264ExeComboBox.SelectedItem.ToString().ToLower().Contains("x264"))
            {
                if (x264mode == 2)
                    x264 = x264bat(filepath, tempVideo, 1) + "\r\n" +
                           x264bat(filepath, tempVideo, 2);
                else x264 = x264bat(filepath, tempVideo);
                if (!AVSwithAudioCheckBox.Checked || !hasAudio)
                    x264 = x264.Replace(tempVideo, nameout9);
            }
            else if (x264ExeComboBox.SelectedItem.ToString().ToLower().Contains("x265"))
            {
                tempVideo = Path.Combine(tempfilepath, inputName + "_vtemp.hevc");
                if (x264mode == 2)
                    x264 = x265bat(filepath, tempVideo, 1) + "\r\n" +
                           x265bat(filepath, tempVideo, 2);
                else x264 = x265bat(filepath, tempVideo);
                if (!AVSwithAudioCheckBox.Checked || !hasAudio)
                {
                    x264 += "\r\n\"" + workPath + "\\mp4box.exe\"  -add  \"" + tempVideo + "#trackID=1:name=\" -new \"" + nameout9 + "\" \r\n";
                    x264 += "del \"" + tempVideo + "\"";
                }
            }
            //mux
            if (AVSwithAudioCheckBox.Checked && hasAudio) //如果包含音频
                mux = boxmuxbat(tempVideo, tempAudio, nameout9);
            else
                mux = string.Empty;

            auto = aextract + x264 + "\r\n" + mux + " \r\n";
            auto += "\r\necho ===== one file is completed! =====\r\n";
            LogRecord(auto);
            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(GetCultureName());
            WorkingForm wf = new WorkingForm(auto);
            wf.Owner = this;
            wf.Show();
            //auto += "\r\ncmd";
            //batpath = workPath + "\\x264avs.bat";
            //File.WriteAllText(batpath, auto, Encoding.Default);
            //Process.Start(batpath);
        }
Beispiel #33
0
        /// <summary>
        /// Reads a media file and creates a MediaFile object
        /// </summary>
        /// <param name="fp">File Path of the Media File</param>
        /// <returns>MediaFile object</returns>
        public void ReadFile()
        {
            this.Source = Source;

            if (File.Exists(FilePath))
            {
                //*********************
                //* General
                //*********************

                //System.Debug.WriteLine("Current Dir1: " + System.Environment.CurrentDirectory);
                //System.Environment.CurrentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                //System.Debug.WriteLine("Current Dir2: " + System.Environment.CurrentDirectory);

                MediaInfoLib.MediaInfo MI = null;
                try
                {
                    Debug.WriteLine("Loading MediaInfo.dll");
                    MI = new MediaInfoLib.MediaInfo();
                    Debug.WriteLine("Loaded MediaInfo.dll");
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.ToString());
                }

                if (MI != null)
                {
                    Debug.WriteLine(string.Format("MediaInfo Opening {0}", FilePath));
                    MI.Open(FilePath);
                    Debug.WriteLine(string.Format("MediaInfo Opened {0}", FilePath));
                    MI.Option("Complete");
                    this.Summary = MI.Inform();
                    MI.Option("Complete", "1");
                    this.SummaryComplete = MI.Inform();

                    if (Program.IsUNIX)
                    {
                        Debug.WriteLine(string.Format("MediaInfo Summary Length: {0}", this.Summary.Length.ToString()));
                        Debug.WriteLine(string.Format("MediaInfo Summary: {0}", this.Summary));
                    }

                    // Format Info
                    if (string.IsNullOrEmpty(this.Format))
                    {
                        this.Format = MI.Get(StreamKind.General, 0, "Format");
                    }
                    this.FormatInfo = MI.Get(StreamKind.General, 0, "Format/Info");

                    // this.FileName = mMI.Get(0, 0, "FileName");
                    if (0 == this.FileSize)
                    {
                        double sz;
                        double.TryParse(MI.Get(0, 0, "FileSize"), out sz);
                        this.FileSize = sz;
                    }
                    if (string.IsNullOrEmpty(this.FileSizeString))
                    {
                        this.FileSizeString = string.Format("{0} MiB", (this.FileSize / 1024.0 / 1024.0).ToString("0.00"));
                    }

                    // Duration
                    if (string.IsNullOrEmpty(this.DurationString2))
                    {
                        this.DurationString2 = MI.Get(0, 0, "Duration/String2");
                    }

                    if (this.Duration == 0.0)
                    {
                        double dura = 0.0;
                        double.TryParse(MI.Get(0, 0, "Duration"), out dura);
                        this.Duration        = dura;
                        this.SegmentDuration = dura;
                    }

                    if (string.IsNullOrEmpty(this.DurationString3))
                    {
                        this.DurationString3 = MI.Get(0, 0, "Duration/String3");
                    }

                    this.BitrateOverall     = MI.Get(StreamKind.General, 0, "OverallBitRate/String");
                    this.EncodedApplication = MI.Get(StreamKind.General, 0, "Encoded_Application");
                    this.EncodedDate        = MI.Get(StreamKind.General, 0, "Encoded_Date");

                    if (string.IsNullOrEmpty(this.Subtitles))
                    {
                        StringBuilder sbSubs = new StringBuilder();

                        int subCount = 0;
                        int.TryParse(MI.Get(StreamKind.Text, 0, "StreamCount"), out subCount);

                        if (subCount > 0)
                        {
                            StringBuilder sbLang = new StringBuilder();
                            for (int i = 0; i < subCount; i++)
                            {
                                string lang = MI.Get(StreamKind.Text, i, "Language/String");
                                if (!string.IsNullOrEmpty(lang))
                                {
                                    // System.Windows.Forms.MessageBox.Show(lang);
                                    sbLang.Append(lang);
                                    if (i < subCount - 1)
                                    {
                                        sbLang.Append(", ");
                                    }
                                }
                            }
                            if (!string.IsNullOrEmpty(sbLang.ToString()))
                            {
                                sbSubs.Append(sbLang.ToString());
                            }
                            else
                            {
                                sbSubs.Append("N/A");
                            }
                        }
                        else
                        {
                            sbSubs.Append("None");
                        }

                        this.Subtitles = sbSubs.ToString();
                    }

                    //*********************
                    //* Video
                    //*********************

                    int videoCount;
                    int.TryParse(MI.Get(StreamKind.General, 0, "VideoCount"), out videoCount);
                    this.HasVideo = videoCount > 0;

                    this.Video.Format        = MI.Get(StreamKind.Video, 0, "Format");
                    this.Video.FormatVersion = MI.Get(StreamKind.Video, 0, "Format_Version");

                    if (Path.GetExtension(this.FilePath).ToLower().Equals(".mkv"))
                    {
                        this.Video.Codec = MI.Get(StreamKind.Video, 0, "Encoded_Library");
                    }
                    this.Video.EncodedLibrarySettings = MI.Get(StreamKind.Video, 0, "Encoded_Library_Settings");
                    this.Video.DisplayAspectRatio     = MI.Get(StreamKind.Video, 0, "DisplayAspectRatio/String");

                    if (string.IsNullOrEmpty(this.Video.Codec))
                    {
                        this.Video.Codec = MI.Get(StreamKind.Video, 0, "CodecID/Hint");
                    }
                    if (string.IsNullOrEmpty(this.Video.Codec))
                    {
                        this.Video.Codec = MI.Get(StreamKind.Video, 0, "CodecID");
                    }

                    this.Video.Bitrate            = MI.Get(StreamKind.Video, 0, "BitRate/String");
                    this.Video.Standard           = MI.Get(StreamKind.Video, 0, "Standard");;
                    this.Video.FrameRate          = MI.Get(StreamKind.Video, 0, "FrameRate/String");
                    this.Video.ScanType           = MI.Get(StreamKind.Video, 0, "ScanType/String");
                    this.Video.Height             = MI.Get(StreamKind.Video, 0, "Height");
                    this.Video.Width              = MI.Get(StreamKind.Video, 0, "Width");
                    this.Video.Resolution         = string.Format("{0}x{1}", this.Video.Width, this.Video.Height);
                    this.Video.BitsPerPixelXFrame = MI.Get(StreamKind.Video, 0, "Bits-(Pixel*Frame)");

                    //*********************
                    //* Audio
                    //*********************
                    int audioCount;
                    int.TryParse(MI.Get(StreamKind.General, 0, "AudioCount"), out audioCount);
                    this.HasAudio = audioCount > 0;

                    for (int id = 0; id < audioCount; id++)
                    {
                        AudioInfo ai = new AudioInfo(id);
                        ai.Format        = MI.Get(StreamKind.Audio, id, "Format");
                        ai.FormatVersion = MI.Get(StreamKind.Audio, 0, "Format_Version");
                        ai.FormatProfile = MI.Get(StreamKind.Audio, 0, "Format_Profile");

                        ai.Codec = MI.Get(StreamKind.Audio, 0, "CodecID/Hint");
                        if (string.IsNullOrEmpty(ai.Codec))
                        {
                            ai.Codec = MI.Get(StreamKind.Audio, 0, "CodecID/Info");
                        }
                        if (string.IsNullOrEmpty(ai.Codec))
                        {
                            ai.Codec = MI.Get(StreamKind.Audio, 0, "CodecID");
                        }

                        ai.Bitrate     = MI.Get(StreamKind.Audio, id, "BitRate/String");
                        ai.BitrateMode = MI.Get(StreamKind.Audio, id, "BitRate_Mode/String");

                        ai.Channels     = MI.Get(StreamKind.Audio, id, "Channel(s)/String");
                        ai.SamplingRate = MI.Get(StreamKind.Audio, id, "SamplingRate/String");
                        ai.Resolution   = MI.Get(StreamKind.Audio, id, "Resolution/String");

                        this.Audio.Add(ai);
                    }

                    MI.Close();

                    //// Analyse Audio only files using TagLib

                    //if (this.HasAudio && !this.HasVideo)
                    //{
                    //    TagLib.File f = TagLib.File.Create(this.FilePath);
                    //    this.TagLibFile = f;
                    //}
                }
            }
        }
Beispiel #34
0
        private void x264StartBtn_Click(object sender, EventArgs e)
        {
            #region validation

            if (string.IsNullOrEmpty(namevideo2))
            {
                ShowErrorMessage("请选择视频文件");
                return;
            }

            if (!string.IsNullOrEmpty(namesub2) && !File.Exists(namesub2))
            {
                ShowErrorMessage("字幕文件不存在,请重新选择");
                return;
            }

            if (string.IsNullOrEmpty(nameout2))
            {
                ShowErrorMessage("请选择输出文件");
                return;
            }

            if (x264ExeComboBox.SelectedIndex == -1)
            {
                ShowErrorMessage("请选择X264程序");
                return;
            }

            if (AudioEncoderComboBox.SelectedIndex != 0 && AudioEncoderComboBox.SelectedIndex != 1 && AudioEncoderComboBox.SelectedIndex != 5)
            {
                ShowWarningMessage("音频页面中的编码器未采用AAC将可能导致压制失败,建议将编码器改为QAAC、NeroAAC或FDKAAC。");
            }

            //防止未选择 x264 thread
            if (x264ThreadsComboBox.SelectedIndex == -1)
            {
                x264ThreadsComboBox.SelectedIndex = 0;
            }

            //目标文件已经存在提示是否覆盖
            if (File.Exists(x264OutTextBox.Text.Trim()))
            {
                DialogResult dgs = ShowQuestion("目标文件:\r\n\r\n" + x264OutTextBox.Text.Trim() + "\r\n\r\n已经存在,是否覆盖继续压制?", "目标文件已经存在");
                if (dgs == DialogResult.No) return;
            }

            //如果是AVS复制到C盘根目录
            if (Path.GetExtension(x264VideoTextBox.Text) == ".avs")
            {
                if (string.IsNullOrEmpty(Util.CheckAviSynth()) && string.IsNullOrEmpty(Util.CheckinternalAviSynth()))
                {
                    if (ShowQuestion("检测到本机未安装avisynth无法继续压制,是否去下载安装", "avisynth未安装") == DialogResult.Yes)
                        Process.Start("http://sourceforge.net/projects/avisynth2/");
                    return;
                }
                //if (File.Exists(tempavspath)) File.Delete(tempavspath);
                File.Copy(x264VideoTextBox.Text, tempavspath, true);
                namevideo2 = tempavspath;
                x264DemuxerComboBox.SelectedIndex = 0; //压制AVS始终使用分离器为auto
            }

            #endregion validation

            string ext = Path.GetExtension(nameout2).ToLower();
            bool hasAudio = false;
            string inputName = Path.GetFileNameWithoutExtension(namevideo2);
            string tempVideo = Path.Combine(tempfilepath, inputName + "_vtemp.mp4");
            string tempAudio = Path.Combine(tempfilepath, inputName + "_atemp" + getAudioExt());
            Util.ensureDirectoryExists(tempfilepath);

            #region Audio

            //检测是否含有音频
            MediaInfo MI = new MediaInfo();
            MI.Open(namevideo2);
            string audio = MI.Get(StreamKind.Audio, 0, "Format");
            if (!string.IsNullOrEmpty(audio))
                hasAudio = true;
            int audioMode = x264AudioModeComboBox.SelectedIndex;
            if (!hasAudio && x264AudioModeComboBox.SelectedIndex != 1)
            {
                DialogResult r = ShowQuestion("原视频不包含音频流,音频模式是否改为无音频流?", "提示");
                if (r == DialogResult.Yes)
                    audioMode = 1;
            }
            switch (audioMode)
            {
                case 0:
                    aextract = audiobat(namevideo2, tempAudio);
                    break;
                case 1:
                    aextract = string.Empty;
                    break;
                case 2:
                    if (audio.ToLower() == "aac")
                    {
                        tempAudio = Path.Combine(tempfilepath, inputName + "_atemp.aac");
                        aextract = ExtractAudio(namevideo2, tempAudio);
                    }
                    else
                    {
                        ShowInfoMessage("因音频编码非AAC故无法复制音频流,音频将被重编码。");
                        aextract = audiobat(namevideo2, tempAudio);
                    }
                    break;
                default:
                    break;
            }

            #endregion

            #region Video
            if (x264ExeComboBox.SelectedItem.ToString().ToLower().Contains("x264"))
            {
                if (x264mode == 2)
                    x264 = x264bat(namevideo2, tempVideo, 1, namesub2) + "\r\n" +
                           x264bat(namevideo2, tempVideo, 2, namesub2);
                else x264 = x264bat(namevideo2, tempVideo, 0, namesub2);
                if (audioMode == 1)
                    x264 = x264.Replace(tempVideo, nameout2);
            }
            else if (x264ExeComboBox.SelectedItem.ToString().ToLower().Contains("x265"))
            {
                tempVideo = Path.Combine(tempfilepath, inputName + "_vtemp.hevc");
                if (ext != ".mp4")
                {
                    ShowErrorMessage("不支持的格式输出,x265当前工具箱仅支持MP4输出");
                    return;
                }
                if (x264mode == 2)
                    x264 = x265bat(namevideo2, tempVideo, 1) + "\r\n" +
                           x265bat(namevideo2, tempVideo, 2);
                else x264 = x265bat(namevideo2, tempVideo);
                if (audioMode == 1)
                {
                    x264 += "\r\n\"" + workPath + "\\mp4box.exe\" -add  \"" + tempVideo + "#trackID=1:name=\" -new \"" + Util.ChangeExt(nameout2, ".mp4") + "\" \r\n";
                    x264 += "del \"" + tempVideo + "\"";
                }
            }
            x264 += "\r\n";

            #endregion

            #region Mux

            //封装
            if (audioMode != 1)
            {
                if (ext == ".mp4")
                    mux = boxmuxbat(tempVideo, tempAudio, Util.ChangeExt(nameout2, ext));
                else
                    mux = ffmuxbat(tempVideo, tempAudio, Util.ChangeExt(nameout2, ext));
                x264 = aextract + x264 + mux + "\r\n"
                    + "del \"" + tempVideo + "\"\r\n"
                    + "del \"" + tempAudio + "\"\r\n";
            }
            x264 += "\r\necho ===== one file is completed! =====\r\n";

            #endregion

            LogRecord(x264);
            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(GetCultureName());
            WorkingForm wf = new WorkingForm(x264);
            wf.Owner = this;
            wf.Show();
            //x264 += "\r\ncmd";
            //batpath = workPath + "\\x264.bat";
            //File.WriteAllText(batpath, x264, Encoding.Default);
            //Process.Start(batpath);
        }
Beispiel #35
0
 /// <summary>
 /// Opens the media resource at the specified file path.
 /// </summary>
 /// <param name="filePath">Path of the file where the metadata should be extracted.</param>
 /// <returns><c>true</c>, if the open operation was successful. In this case, <see cref="IsValid"/> will
 /// be <c>true</c> also. <c>false</c>, if the open operation was not successful. This means,
 /// <see cref="IsValid"/> will also be <c>false</c>.</returns>
 public bool Open(string filePath)
 {
     _isValid = _mediaInfo.Open(filePath) == MEDIAINFO_FILE_OPENED;
     return(_isValid);
 }
Beispiel #36
0
        private void BlackStartButton_Click(object sender, EventArgs e)
        {
            //验证
            if (!File.Exists(BlackVideoTextBox.Text) || Path.GetExtension(BlackVideoTextBox.Text) != ".flv")
            {
                ShowErrorMessage("请选择FLV视频文件");
                return;
            }

            MediaInfo MI = new MediaInfo();
            MI.Open(BlackVideoTextBox.Text);
            double videobitrate = double.Parse(MI.Get(StreamKind.General, 0, "BitRate"));
            double targetBitrate = (double)BlackBitrateNum.Value;

            if (!File.Exists(BlackPicTextBox.Text) && BlackNoPicCheckBox.Checked == false)
            {
                ShowErrorMessage("请选择图片文件或勾选使用黑屏");
                return;
            }
            if (BlackOutputTextBox.Text == "")
            {
                ShowErrorMessage("请选择输出文件");
                return;
            }

            if (videobitrate < 1000000)
            {
                ShowInfoMessage("此视频不需要后黑。");
                return;
            }
            if (videobitrate > 5000000)
            {
                ShowInfoMessage("此视频码率过大,请先压制再后黑。");
                return;
            }

            //处理图片
            int videoWidth = int.Parse(MI.Get(StreamKind.Video, 0, "Width"));
            int videoHeight = int.Parse(MI.Get(StreamKind.Video, 0, "Height"));
            if (BlackNoPicCheckBox.Checked)
            {
                Bitmap bm = new Bitmap(videoWidth, videoHeight);
                Graphics g = Graphics.FromImage(bm);
                //g.FillRectangle(Brushes.White, new Rectangle(0, 0, 800, 600));
                g.Clear(Color.Black);
                bm.Save(tempPic, ImageFormat.Jpeg);
                g.Dispose();
                bm.Dispose();
            }
            else
            {
                System.Drawing.Image img = System.Drawing.Image.FromFile(BlackPicTextBox.Text);
                int sourceWidth = img.Width;
                int sourceHeight = img.Height;
                if (img.Width % 2 != 0 || img.Height % 2 != 0)
                {
                    ShowErrorMessage("图片的长和宽必须都是偶数。");
                    img.Dispose();
                    return;
                }
                if (img.Width != videoWidth || img.Height != videoHeight)
                {
                    ShowErrorMessage("图片的长和宽和视频不一致。");
                    img.Dispose();
                    return;
                }
                if (img.RawFormat.Equals(ImageFormat.Jpeg))
                {
                    File.Copy(BlackPicTextBox.Text, tempPic, true);
                }
                else
                {
                    System.Drawing.Imaging.Encoder ImageEncoder = System.Drawing.Imaging.Encoder.Quality;
                    EncoderParameter ep = new EncoderParameter(ImageEncoder, 100L);
                    EncoderParameters eps = new EncoderParameters(1);
                    ImageCodecInfo ImageCoderType = getImageCoderInfo("image/jpeg");
                    eps.Param[0] = ep;
                    img.Save(tempPic, ImageCoderType, eps);
                    //img.Save(tempPic, ImageFormat.Jpeg);
                }
            }
            int blackSecond = 300;
            //计算后黑时长
            if (BlackSecondComboBox.Text == "auto")
            {
                int seconds = SecondsFromHHMMSS(MI.Get(StreamKind.General, 0, "Duration/String3"));
                double s = videobitrate / 1000.0 * (double)seconds / targetBitrate - (double)seconds;
                blackSecond = (int)s;
                BlackSecondComboBox.Text = blackSecond.ToString();
            }
            else
            {
                blackSecond = int.Parse(Regex.Replace(BlackSecondComboBox.Text.ToString(), @"\D", "")); //排除除数字外的所有字符
            }

            //批处理
            mux = "\"" + workPath + "\\ffmpeg\" -loop 1 -r " + BlackFPSNum.Value.ToString() + " -t " + blackSecond.ToString() + " -f image2 -i \"" + tempPic + "\" -c:v libx264 -crf " + BlackCRFNum.Value.ToString() + " -y black.flv\r\n";
            mux += string.Format("\"{0}\\flvbind\" \"{1}\"  \"{2}\"  black.flv\r\n", workPath, BlackOutputTextBox.Text, BlackVideoTextBox.Text);
            mux += "del black.flv\r\n";

            batpath = Path.Combine(workPath, Path.GetRandomFileName() + ".bat");
            File.WriteAllText(batpath, mux, Encoding.Default);
            LogRecord(mux);
            Process.Start(batpath);
        }
Beispiel #37
0
        private bool IndexCrop()
        {
            try
            {
                DoPlugin(PluginType.BeforeAutoCrop);

                string filename = "";
                AdvancedVideoOptions avo = null;
                foreach (StreamInfo si in demuxedStreamList.streams)
                {
                    if (si.streamType == StreamType.Video)
                    {
                        filename = si.filename;
                        if (si.advancedOptions != null && si.advancedOptions.GetType() == typeof(AdvancedVideoOptions)) avo = (AdvancedVideoOptions)si.advancedOptions;
                        break;
                    }
                }

                string fps = "";
                string resX = "";
                string resY = "";
                string length = "";
                string frames = "";

                try
                {
                    MediaInfoLib.MediaInfo mi2 = new MediaInfoLib.MediaInfo();
                    mi2.Open(filename);
                    mi2.Option("Complete", "1");
                    string[] tmpstr = mi2.Inform().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string s in tmpstr)
                    {
                        logWindow.MessageCrop(s.Trim());
                    }
                    if (mi2.Count_Get(StreamKind.Video) > 0)
                    {
                        fps = mi2.Get(StreamKind.Video, 0, "FrameRate");
                        resX = mi2.Get(StreamKind.Video, 0, "Width");
                        resY = mi2.Get(StreamKind.Video, 0, "Height");
                        length = mi2.Get(StreamKind.Video, 0, "Duration");
                        frames = mi2.Get(StreamKind.Video, 0, "FrameCount");
                    }
                    mi2.Close();
                }
                catch (Exception ex)
                {
                    logWindow.MessageCrop(Global.Res("ErrorMediaInfo") + " " + ex.Message);
                    return false;
                }

                if (avo != null && avo.disableFps)
                {
                    logWindow.MessageCrop(Global.Res("InfoManualFps"));
                    fps = avo.fps;
                    length = avo.length;
                    frames = avo.frames;
                }

                if (fps == "")
                {
                    logWindow.MessageCrop(Global.Res("ErrorFramerate"));
                    foreach (StreamInfo si in demuxedStreamList.streams)
                    {
                        if (si.streamType == StreamType.Video)
                        {
                            if (si.desc.Contains("24 /1.001"))
                            {
                                logWindow.MessageCrop(Global.ResFormat("InfoFps", " 23.976"));
                                fps = "23.976";
                                break;
                            }
                            else if (si.desc.Contains("1080p24 (16:9)"))
                            {
                                logWindow.MessageCrop(Global.ResFormat("InfoFps", " 24"));
                                fps = "24";
                                break;
                            }
                            // add other framerates here
                        }
                    }
                    if (fps == "")
                    {
                        logWindow.MessageCrop(Global.Res("ErrorNoFramerate"));
                        return false;
                    }
                }

                if (frames == "" || length == "")
                {
                    logWindow.MessageCrop(Global.Res("InfoFrames"));
                }

                CropInfo cropInfo = new CropInfo();
                if (!settings.untouchedVideo)
                {
                    if (settings.cropInput == 1 || settings.encodeInput == 1)
                    {
                        bool skip = false;
                        if (File.Exists(filename + ".ffindex") && !settings.deleteIndex)
                        {
                            skip = true;
                        }
                        if (!skip)
                        {
                            it = new IndexTool(settings, filename, IndexType.ffmsindex);
                            it.OnInfoMsg += new ExternalTool.InfoEventHandler(IndexMsg);
                            it.OnLogMsg += new ExternalTool.LogEventHandler(IndexMsg);
                            it.Start();
                            it.WaitForExit();
                            if (it == null || !it.Successfull)
                            {
                                logWindow.MessageCrop(Global.Res("ErrorIndex"));
                                return false;
                            }
                        }
                    }

                    if (settings.cropInput == 2 || settings.encodeInput == 2)
                    {
                        string output = System.IO.Path.ChangeExtension(filename, "dgi");

                        bool skip = false;
                        if (File.Exists(output) && !settings.deleteIndex)
                        {
                            skip = true;
                        }
                        if (!skip)
                        {
                            it = new IndexTool(settings, filename, IndexType.dgindex);
                            it.OnInfoMsg += new ExternalTool.InfoEventHandler(IndexMsg);
                            it.OnLogMsg += new ExternalTool.LogEventHandler(IndexMsg);
                            it.Start();
                            it.WaitForExit();
                            if (!it.Successfull)
                            {
                                logWindow.MessageCrop(Global.Res("ErrorIndex"));
                                return false;
                            }
                        }
                    }

                    if (avo == null || !avo.disableAutocrop)
                    {
                        if (settings.cropInput == 0)
                        {
                            File.WriteAllText(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs",
                                "DirectShowSource(\"" + filename + "\")");
                        }
                        else if (settings.cropInput == 1)
                        {
                            string data = "";
                            string dlldir = System.IO.Path.GetDirectoryName(settings.ffmsindexPath);
                            if (File.Exists(dlldir + "\\ffms2.dll"))
                            {
                                data = "LoadPlugin(\"" + dlldir + "\\ffms2.dll" + "\")\r\n";
                            }
                            data += "FFVideoSource(\"" + filename + "\")";
                            File.WriteAllText(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs", data);
                        }
                        else if (settings.cropInput == 2)
                        {
                            string output = System.IO.Path.ChangeExtension(filename, "dgi");
                            string data = "";
                            string dlldir = System.IO.Path.GetDirectoryName(settings.dgindexnvPath);
                            if (File.Exists(dlldir + "\\DGDecodeNV.dll"))
                            {
                                data = "LoadPlugin(\"" + dlldir + "\\DGDecodeNV.dll" + "\")\r\n";
                            }
                            data += "DGSource(\"" + output + "\")";
                            File.WriteAllText(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs", data);
                        }
                        else if (settings.cropInput == 3)
                        {
                            string data = "";
                            string dlldir = System.IO.Path.GetDirectoryName(settings.lsmashPath);
                            if (File.Exists(dlldir + "\\LSMASHSource.dll"))
                            {
                                data = "LoadPlugin(\"" + dlldir + "\\LSMASHSource.dll" + "\")\r\n";
                            }
                            data += "LWLibavVideoSource(\"" + filename + "\")";
                            File.WriteAllText(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs", data);
                        }
                        logWindow.MessageCrop(Global.Res("InfoStartCrop"));

                        AutoCrop ac = new AutoCrop(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs", settings, ref cropInfo);
                        
                        if (cropInfo.error)
                        {
                            logWindow.MessageCrop(Global.Res("ErrorException") + " " + cropInfo.errorStr);
                            return false;
                        }

                        if (settings.minimizeAutocrop && !settings.manualCrop)
                        {
                            ac.WindowState = FormWindowState.Minimized;
                        }

                        ac.NrFrames = settings.nrFrames;
                        ac.BlackValue = settings.blackValue;
                        ac.ShowDialog();

                        if (cropInfo.error)
                        {
                            logWindow.MessageCrop(Global.Res("ErrorException") + " " + cropInfo.errorStr);
                            return false;
                        }
                        cropInfo.resizeMethod = settings.resizeMethod;
                    }
                    else
                    {
                        cropInfo.border = avo.manualBorders;
                        cropInfo.borderBottom = avo.borderBottom;
                        cropInfo.borderTop = avo.borderTop;
                        cropInfo.resize = avo.manualResize;
                        cropInfo.resizeX = avo.resizeX;
                        cropInfo.resizeY = avo.resizeY;
                        cropInfo.resizeMethod = avo.resizeMethod;
                        cropInfo.error = false;
                        if (avo.manualCrop)
                        {
                            cropInfo.cropBottom = avo.cropBottom;
                            cropInfo.cropTop = avo.cropTop;
                        }
                        else
                        {
                            cropInfo.cropBottom = 0;
                            cropInfo.cropTop = 0;
                        }
                    }

                    logWindow.MessageCrop("");
                    logWindow.MessageCrop(Global.ResFormat("InfoCropTop", cropInfo.cropTop));
                    logWindow.MessageCrop(Global.ResFormat("InfoCropBottom", cropInfo.cropBottom));
                    if (cropInfo.border)
                    {
                        logWindow.MessageCrop(Global.ResFormat("InfoBorderTop", cropInfo.borderTop));
                        logWindow.MessageCrop(Global.ResFormat("InfoBorderBottom", cropInfo.borderBottom));
                    }
                    if (cropInfo.resize)
                    {
                        logWindow.MessageCrop(Global.ResFormat("InfoResize", cropInfo.resizeX, cropInfo.resizeY));
                    }
                }
                foreach (StreamInfo si in demuxedStreamList.streams)
                {
                    if (si.streamType == StreamType.Video)
                    {
                        if (si.extraFileInfo.GetType() != typeof(VideoFileInfo))
                        {
                            si.extraFileInfo = new VideoFileInfo();
                        }
                        
                        ((VideoFileInfo)si.extraFileInfo).fps = fps;
                        ((VideoFileInfo)si.extraFileInfo).length = length;
                        if (frames != "")
                        {
                            ((VideoFileInfo)si.extraFileInfo).frames = frames;
                        }
                        ((VideoFileInfo)si.extraFileInfo).cropInfo = new CropInfo(cropInfo);
                    }
                }

                DoPlugin(PluginType.AfterAutoCrop);

                TitleInfo.SaveStreamInfoFile(demuxedStreamList, settings.workingDir + "\\" + settings.filePrefix + "_streamInfo.xml");
                demuxedStreamsWindow.UpdateDemuxedStreams();
                return true;
            }
            catch (Exception ex)
            {
                logWindow.MessageCrop(Global.Res("ErrorException") + " " + ex.Message);
                return false;
            }
            finally
            {

            }
        }
Beispiel #38
0
 private string ExtractAudio(string namevideo, string outfile, int streamIndex = 0)
 {
     if (string.IsNullOrEmpty(namevideo))
     {
         return "";
     }
     string ext = Path.GetExtension(namevideo);
     //aextract = "\"" + workPath + "\\mp4box.exe\" -raw 2 \"" + namevideo + "\"";
     string aextract = "";
     aextract += Util.FormatPath(workPath + "\\ffmpeg.exe");
     aextract += " -i " + Util.FormatPath(namevideo);
     aextract += " -vn -sn -c:a copy -y -map 0:a:" + streamIndex + " ";
     MediaInfo MI = new MediaInfo();
     MI.Open(namevideo);
     string audioFormat = MI.Get(StreamKind.Audio, streamIndex, "Format");
     string audioProfile = MI.Get(StreamKind.Audio, streamIndex, "Format_Profile");
     if (!string.IsNullOrEmpty(audioFormat))
     {
         if (audioFormat.Contains("MPEG") && audioProfile == "Layer 3")
             ext = ".mp3";
         else if (audioFormat.Contains("MPEG") && audioProfile == "Layer 2")
             ext = ".mp2";
         else if (audioFormat.Contains("PCM")) //flv support(PCM_U8 * PCM_S16BE * PCM_MULAW * PCM_ALAW * ADPCM_SWF)
             ext = ".wav";
         else if (audioFormat == "AAC")
             ext = ".aac";
         else if (audioFormat == "AC-3")
             ext = ".ac3";
         else if (audioFormat == "ALAC")
             ext = ".m4a";
         else
             ext = ".mka";
     }
     else
     {
         return "";
     }
     aextract += Util.FormatPath(outfile) + "\r\n";
     return aextract;
 }
 private Int32 GetDuration(string location)
 {
     MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo();
     mediaInfo.Option("ParseSpeed", "0.3");
     int i = mediaInfo.Open(location);
     int runTime = 0;
     if (i != 0)
     {
         Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out runTime);
     }
     mediaInfo.Close();
     return runTime;
 }
        private MediaInfoData GetMediaInfo(string location, MediaType mediaType)
        {
            Logger.ReportInfo("Getting media info from " + location);
            MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo();
            mediaInfo.Option("ParseSpeed", "0.2");
            int i = mediaInfo.Open(location);
            MediaInfoData mediaInfoData = null;
            if (i != 0)
            {
                string subtitles = mediaInfo.Get(StreamKind.General, 0, "Text_Language_List");
                string scanType = mediaInfo.Get(StreamKind.Video, 0, "ScanType");
                int width;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Width"), out width);
                int height;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Height"), out height);
                int videoBitRate;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);

                int audioBitRate;
                string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                int ABindex = aBitRate.IndexOf(" /");
                if (ABindex > 0)
                    aBitRate = aBitRate.Remove(ABindex);
                Int32.TryParse(aBitRate, out audioBitRate);

                int runTime;
                Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out runTime);
                int streamCount;
                Int32.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "StreamCount"), out streamCount);

                string audioChannels = mediaInfo.Get(StreamKind.Audio, 0, "Channel(s)");
                int ACindex = audioChannels.IndexOf(" /");
                if (ACindex > 0)
                    audioChannels = audioChannels.Remove(ACindex);

                string audioLanguages = mediaInfo.Get(StreamKind.General, 0, "Audio_Language_List");

                string videoFrameRate = mediaInfo.Get(StreamKind.Video, 0, "FrameRate");

                string audioProfile = mediaInfo.Get(StreamKind.Audio, 0, "Format_Profile");
                int APindex = audioProfile.IndexOf(" /");
                if (APindex > 0)
                    audioProfile = audioProfile.Remove(APindex);

                mediaInfoData = new MediaInfoData
                {
                    PluginData = new MediaInfoData.MIData()
                    {
                        VideoCodec = mediaInfo.Get(StreamKind.Video, 0, "Codec/String"),
                        VideoBitRate = videoBitRate,
                        //MI.Get(StreamKind.Video, 0, "DisplayAspectRatio")),
                        Height = height,
                        Width = width,
                        //MI.Get(StreamKind.Video, 0, "Duration/String3")),
                        AudioFormat = mediaInfo.Get(StreamKind.Audio, 0, "Format"),
                        AudioBitRate = audioBitRate,
                        RunTime = (runTime / 60000),
                        AudioStreamCount = streamCount,
                        AudioChannelCount = audioChannels.Trim(),
                        AudioProfile = audioProfile.Trim(),
                        VideoFPS = videoFrameRate,
                        AudioLanguages = audioLanguages,
                        Subtitles = subtitles,
                        ScanType = scanType
                    }
                };
            }
            else
            {
                Logger.ReportInfo("Could not extract media information from " + location);
            }
            if (mediaType == MediaType.DVD && i != 0)
            {
                mediaInfo.Close();
                location = location.Replace("0.IFO", "1.vob");
                Logger.ReportInfo("Getting additional media info from " + location);
                mediaInfo.Option("ParseSpeed", "0.0");
                i = mediaInfo.Open(location);
                if (i != 0)
                {
                    int videoBitRate;
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);

                    int audioBitRate;
                    string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                    int ABindex = aBitRate.IndexOf(" /");
                    if (ABindex > 0)
                        aBitRate = aBitRate.Remove(ABindex);
                    Int32.TryParse(aBitRate, out audioBitRate);
                    string scanType = mediaInfo.Get(StreamKind.Video, 0, "ScanType");

                    mediaInfoData.PluginData.AudioBitRate = audioBitRate;
                    mediaInfoData.PluginData.VideoBitRate = videoBitRate;
                    mediaInfoData.PluginData.ScanType = scanType;
                }
                else
                {
                    Logger.ReportInfo("Could not extract additional media info from " + location);
                }
            }
            mediaInfo.Close();
            return mediaInfoData;
        }
Beispiel #41
0
        private bool IndexCrop()
        {
            try
            {
                DoPlugin(PluginType.BeforeAutoCrop);

                string filename          = "";
                AdvancedVideoOptions avo = null;
                foreach (StreamInfo si in demuxedStreamList.streams)
                {
                    if (si.streamType == StreamType.Video)
                    {
                        filename = si.filename;
                        if (si.advancedOptions != null && si.advancedOptions.GetType() == typeof(AdvancedVideoOptions))
                        {
                            avo = (AdvancedVideoOptions)si.advancedOptions;
                        }
                        break;
                    }
                }

                string fps    = "";
                string resX   = "";
                string resY   = "";
                string length = "";
                string frames = "";

                try
                {
                    MediaInfoLib.MediaInfo mi2 = new MediaInfoLib.MediaInfo();
                    mi2.Open(filename);
                    mi2.Option("Complete", "1");
                    string[] tmpstr = mi2.Inform().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string s in tmpstr)
                    {
                        logWindow.MessageCrop(s.Trim());
                    }
                    if (mi2.Count_Get(StreamKind.Video) > 0)
                    {
                        fps    = mi2.Get(StreamKind.Video, 0, "FrameRate");
                        resX   = mi2.Get(StreamKind.Video, 0, "Width");
                        resY   = mi2.Get(StreamKind.Video, 0, "Height");
                        length = mi2.Get(StreamKind.Video, 0, "Duration");
                        frames = mi2.Get(StreamKind.Video, 0, "FrameCount");
                    }
                    mi2.Close();
                }
                catch (Exception ex)
                {
                    logWindow.MessageCrop(Global.Res("ErrorMediaInfo") + " " + ex.Message);
                    return(false);
                }

                if (avo != null && avo.disableFps)
                {
                    logWindow.MessageCrop(Global.Res("InfoManualFps"));
                    fps    = avo.fps;
                    length = avo.length;
                    frames = avo.frames;
                }

                if (fps == "")
                {
                    logWindow.MessageCrop(Global.Res("ErrorFramerate"));
                    foreach (StreamInfo si in demuxedStreamList.streams)
                    {
                        if (si.streamType == StreamType.Video)
                        {
                            if (si.desc.Contains("24 /1.001"))
                            {
                                logWindow.MessageCrop(Global.ResFormat("InfoFps", " 23.976"));
                                fps = "23.976";
                                break;
                            }
                            else if (si.desc.Contains("1080p24 (16:9)"))
                            {
                                logWindow.MessageCrop(Global.ResFormat("InfoFps", " 24"));
                                fps = "24";
                                break;
                            }
                            // add other framerates here
                        }
                    }
                    if (fps == "")
                    {
                        logWindow.MessageCrop(Global.Res("ErrorNoFramerate"));
                        return(false);
                    }
                }

                if (frames == "" || length == "")
                {
                    logWindow.MessageCrop(Global.Res("InfoFrames"));
                }

                CropInfo cropInfo = new CropInfo();
                if (!settings.untouchedVideo)
                {
                    if (settings.cropInput == 1 || settings.encodeInput == 1)
                    {
                        bool skip = false;
                        if (File.Exists(filename + ".ffindex") && !settings.deleteIndex)
                        {
                            skip = true;
                        }
                        if (!skip)
                        {
                            it            = new IndexTool(settings, filename, IndexType.ffmsindex);
                            it.OnInfoMsg += new ExternalTool.InfoEventHandler(IndexMsg);
                            it.OnLogMsg  += new ExternalTool.LogEventHandler(IndexMsg);
                            it.Start();
                            it.WaitForExit();
                            if (it == null || !it.Successfull)
                            {
                                logWindow.MessageCrop(Global.Res("ErrorIndex"));
                                return(false);
                            }
                        }
                    }

                    if (settings.cropInput == 2 || settings.encodeInput == 2)
                    {
                        string output = System.IO.Path.ChangeExtension(filename, "dgi");

                        bool skip = false;
                        if (File.Exists(output) && !settings.deleteIndex)
                        {
                            skip = true;
                        }
                        if (!skip)
                        {
                            it            = new IndexTool(settings, filename, IndexType.dgindex);
                            it.OnInfoMsg += new ExternalTool.InfoEventHandler(IndexMsg);
                            it.OnLogMsg  += new ExternalTool.LogEventHandler(IndexMsg);
                            it.Start();
                            it.WaitForExit();
                            if (!it.Successfull)
                            {
                                logWindow.MessageCrop(Global.Res("ErrorIndex"));
                                return(false);
                            }
                        }
                    }

                    if (avo == null || !avo.disableAutocrop)
                    {
                        if (settings.cropInput == 0)
                        {
                            File.WriteAllText(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs",
                                              "DirectShowSource(\"" + filename + "\")");
                        }
                        else if (settings.cropInput == 1)
                        {
                            string data   = "";
                            string dlldir = System.IO.Path.GetDirectoryName(settings.ffmsindexPath);
                            if (File.Exists(dlldir + "\\ffms2.dll"))
                            {
                                data = "LoadPlugin(\"" + dlldir + "\\ffms2.dll" + "\")\r\n";
                            }
                            data += "FFVideoSource(\"" + filename + "\")";
                            File.WriteAllText(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs", data);
                        }
                        else if (settings.cropInput == 2)
                        {
                            string output = System.IO.Path.ChangeExtension(filename, "dgi");
                            string data   = "";
                            string dlldir = System.IO.Path.GetDirectoryName(settings.dgindexnvPath);
                            if (File.Exists(dlldir + "\\DGDecodeNV.dll"))
                            {
                                data = "LoadPlugin(\"" + dlldir + "\\DGDecodeNV.dll" + "\")\r\n";
                            }
                            data += "DGSource(\"" + output + "\")";
                            File.WriteAllText(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs", data);
                        }
                        logWindow.MessageCrop(Global.Res("InfoStartCrop"));

                        AutoCrop ac = new AutoCrop(settings.workingDir + "\\" + settings.filePrefix + "_cropTemp.avs", settings, ref cropInfo);

                        if (cropInfo.error)
                        {
                            logWindow.MessageCrop(Global.Res("ErrorException") + " " + cropInfo.errorStr);
                            return(false);
                        }

                        if (settings.minimizeAutocrop && !settings.manualCrop)
                        {
                            ac.WindowState = FormWindowState.Minimized;
                        }

                        ac.NrFrames   = settings.nrFrames;
                        ac.BlackValue = settings.blackValue;
                        ac.ShowDialog();

                        if (cropInfo.error)
                        {
                            logWindow.MessageCrop(Global.Res("ErrorException") + " " + cropInfo.errorStr);
                            return(false);
                        }
                        cropInfo.resizeMethod = settings.resizeMethod;
                    }
                    else
                    {
                        cropInfo.border       = avo.manualBorders;
                        cropInfo.borderBottom = avo.borderBottom;
                        cropInfo.borderTop    = avo.borderTop;
                        cropInfo.resize       = avo.manualResize;
                        cropInfo.resizeX      = avo.resizeX;
                        cropInfo.resizeY      = avo.resizeY;
                        cropInfo.resizeMethod = avo.resizeMethod;
                        cropInfo.error        = false;
                        if (avo.manualCrop)
                        {
                            cropInfo.cropBottom = avo.cropBottom;
                            cropInfo.cropTop    = avo.cropTop;
                        }
                        else
                        {
                            cropInfo.cropBottom = 0;
                            cropInfo.cropTop    = 0;
                        }
                    }

                    logWindow.MessageCrop("");
                    logWindow.MessageCrop(Global.ResFormat("InfoCropTop", cropInfo.cropTop));
                    logWindow.MessageCrop(Global.ResFormat("InfoCropBottom", cropInfo.cropBottom));
                    if (cropInfo.border)
                    {
                        logWindow.MessageCrop(Global.ResFormat("InfoBorderTop", cropInfo.borderTop));
                        logWindow.MessageCrop(Global.ResFormat("InfoBorderBottom", cropInfo.borderBottom));
                    }
                    if (cropInfo.resize)
                    {
                        logWindow.MessageCrop(Global.ResFormat("InfoResize", cropInfo.resizeX, cropInfo.resizeY));
                    }
                }
                foreach (StreamInfo si in demuxedStreamList.streams)
                {
                    if (si.streamType == StreamType.Video)
                    {
                        if (si.extraFileInfo.GetType() != typeof(VideoFileInfo))
                        {
                            si.extraFileInfo = new VideoFileInfo();
                        }

                        ((VideoFileInfo)si.extraFileInfo).fps    = fps;
                        ((VideoFileInfo)si.extraFileInfo).length = length;
                        ((VideoFileInfo)si.extraFileInfo).frames = frames;

                        ((VideoFileInfo)si.extraFileInfo).cropInfo = new CropInfo(cropInfo);
                    }
                }

                DoPlugin(PluginType.AfterAutoCrop);

                TitleInfo.SaveStreamInfoFile(demuxedStreamList, settings.workingDir + "\\" + settings.filePrefix + "_streamInfo.xml");
                demuxedStreamsWindow.UpdateDemuxedStreams();
                return(true);
            }
            catch (Exception ex)
            {
                logWindow.MessageCrop(Global.Res("ErrorException") + " " + ex.Message);
                return(false);
            }
            finally
            {
            }
        }