public void Start() { Esecuzione = new Thread((object cp) => { if (cp == null || !(cp is CountParameter)) { MessageBox.Show("Occorre passare i parametri per il conteggio!", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (!FFmpeg.Loaded) { MessageBox.Show("FFmpeg non inizializzato!", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } CountParameter conv = (CountParameter)cp; int Total = conv.mfsp.Root.GetNodeCount(FileSystemNodePlusLevelType.AllNode, FileSystemNodePlusType.File); progressBar_total.SetMaximumInvoke(Total); FFMpegMediaMetadataMp3 ff = new FFMpegMediaMetadataMp3(); ff.BitRateMp3 = 320; long l = CalcoloSpazio(conv.mfsp.Root, conv.mfsp, ff); //kb String Post = "KB"; double d = 0; if (l > 1024) { d = l / 1024.0;//mb Post = "MB"; if (d > 1024.0) { d /= 1024.0;//gb Post = "GB"; } } else d = l; textBox1.SetTextInvoke(d + " " + Post); }); Esecuzione.Start(CP); }
object ICloneablePlus.Clone() { FFMpegMediaMetadataMp3 t = new FFMpegMediaMetadataMp3(this); return t; }
public static bool FlacToMp3(String Input,String Output,FFMpegMediaMetadataMp3 ConversionParameters, bool OverrideIfExist,FFmpegConvertStatusChanged OnStatusChanged=null, FFmpegConvertProgressChanged OnProgressChanged=null, bool Async = true ) { if (!_Loaded) return false; if (ConversionParameters == null || ConversionParameters.SamplingRate == SamplingRateInfo.nul || ConversionParameters.SamplingRate == 0 || ConversionParameters.BitRateMp3 == 0) return false; if (CheckValidInput(Input) && CheckValidOutput(Output)) { if (File.Exists(Output)) { if (OverrideIfExist) File.Delete(Output); else return true; } MyProcess p = new MyProcess(_PathFFmpeg, "-i \"" + Input + "\" -map 0:0 -map 0:1? -c:a:0 libmp3lame -ab "+ ConversionParameters.BitRateMp3 + "k -ar "+ConversionParameters.SamplingRate.ToStringReplace("_","")+" -map_metadata 0 -id3v2_version 3 -c:v copy \"" + Output + "\""); if (OnStatusChanged != null) { p.OnStatusChanged += (ProcessStatus s) => { if (s == ProcessStatus.Running) OnStatusChanged(FFmpegStatus.Running, Input, Output); else if (s == ProcessStatus.Stop) OnStatusChanged(FFmpegStatus.Stop, Input, Output); }; } if (OnProgressChanged != null) { bool AspettaLaDurata = false; bool AspettaProgress = false; long TotalMilliSec = 0; p.OnNewLine += (string line) => { if (line == null) return; else if (line.StartsWith("Input")) { AspettaLaDurata = true; AspettaProgress = false; } else if (AspettaLaDurata && line.StartsWith(" Duration:")) { line = line.RemoveLeft(" Duration: "); line = line.SplitAndGetFirst(','); string[] ss=line.Split(':', '.'); if (ss.Length == 4) { AspettaLaDurata = false; AspettaProgress = true; TotalMilliSec = ss[3].ParseInt() * 10 + ss[2].ParseInt() * 1000 + ss[1].ParseInt() * 60000 + ss[0].ParseInt() * 3600000; } else { TotalMilliSec = -1; AspettaLaDurata = false; AspettaProgress = false; } } else if(AspettaProgress && line.Contains("No such file or directory")) { OnProgressChanged(-1, Input, Output,FFmpegError.DestFolderNotFound); } else if (AspettaProgress && ( line.StartsWith("frame") || line.StartsWith("size") )) { line = line.Substring(line.IndexOf("time=") + 5, 11); string[] ss = line.Split(':', '.'); if (ss.Length == 4) { long current = ss[3].ParseInt() * 10 + ss[2].ParseInt() * 1000 + ss[1].ParseInt() * 60000 + ss[0].ParseInt() * 3600000; OnProgressChanged((int)((double)current / TotalMilliSec * 100), Input, Output); } } }; } p.UseShellExecute = false; p.RedirectStandardOutput = true; p.RedirectStandardError = true; p.CreateNoWindow = true; p.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; SystemService.CreateFolderSecure(SystemService.GetParent(Output)); p.Async = Async; p.Start(); } else return false; return true; }
//esporta singola cartella Convertito private void toolStripMenuItem4_Click(object sender, EventArgs e) { new Thread(() => { if (listBox_playlists.SelectedItemInvoke() is Playlist) { FolderSelectDialog fsd = new FolderSelectDialog(); if (fsd.ShowDialog()) { DialogResult dr = MessageBox.Show("Sovrascrivere eventuali file esistenti?\r\n\r\nSi: il processo Sovrascriverà eventuali file già presenti con lo stesso nome\r\nNo: Il processo VERRA' comunque avviato ma, se un file è già presente nella cartella di Output, questo non verrà sovrascritto\r\nAnnulla: Il processo verrà interrotto", "Conferma Sovrascrittura", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation); if (dr == DialogResult.Cancel) return; bool OverrideIfExist = dr == DialogResult.Yes ? true : false; String destFolder = fsd.FileName; Playlist p = (Playlist)listBox_playlists.SelectedItemInvoke(); FFMpegMediaMetadataMp3 temp = new FFMpegMediaMetadataMp3(); temp.BitRateMp3 = 320; temp.SamplingRate = SamplingRateInfo._44100; ConversionParameter cp = new ConversionParameter(ConversinType.SoloDiversi, temp, OverrideIfExist); ConvertMedia CM = new ConvertMedia(); List<FileSystemNodePlus<MyAddittionalData>> lt = p.FileSystem.Clone().Flatten().ToList(); lt.ForEach(x => x.Parent = x.FirstParent); CM.BeginConvertPlaylist(lt, IndexMediaLibrary, destFolder, cp); } } }).Start(); }