private void action_add() { //запоминаем старое положени трекбара string[] oldfiles = m.infileslist; Massive x = m.Clone(); try { FilesListWindow f = new FilesListWindow(x); if (f.m == null) return; x = f.m.Clone(); //если что-то изменилось bool needupdate = false; if (oldfiles.Length != x.infileslist.Length) needupdate = true; else { for (int i = 0; i < x.infileslist.Length; i++) { //Файлы поменялись местами if (oldfiles[i] != x.infileslist[i]) { needupdate = true; break; } } } if (needupdate) { string ext = Path.GetExtension(x.infilepath).ToLower(); //Для MPEG2Source и DGSource надо переиндексировать - проще закрыть и открыть файл(ы) заново if (x.vdecoder == AviSynthScripting.Decoders.MPEG2Source && !string.IsNullOrEmpty(x.indexfile) && ext != ".d2v" || x.vdecoder == AviSynthScripting.Decoders.DGSource && !string.IsNullOrEmpty(x.indexfile) && ext != ".dgi") { //Тут должна удалиться индекс-папка CloseFile(true); x.inaudiostreams = new ArrayList(); x.outaudiostreams = new ArrayList(); action_open(x); return; } //Обновляем возможные индекс-файлы от FFmpegSource2 if (!x.ffms_indexintemp) { foreach (string file in x.infileslist) { if (!ffcache.Contains(file + ".ffindex")) ffcache.Add(file + ".ffindex"); } } //Переиндексация для FFmpegSource2 if (x.vdecoder == AviSynthScripting.Decoders.FFmpegSource2) { Indexing_FFMS ffindex = new Indexing_FFMS(x); if (ffindex.m == null) { CloseFile(false); return; } } //Возможные индекс-файлы от LSMASH foreach (string file in x.infileslist) { if (!lsmashcache.Contains(file + ".lwi")) lsmashcache.Add(file + ".lwi"); } if (x.inaudiostreams.Count > 0) { AudioStream s = (AudioStream)x.inaudiostreams[x.inaudiostream]; ArrayList afiles = new ArrayList(); if (ext == ".d2v" || ext == ".dga" || ext == ".dgi") { foreach (string file in x.infileslist) { ArrayList afileslist = Indexing.GetTracks(file); if (afileslist.Count > 0) afiles.Add(afileslist[Math.Min(x.inaudiostream, afileslist.Count - 1)]); } } else if (!x.isvideo) //Для аудио файлов { foreach (string file in x.infileslist) afiles.Add(file); x.inframes = 0; x.induration = TimeSpan.Zero; } else afiles.Add(s.audiopath); s.audiofiles = Calculate.ConvertArrayListToStringArray(afiles); } //создаём новый AviSynth скрипт x = AviSynthScripting.CreateAutoAviSynthScript(x); //подсчитываем размер long sizeb = 0; foreach (string file in x.infileslist) { sizeb += new FileInfo(file).Length; } x.infilesize = Calculate.ConvertDoubleToPointString((double)sizeb / 1049511, 1) + " mb"; x.infilesizeint = (int)((double)sizeb / 1049511); //получаем длительность и фреймы Caching cach = new Caching(x, false); if (cach.m == null) return; x = cach.m.Clone(); //Нужно обновить кол-во кадров в BlankClip() if (x.vdecoder == AviSynthScripting.Decoders.BlankClip) x = AviSynthScripting.CreateAutoAviSynthScript(x); x = Calculate.UpdateOutFrames(x); //загружаем обновлённый скрипт m = x.Clone(); LoadVideo(MediaLoad.load); UpdateTaskMassive(m); } } catch (Exception ex) { ErrorException("AppendFile: " + ex.Message, ex.StackTrace); } }
public static Massive GetFriendFilesList(Massive m) { string friendfile; ArrayList fileslist = new ArrayList(); if (Calculate.IsValidVOBName(m.infilepath)) { if (Path.GetFileName(m.infilepath).ToUpper() != "VIDEO_TS.VOB") { string title = Calculate.GetTitleNum(m.infilepath); string dir = Path.GetDirectoryName(m.infilepath).TrimEnd(new char[] { '\\' }); //C:\, но C:\Some_Path for (int i = 1; i <= 20; i++) { friendfile = dir + "\\VTS_" + title + "_" + i.ToString() + ".VOB"; if (File.Exists(friendfile)) fileslist.Add(friendfile); } //Если каким-то чудесным образом ни одного файла не нашлось if (fileslist.Count == 0) fileslist.Add(m.infilepath); } else fileslist.Add(m.infilepath); } else { fileslist.Add(m.infilepath); char[] chars = Path.GetFileNameWithoutExtension(m.infilepath).ToCharArray(); int pos = 0; foreach (char c in chars) { pos += 1; string cstring = c.ToString(); if (cstring == "1") { string dir = Path.GetDirectoryName(m.infilepath).TrimEnd(new char[] { '\\' }) + "\\"; //Так надо string file_name = Path.GetFileNameWithoutExtension(m.infilepath); string ext = Path.GetExtension(m.infilepath); for (int i = 2; i <= 9; i++) { friendfile = dir + file_name.Remove(pos - 1, 1).Insert(pos - 1, i.ToString()) + ext; if (File.Exists(friendfile)) fileslist.Add(friendfile); } } } } //забиваем все найденные файлы m.infileslist = Calculate.ConvertArrayListToStringArray(fileslist); //диалог выбора файлов если их больше одного if (fileslist.Count > 1) { FilesListWindow f = new FilesListWindow(m); if (f.m != null) m = f.m.Clone(); else m = null; } return m; }
public static Massive GetFriendFilesList(Massive m) { string friendfile; ArrayList fileslist = new ArrayList(); if (Calculate.IsValidVOBName(m.infilepath)) { if (Path.GetFileName(m.infilepath).ToUpper() != "VIDEO_TS.VOB") { string title = Calculate.GetTitleNum(m.infilepath); string dir = Path.GetDirectoryName(m.infilepath).TrimEnd(new char[] { '\\' }); //C:\, но C:\Some_Path for (int i = 1; i <= 20; i++) { friendfile = dir + "\\VTS_" + title + "_" + i.ToString() + ".VOB"; if (File.Exists(friendfile)) { fileslist.Add(friendfile); } } //Если каким-то чудесным образом ни одного файла не нашлось if (fileslist.Count == 0) { fileslist.Add(m.infilepath); } } else { fileslist.Add(m.infilepath); } } else { fileslist.Add(m.infilepath); char[] chars = Path.GetFileNameWithoutExtension(m.infilepath).ToCharArray(); int pos = 0; foreach (char c in chars) { pos += 1; string cstring = c.ToString(); if (cstring == "1") { string dir = Path.GetDirectoryName(m.infilepath).TrimEnd(new char[] { '\\' }) + "\\"; //Так надо string file_name = Path.GetFileNameWithoutExtension(m.infilepath); string ext = Path.GetExtension(m.infilepath); for (int i = 2; i <= 9; i++) { friendfile = dir + file_name.Remove(pos - 1, 1).Insert(pos - 1, i.ToString()) + ext; if (File.Exists(friendfile)) { fileslist.Add(friendfile); } } } } } //забиваем все найденные файлы m.infileslist = Calculate.ConvertArrayListToStringArray(fileslist); //диалог выбора файлов если их больше одного if (fileslist.Count > 1) { FilesListWindow f = new FilesListWindow(m); if (f.m != null) { m = f.m.Clone(); } else { m = null; } } return(m); }