private void buttonSave_Click(object sender, RoutedEventArgs e) { try { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "*_streamInfo.xml|*.xml"; if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { TitleInfo.SaveStreamInfoFile(mainWindow.DemuxedStreams, sfd.FileName); } } catch (Exception) { } }
private bool DoSubtitle() { try { DoPlugin(PluginType.BeforeSubtitle); if (!Directory.Exists(settings.workingDir)) { logWindow.MessageDemux(Global.Res("ErrorWorkingDirectory")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorWorkingDirectory")); } return(false); } if (demuxedStreamList.streams.Count == 0) { logWindow.MessageSubtitle(Global.Res("ErrorNoDemuxedStreams")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorNoDemuxedStreams")); } return(false); } string fps = ""; foreach (StreamInfo si in demuxedStreamList.streams) { if (si.streamType == StreamType.Video) { if (si.extraFileInfo.GetType() == typeof(VideoFileInfo)) { fps = ((VideoFileInfo)si.extraFileInfo).fps; break; } } } if (fps == "") { logWindow.MessageSubtitle(Global.Res("ErrorSetFramerate")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorSetFramerate")); } return(false); } UpdateStatus(Global.Res("StatusBar") + " " + Global.Res("StatusBarSubtitle")); int subtitleCount = 0; foreach (StreamInfo si in demuxedStreamList.streams) { if (si.streamType == StreamType.Subtitle) { subtitleCount++; if (si.extraFileInfo == null || si.extraFileInfo.GetType() != typeof(SubtitleFileInfo)) { si.extraFileInfo = new SubtitleFileInfo(); } } } if (subtitleCount == 0) { logWindow.MessageSubtitle(Global.Res("InfoNoSubtitles")); return(true); } bool suptitle = false; foreach (StreamInfo si in demuxedStreamList.streams) { if (si.streamType == StreamType.Subtitle) { if (si.advancedOptions != null && si.advancedOptions.GetType() == typeof(AdvancedSubtitleOptions)) { if (((AdvancedSubtitleOptions)si.advancedOptions).supTitle) { if (!suptitle) { suptitle = true; } } } } } int muxSubs = settings.muxSubs; if (suptitle) { muxSubs = 0; } // do not mux and copy subs if (muxSubs == 0 && settings.copySubs == 0) { logWindow.MessageSubtitle(Global.Res("InfoNoSubtitlesProcessing")); return(true); } // only untouched subs else if (settings.muxUntouchedSubs && settings.copyUntouchedSubs) { logWindow.MessageSubtitle(Global.Res("InfoNoSubtitlesProcessing")); return(true); } else if (settings.muxUntouchedSubs && settings.copySubs == 0) { logWindow.MessageSubtitle(Global.Res("InfoNoSubtitlesProcessing")); return(true); } else if (muxSubs == 0 && settings.copyUntouchedSubs) { logWindow.MessageSubtitle(Global.Res("InfoNoSubtitlesProcessing")); return(true); } DisableControls(); bool sub = false; bool sup = false; if (settings.muxSubs > 0 && settings.muxSubs < 4) { sub = true; } else if (settings.muxSubs >= 4) { sup = true; } if (settings.copySubs > 0 && settings.copySubs < 4) { sub = true; } else if (settings.copySubs >= 4) { sup = true; } bool error = false; int subtitle = 0; for (int i = 0; i < demuxedStreamList.streams.Count; i++) { if (demuxedStreamList.streams[i].streamType == StreamType.Subtitle) { if (demuxedStreamList.streams[i].extraFileInfo != null && demuxedStreamList.streams[i].extraFileInfo.GetType() == typeof(SubtitleFileInfo) && ((SubtitleFileInfo)demuxedStreamList.streams[i].extraFileInfo).isSecond) { continue; } subtitle++; StreamInfo si = demuxedStreamList.streams[i]; if (sub) { UpdateStatus(Global.Res("StatusBar") + " " + String.Format(Global.Res("StatusBarSubtitleNormal"), subtitle, subtitleCount)); st = new SubtitleTool(settings, fps, ref si, false, false, false); st.OnInfoMsg += new ExternalTool.InfoEventHandler(SubtitleMsg); st.OnLogMsg += new ExternalTool.LogEventHandler(SubtitleMsg); st.Start(); st.WaitForExit(); if (st == null || !st.Successfull) { error = true; } UpdateStatus(Global.Res("StatusBar") + " " + String.Format(Global.Res("StatusBarSubtitleForced"), subtitle, subtitleCount)); st = new SubtitleTool(settings, fps, ref si, true, false, false); st.OnInfoMsg += new ExternalTool.InfoEventHandler(SubtitleMsg); st.OnLogMsg += new ExternalTool.LogEventHandler(SubtitleMsg); st.Start(); st.WaitForExit(); if (st == null || !st.Successfull) { error = true; } } if (sup) { UpdateStatus(Global.Res("StatusBar") + " " + String.Format(Global.Res("StatusBarSubtitleNormalPgs"), subtitle, subtitleCount)); st = new SubtitleTool(settings, fps, ref si, false, false, true); st.OnInfoMsg += new ExternalTool.InfoEventHandler(SubtitleMsg); st.OnLogMsg += new ExternalTool.LogEventHandler(SubtitleMsg); st.Start(); st.WaitForExit(); if (st == null || !st.Successfull) { error = true; } UpdateStatus(Global.Res("StatusBar") + " " + String.Format(Global.Res("StatusBarSubtitleForcedPgs"), subtitle, subtitleCount)); st = new SubtitleTool(settings, fps, ref si, true, false, true); st.OnInfoMsg += new ExternalTool.InfoEventHandler(SubtitleMsg); st.OnLogMsg += new ExternalTool.LogEventHandler(SubtitleMsg); st.Start(); st.WaitForExit(); if (st == null || !st.Successfull) { error = true; } } if (settings.muxLowResSubs && (settings.muxSubs > 0 && settings.muxSubs < 4)) { UpdateStatus(Global.Res("StatusBar") + " " + String.Format(Global.Res("StatusBarSubtitleLowresNormal"), subtitle, subtitleCount)); si = demuxedStreamList.streams[i]; st = new SubtitleTool(settings, fps, ref si, false, true, false); st.OnInfoMsg += new ExternalTool.InfoEventHandler(SubtitleMsg); st.OnLogMsg += new ExternalTool.LogEventHandler(SubtitleMsg); st.Start(); st.WaitForExit(); if (st == null || !st.Successfull) { error = true; } UpdateStatus(Global.Res("StatusBar") + " " + String.Format(Global.Res("StatusBarSubtitleLowresForced"), subtitle, subtitleCount)); st = new SubtitleTool(settings, fps, ref si, true, true, false); st.OnInfoMsg += new ExternalTool.InfoEventHandler(SubtitleMsg); st.OnLogMsg += new ExternalTool.LogEventHandler(SubtitleMsg); st.Start(); st.WaitForExit(); if (st == null || !st.Successfull) { error = true; } } if (!error) { if (si.extraFileInfo != null && si.extraFileInfo.GetType() == typeof(SubtitleFileInfo)) { SubtitleFileInfo sfi = (SubtitleFileInfo)si.extraFileInfo; if ((sfi.forcedIdx != "" && sfi.normalIdx != "") || (sfi.forcedSup != "" && sfi.normalSup != "")) { StreamInfo si2 = new StreamInfo(demuxedStreamList.streams[i]); if (demuxedStreamList.streams[i].extraFileInfo != null && demuxedStreamList.streams[i].extraFileInfo.GetType() == typeof(SubtitleFileInfo)) { ((SubtitleFileInfo)demuxedStreamList.streams[i].extraFileInfo).forcedIdx = ""; ((SubtitleFileInfo)demuxedStreamList.streams[i].extraFileInfo).forcedSub = ""; ((SubtitleFileInfo)demuxedStreamList.streams[i].extraFileInfo).forcedSup = ""; ((SubtitleFileInfo)demuxedStreamList.streams[i].extraFileInfo).forcedIdxLowRes = ""; ((SubtitleFileInfo)demuxedStreamList.streams[i].extraFileInfo).forcedSubLowRes = ""; ((SubtitleFileInfo)demuxedStreamList.streams[i].extraFileInfo).isSecond = false; } si2.desc += " (only forced)";; if (si2.extraFileInfo != null && si2.extraFileInfo.GetType() == typeof(SubtitleFileInfo)) { ((SubtitleFileInfo)si2.extraFileInfo).normalIdx = ""; ((SubtitleFileInfo)si2.extraFileInfo).normalSub = ""; ((SubtitleFileInfo)si2.extraFileInfo).normalSup = ""; ((SubtitleFileInfo)si2.extraFileInfo).normalIdxLowRes = ""; ((SubtitleFileInfo)si2.extraFileInfo).normalSubLowRes = ""; ((SubtitleFileInfo)si2.extraFileInfo).isSecond = true; } bool add = true; if (demuxedStreamList.streams.Count > i + 1) { if (demuxedStreamList.streams[i + 1].extraFileInfo != null && demuxedStreamList.streams[i + 1].extraFileInfo.GetType() == typeof(SubtitleFileInfo)) { SubtitleFileInfo stfi = (SubtitleFileInfo)demuxedStreamList.streams[i + 1].extraFileInfo; if (stfi.normalIdx == ((SubtitleFileInfo)si2.extraFileInfo).normalIdx && stfi.normalSub == ((SubtitleFileInfo)si2.extraFileInfo).normalSub && stfi.normalSup == ((SubtitleFileInfo)si2.extraFileInfo).normalSup && stfi.normalIdxLowRes == ((SubtitleFileInfo)si2.extraFileInfo).normalIdxLowRes && stfi.normalSubLowRes == ((SubtitleFileInfo)si2.extraFileInfo).normalSubLowRes && stfi.forcedIdx == ((SubtitleFileInfo)si2.extraFileInfo).forcedIdx && stfi.forcedSub == ((SubtitleFileInfo)si2.extraFileInfo).forcedSub && stfi.forcedSup == ((SubtitleFileInfo)si2.extraFileInfo).forcedSup && stfi.forcedIdxLowRes == ((SubtitleFileInfo)si2.extraFileInfo).forcedIdxLowRes && stfi.forcedSubLowRes == ((SubtitleFileInfo)si2.extraFileInfo).forcedSubLowRes && demuxedStreamList.streams[i + 1].filename == si2.filename) { add = false; } } } if (add) { demuxedStreamList.streams.Insert(i + 1, si2); i++; } } // treat track as forced track even if it doesn't contain forced subs else if (sfi.normalIdx != "" || sfi.normalSup != "") { if (si.advancedOptions != null && si.advancedOptions.GetType() == typeof(AdvancedSubtitleOptions)) { if (((AdvancedSubtitleOptions)si.advancedOptions).isForced) { sfi.forcedIdx = sfi.normalIdx; sfi.forcedSub = sfi.normalSub; sfi.forcedSup = sfi.normalSup; sfi.forcedIdxLowRes = sfi.normalIdxLowRes; sfi.forcedSubLowRes = sfi.normalSubLowRes; sfi.normalIdx = ""; sfi.normalSub = ""; sfi.normalSup = ""; sfi.normalIdxLowRes = ""; sfi.normalSubLowRes = ""; } } } } } } demuxedStreamsWindow.UpdateDemuxedStreams(); } if (error) { logWindow.MessageSubtitle(Global.Res("ErrorSubtitle")); return(false); } DoPlugin(PluginType.AfterSubtitle); TitleInfo.SaveStreamInfoFile(demuxedStreamList, settings.workingDir + "\\" + settings.filePrefix + "_streamInfo.xml"); demuxedStreamsWindow.UpdateDemuxedStreams(); return(true); } catch (Exception ex) { logWindow.MessageSubtitle(Global.Res("ErrorException") + " " + ex.Message); return(false); } finally { EnableControls(); UpdateStatus(Global.Res("StatusBar") + " " + Global.Res("StatusBarReady")); } }
protected override void Process() { try { TitleInfo tmpList2 = new TitleInfo(); tmpList2.desc = streamList.desc; foreach (StreamInfo si in streamList.streams) { if (si.selected) { tmpList2.streams.Add(new StreamInfo(si)); } } //TitleInfo.SaveStreamInfoFile(demuxedStreamList, settings.workingDir + "\\" + settings.filePrefix + "_streamInfo.xml"); // sort streamlist TitleInfo tmpList = new TitleInfo(); tmpList.desc = tmpList2.desc; // chapter first foreach (StreamInfo si in tmpList2.streams) { if (si.streamType == StreamType.Chapter) { tmpList.streams.Add(new StreamInfo(si)); } } // video foreach (StreamInfo si in tmpList2.streams) { if (si.streamType == StreamType.Video) { if (settings.untouchedVideo) { if (si.extraFileInfo.GetType() != typeof(VideoFileInfo)) { si.extraFileInfo = new VideoFileInfo(); } ((VideoFileInfo)si.extraFileInfo).encodedFile = si.filename; } tmpList.streams.Add(new StreamInfo(si)); } } // audio foreach (LanguageInfo li in settings.preferredAudioLanguages) { foreach (StreamInfo si in tmpList2.streams) { if (si.streamType == StreamType.Audio) { if (si.language == li.language) { tmpList.streams.Add(new StreamInfo(si)); } } } } foreach (StreamInfo si in tmpList2.streams) { if (si.streamType == StreamType.Audio) { if (!HasLanguage(si.language)) { tmpList.streams.Add(new StreamInfo(si)); } } } // subtitle foreach (LanguageInfo li in settings.preferredAudioLanguages) { foreach (StreamInfo si in tmpList2.streams) { if (si.streamType == StreamType.Subtitle) { if (si.language == li.language) { tmpList.streams.Add(new StreamInfo(si)); } } } } foreach (StreamInfo si in tmpList2.streams) { if (si.streamType == StreamType.Subtitle) { if (!HasLanguage(si.language)) { tmpList.streams.Add(new StreamInfo(si)); } } } TitleInfo.SaveStreamInfoFile(tmpList, settings.workingDir + "\\" + settings.filePrefix + "_streamInfo.xml"); foreach (StreamInfo si in tmpList.streams) { demuxedStreamList.streams.Add(si); } demuxedStreamList.desc = tmpList.desc; successfull = true; } catch (Exception) { } }
private bool DoEncode() { try { if (!Directory.Exists(settings.workingDir)) { logWindow.MessageDemux(Global.Res("ErrorWorkingDirectory")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorWorkingDirectory")); } return(false); } if (settings.encodedMovieDir != "") { if (!Directory.Exists(settings.encodedMovieDir)) { logWindow.MessageDemux(Global.Res("ErrorEncodedMovieDirectory")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorEncodedMovieDirectory")); } return(false); } } if (demuxedStreamList.streams.Count == 0) { logWindow.MessageSubtitle(Global.Res("ErrorNoDemuxedStreams")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorNoDemuxedStreams")); } return(false); } VideoFileInfo vfi = null; StreamInfo vsi = null; bool suptitle = false; bool suptitleForced = false; StreamInfo ssi = null; foreach (StreamInfo si in demuxedStreamList.streams) { if (si.streamType == StreamType.Video) { vsi = si; if (si.extraFileInfo != null && si.extraFileInfo.GetType() == typeof(VideoFileInfo)) { vfi = (VideoFileInfo)si.extraFileInfo; } } else if (si.streamType == StreamType.Subtitle) { if (si.advancedOptions != null && si.advancedOptions.GetType() == typeof(AdvancedSubtitleOptions)) { if (((AdvancedSubtitleOptions)si.advancedOptions).supTitle) { // take first hardcode track if (!suptitle) { suptitle = true; suptitleForced = ((AdvancedSubtitleOptions)si.advancedOptions).supTitleOnlyForced; ssi = si; } } } } } if (vfi == null || vfi.cropInfo == null) { logWindow.MessageEncode(Global.Res("ErrorCropInfoNotSet")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorCropInfoNotSet")); } return(false); } else { vfi.encodeAvs = settings.workingDir + "\\" + settings.filePrefix + "_encode.avs"; string filename = vsi.filename; CropInfo cropInfo = vfi.cropInfo; logWindow.MessageEncode(""); logWindow.MessageEncode(Global.ResFormat("InfoCropTop", cropInfo.cropTop)); logWindow.MessageEncode(Global.ResFormat("InfoCropBottom", cropInfo.cropBottom)); if (cropInfo.border) { logWindow.MessageEncode(Global.ResFormat("InfoBorderTop", cropInfo.borderTop)); logWindow.MessageEncode(Global.ResFormat("InfoBorderBottom", cropInfo.borderBottom)); } if (cropInfo.resize) { logWindow.MessageEncode(Global.ResFormat("InfoResize", cropInfo.resizeX, cropInfo.resizeY)); } string encode = ""; if (suptitle) { if (File.Exists(settings.suptitlePath)) { encode += "LoadPlugin(\"" + settings.suptitlePath + "\")\r\n"; } } if (settings.encodeInput == 0) { encode = "DirectShowSource(\"" + filename + "\")\r\n"; } else if (settings.encodeInput == 1) { string dlldir = System.IO.Path.GetDirectoryName(settings.ffmsindexPath); if (File.Exists(dlldir + "\\ffms2.dll")) { encode += "LoadPlugin(\"" + dlldir + "\\ffms2.dll" + "\")\r\n"; } encode += "FFVideoSource(\"" + filename + "\")\r\n"; } else if (settings.encodeInput == 2) { string output = System.IO.Path.ChangeExtension(filename, "dgi"); string dlldir = System.IO.Path.GetDirectoryName(settings.dgindexnvPath); if (File.Exists(dlldir + "\\DGDecodeNV.dll")) { encode += "LoadPlugin(\"" + dlldir + "\\DGDecodeNV.dll" + "\")\r\n"; } encode += "DGSource(\"" + output + "\")\r\n"; } if (cropInfo.cropTop != 0 || cropInfo.cropBottom != 0) { encode += "Crop(0," + cropInfo.cropTop.ToString() + ",-0,-" + cropInfo.cropBottom.ToString() + ")\r\n"; } if (cropInfo.border) { encode += "AddBorders(0," + cropInfo.borderTop + ",0," + cropInfo.borderBottom + ")\r\n"; } else { logWindow.MessageEncode(Global.Res("InfoNoBorder")); } if (suptitle && ssi != null) { if (!suptitleForced) { if (File.Exists(ssi.filename)) { string forced = "false"; encode += "SupTitle(\"" + ssi.filename + "\", forcedOnly=" + forced + ", swapCbCr=false, relocate=true, relocOffset=\"0," + cropInfo.cropTop.ToString() + ",0," + cropInfo.cropBottom.ToString() + "\")\r\n"; } } else { if (File.Exists(ssi.filename)) { string forced = "true"; encode += "SupTitle(\"" + ssi.filename + "\", forcedOnly=" + forced + ", swapCbCr=false, relocate=true, relocOffset=\"0," + cropInfo.cropTop.ToString() + ",0," + cropInfo.cropBottom.ToString() + "\")\r\n"; } } } if (cropInfo.resize) { if (cropInfo.resizeMethod > -1 && cropInfo.resizeMethod < GlobalVars.resizeMethods.Count) { encode += GlobalVars.resizeMethods[cropInfo.resizeMethod] + "(" + cropInfo.resizeX.ToString() + "," + cropInfo.resizeY.ToString() + ")\r\n"; } else { encode += "LanczosResize(" + cropInfo.resizeX.ToString() + "," + cropInfo.resizeY.ToString() + ")\r\n"; } } else { logWindow.MessageEncode(Global.Res("InfoNoResize")); } int index = settings.lastAvisynthProfile; if (index > -1 && index < settings.avisynthSettings.Count) { string[] tmp = settings.avisynthSettings[index].commands.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in tmp) { encode += s.Trim() + "\r\n"; } } File.WriteAllText(settings.workingDir + "\\" + settings.filePrefix + "_encode.avs", encode); logWindow.MessageEncode(""); logWindow.MessageEncode(Global.Res("InfoAvsContent")); logWindow.MessageEncode(""); string[] tmpstr2 = encode.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in tmpstr2) { logWindow.MessageEncode(s); } } if (vfi == null || vfi.encodeAvs == "") { logWindow.MessageEncode(Global.Res("ErrorEncodeAvsNotSet")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorEncodeAvsNotSet")); } //return false; } int profile = settings.lastProfile; if (profile < 0) { logWindow.MessageEncode(Global.Res("ErrorEncodingProfileNotSet")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorEncodingProfileNotSet")); } return(false); } UpdateStatus(Global.Res("StatusBar") + " " + Global.ResFormat("StatusBarEncode", "")); DisableControls(); lastMsg = ""; secondPass = false; if (settings.use64bit && GetMaxFrames() > 0) { if (!settings.encodingSettings[profile].pass2) { maxProgressValue = GetMaxFrames(); } else { maxProgressValue = 2 * GetMaxFrames(); } progressBarMain.IsIndeterminate = false; progressBarMain.Maximum = 100; progressBarMain.Minimum = 0; } else if (!settings.use64bit) { if (!settings.encodingSettings[profile].pass2) { maxProgressValue = 100; } else { maxProgressValue = 200; } progressBarMain.IsIndeterminate = false; progressBarMain.Maximum = 100; progressBarMain.Minimum = 0; } UpdateStatusBar(0); et = new EncodeTool(settings, demuxedStreamList, profile, false, vfi); et.OnInfoMsg += new ExternalTool.InfoEventHandler(EncodeMsg); et.OnLogMsg += new ExternalTool.LogEventHandler(EncodeMsg); et.Start(); et.WaitForExit(); if (et == null || !et.Successfull) { vfi.encodedFile = ""; logWindow.MessageEncode(Global.Res("ErrorEncodeFailed")); return(false); } if (settings.encodingSettings[profile].pass2) { secondPass = true; et = new EncodeTool(settings, demuxedStreamList, profile, true, vfi); et.OnInfoMsg += new ExternalTool.InfoEventHandler(EncodeMsg); et.OnLogMsg += new ExternalTool.LogEventHandler(EncodeMsg); et.Start(); et.WaitForExit(); if (et == null || !et.Successfull) { vfi.encodedFile = ""; logWindow.MessageEncode(Global.Res("ErrorEncode2passFailed")); return(false); } } return(true); } catch (Exception ex) { logWindow.MessageEncode(Global.Res("ErrorException") + " " + ex.Message); return(false); } finally { progressBarMain.IsIndeterminate = true; if (isWindows7) { WPFExtensions.SetTaskbarProgressState(this, Windows7Taskbar.ThumbnailProgressState.NoProgress); } TitleInfo.SaveStreamInfoFile(demuxedStreamList, settings.workingDir + "\\" + settings.filePrefix + "_streamInfo.xml"); EnableControls(); UpdateStatus(Global.Res("StatusBar") + " " + Global.Res("StatusBarReady")); } }
private bool DoDemux() { try { DoPlugin(PluginType.BeforeDemux); if (!Directory.Exists(settings.workingDir)) { logWindow.MessageDemux(Global.Res("ErrorWorkingDirectory")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorWorkingDirectory")); } return(false); } if (comboBoxTitle.SelectedIndex == -1) { logWindow.MessageDemux(Global.Res("ErrorNoTitle")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorNoTitle")); } return(false); } int videoCount = 0; int audioCount = 0; int unknown = 0; foreach (StreamInfo si in titleList[comboBoxTitle.SelectedIndex].streams) { if (si.streamType == StreamType.Audio && si.selected) { audioCount++; } if (si.streamType == StreamType.Video && si.selected) { videoCount++; } if (si.streamType == StreamType.Unknown && si.selected) { unknown++; } } if (audioCount < 1) { logWindow.MessageDemux(Global.Res("ErrorNoAudio")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorNoAudio")); } return(false); } if (videoCount != 1) { logWindow.MessageDemux(Global.Res("ErrorNoVideo")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorNoVideo")); } return(false); } if (unknown > 0) { logWindow.MessageDemux(Global.Res("ErrorUnknownTracks")); if (!silent) { Global.ErrorMsg(Global.Res("ErrorUnknownTracks")); } return(false); } UpdateStatus(Global.Res("StatusBar") + " " + Global.Res("StatusBarDemux")); DisableControls(); string dtsBitrate = "1536"; string ac3Bitrate = "640"; if (settings.downmixDTSIndex >= 0 && settings.downmixDTSIndex < GlobalVars.dtsBitrates.Count) { dtsBitrate = GlobalVars.dtsBitrates[settings.downmixDTSIndex]; } if (settings.downmixAc3Index >= 0 && settings.downmixAc3Index < GlobalVars.ac3Bitrates.Count) { ac3Bitrate = GlobalVars.ac3Bitrates[settings.downmixAc3Index]; } dt = new DemuxTool(settings, m2tsList, GlobalVars.videoTypes, GlobalVars.ac3AudioTypes, GlobalVars.dtsAudioTypes, titleList[comboBoxTitle.SelectedIndex], ref demuxedStreamList, ac3Bitrate, dtsBitrate); dt.OnInfoMsg += new ExternalTool.InfoEventHandler(DemuxMsg); dt.OnLogMsg += new ExternalTool.LogEventHandler(DemuxMsg); dt.Start(); dt.WaitForExit(); DoPlugin(PluginType.AfterDemux); TitleInfo.SaveStreamInfoFile(demuxedStreamList, settings.workingDir + "\\" + settings.filePrefix + "_streamInfo.xml"); demuxedStreamsWindow.UpdateDemuxedStreams(); if (dt == null) { return(false); } else { return(dt.Successfull); } } catch (Exception ex) { logWindow.MessageDemux(Global.Res("ErrorException") + " " + ex.Message); return(false); } finally { EnableControls(); UpdateStatus(Global.Res("StatusBar") + " " + Global.Res("StatusBarReady")); } }
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 { } }