/// <summary> /// Occurs when data is received from the executing application. /// </summary> private void FFmpeg_DataReceived(object sender, DataReceivedEventArgs e) { if (e.Data == null) { if (!isStarted && isFFmpeg) { ParseFileInfo(); } return; } output.AppendLine(e.Data); DataReceived?.Invoke(sender, e); if (isFFmpeg) { if (FileStreams == null && (e.Data.StartsWith("Output ") || e.Data.StartsWith("Press [q] to stop"))) { ParseFileInfo(); } if (e.Data.StartsWith("Press [q] to stop") || e.Data.StartsWith("frame=")) { isStarted = true; } if (isStarted && e.Data.StartsWith("frame=")) { FFmpegStatus ProgressInfo = FFmpegParser.ParseProgress(e.Data); StatusUpdated?.Invoke(this, new StatusUpdatedEventArgs(ProgressInfo)); } } }
/// <summary> /// Parses FFmpeg's progress into an object. /// </summary> /// <param name="text">The raw output line from FFmpeg.</param> /// <returns>A FFmpegProgress object.</returns> public FFmpegStatus ParseFFmpegProgress(string text) { FFmpegStatus Result = new FFmpegStatus(); if (string.IsNullOrEmpty(text)) { return(Result); } // frame= 929 fps=0.0 q=-0.0 size= 68483kB time=00:00:37.00 bitrate=15162.6kbits/s speed= 74x string[] Values = text.Split('='); try { Result.Frame = long.Parse(ParseAttribute(text, "frame"), CultureInfo.InvariantCulture); Result.Fps = float.Parse(ParseAttribute(text, "fps"), CultureInfo.InvariantCulture); Result.Quantizer = float.Parse(ParseAttribute(text, "q"), CultureInfo.InvariantCulture); Result.Size = ParseAttribute(text, "size"); Result.Time = TimeSpan.Parse(ParseAttribute(text, "time"), CultureInfo.InvariantCulture); Result.Bitrate = ParseAttribute(text, "bitrate"); string SpeedString = ParseAttribute(text, "speed"); if (SpeedString != "N/A") { Result.Speed = float.Parse(SpeedString.TrimEnd('x'), CultureInfo.InvariantCulture); } } catch { } return(Result); }
/// <summary> /// Parses FFmpeg's progress into an object. /// </summary> /// <param name="text">The raw output line from FFmpeg.</param> /// <returns>A FFmpegProgress object.</returns> internal static FFmpegStatus ParseProgress(string text) { FFmpegStatus Result = new FFmpegStatus(); var qtdOutputs = _quantizerRegex.Matches(text).Count; //if (text.IndexOf("Lq") == -1) //{ // frame= 929 fps=0.0 q=-0.0 size= 68483kB time=00:00:37.00 bitrate=15162.6kbits/s speed= 74x // frame= 4151 fps=130 q=-1.0 Lq=-1.0 size=N/A time=00:06:55.00 bitrate=N/A dup=0 drop=16566 speed= 13x string[] Values = text.Split('='); try { Result.Frame = int.Parse(Values[1].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); Result.Fps = float.Parse(Values[2].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); var i = 0; for (; i < qtdOutputs; i++) { Result.Quantizer = float.Parse(Values[3 + i].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); } i--; Result.Size = Values[4 + i].TrimStart().Split(' ')[0]; Result.Time = TimeSpan.Parse(Values[5 + i].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); Result.Bitrate = Values[6 + i].TrimStart().Split(' ')[0]; string SpeedString = Values[7 + i].Trim().Split('x')[0]; if (SpeedString != "N/A") { Result.Speed = float.Parse(SpeedString, CultureInfo.InvariantCulture); } } catch { } //} //else //{ // string[] Values = text.Split('='); // try // { // Result.Frame = int.Parse(Values[1].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); // Result.Fps = float.Parse(Values[2].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); // Result.Quantizer = float.Parse(Values[3].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); // Result.Size = Values[5].TrimStart().Split(' ')[0]; // Result.Time = TimeSpan.Parse(Values[6].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); // Result.Bitrate = Values[7].TrimStart().Split(' ')[0]; // string SpeedString = Values[8].Trim().Split('x')[0]; // if (SpeedString != "N/A") // Result.Speed = float.Parse(SpeedString, CultureInfo.InvariantCulture); // } // catch // { // } //} return(Result); }
/// <summary> /// Occurs when data is received from the executing application. /// </summary> private void FFmpeg_DataReceived(object sender, DataReceivedEventArgs e) { if (e.Data == null) { // We're reading both Output and Error streams, only parse on 2nd null. if (!isStarted && encoder != EncoderApp.Other) { ParseFileInfo(); } return; } output.AppendLine(e.Data); DataReceived?.Invoke(sender, e); if (encoder == EncoderApp.FFmpeg) { if (FileStreams == null && (e.Data.StartsWith("Output ") || e.Data.StartsWith("Press [q] to stop"))) { ParseFileInfo(); } if (e.Data.StartsWith("Press [q] to stop") || e.Data.StartsWith("frame=")) { isStarted = true; } if (isStarted && e.Data.StartsWith("frame=")) { FFmpegStatus ProgressInfo = FFmpegParser.ParseFFmpegProgress(e.Data); LastStatusReceived = ProgressInfo; StatusUpdated?.Invoke(this, new StatusUpdatedEventArgs(ProgressInfo)); } } else if (encoder == EncoderApp.x264) { if (!isStarted && e.Data.StartsWith("frames ")) { isStarted = true; } else if (isStarted && e.Data.Length == 48) { FFmpegStatus ProgressInfo = FFmpegParser.ParseX264Progress(e.Data); LastStatusReceived = ProgressInfo; StatusUpdated?.Invoke(this, new StatusUpdatedEventArgs(ProgressInfo)); } } }
/// <summary> /// Parses x264's progress into an object. /// </summary> /// <param name="text">The raw output line from FFmpeg.</param> /// <returns>A FFmpegProgress object.</returns> public FFmpegStatus ParseX264Progress(string text) { FFmpegStatus Result = new FFmpegStatus(); if (text == null || text.Length != 48) { return(Result); } // 1 0.10 10985.28 0:00:10 22.35 KB string[] Values = text.Split('='); try { Result.Frame = int.Parse(text.Substring(0, 6).Trim()); Result.Fps = float.Parse(text.Substring(6, 7).Trim()); Result.Bitrate = text.Substring(13, 10).Trim(); Result.Size = text.Substring(34, 12).Trim(); } catch { } return(Result); }
/// <summary> /// Parses FFmpeg's progress into an object. /// </summary> /// <param name="text">The raw output line from FFmpeg.</param> /// <returns>A FFmpegProgress object.</returns> internal static FFmpegStatus ParseProgress(string text) { FFmpegStatus Result = new FFmpegStatus(); // frame= 929 fps=0.0 q=-0.0 size= 68483kB time=00:00:37.00 bitrate=15162.6kbits/s speed= 74x string[] Values = text.Split('='); try { Result.Frame = int.Parse(Values[1].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); Result.Fps = float.Parse(Values[2].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); Result.Quantizer = float.Parse(Values[3].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); Result.Size = Values[4].TrimStart().Split(' ')[0]; Result.Time = TimeSpan.Parse(Values[5].TrimStart().Split(' ')[0], CultureInfo.InvariantCulture); Result.Bitrate = Values[6].TrimStart().Split(' ')[0]; string SpeedString = Values[7].Trim().Split('x')[0]; if (SpeedString != "N/A") { Result.Speed = float.Parse(SpeedString, CultureInfo.InvariantCulture); } } catch { } return(Result); }
public StatusUpdatedEventArgs(FFmpegStatus progress) { Status = progress; }