Just renaming vars & print streams info in one call, not 3

This commit is contained in:
n00mkrad
2025-11-09 16:18:52 +01:00
parent 7279d1c38a
commit 3471df65ee

View File

@@ -39,7 +39,7 @@ namespace Flowframes.Media
public static async Task<List<Stream>> GetStreams(string path, bool progressBar, int streamCount, Fraction defaultFps, bool countFrames, MediaFile mediaFile = null) public static async Task<List<Stream>> GetStreams(string path, bool progressBar, int streamCount, Fraction defaultFps, bool countFrames, MediaFile mediaFile = null)
{ {
List<Stream> streamList = new List<Stream>(); List<Stream> streams = new List<Stream>();
try try
{ {
@@ -47,19 +47,19 @@ namespace Flowframes.Media
defaultFps = new Fraction(30, 1); defaultFps = new Fraction(30, 1);
string output = await GetFfmpegInfoAsync(path, "Stream #0:"); string output = await GetFfmpegInfoAsync(path, "Stream #0:");
string[] streams = output.SplitIntoLines().Where(x => x.MatchesWildcard("*Stream #0:*: *: *")).ToArray(); string[] streamStrings = output.SplitIntoLines().Where(x => x.MatchesWildcard("*Stream #0:*: *: *")).ToArray();
foreach (string streamStr in streams) foreach (string str in streamStrings)
{ {
try try
{ {
int idx = streamStr.Split(':')[1].Split('[')[0].Split('(')[0].GetInt(); int idx = str.Split(':')[1].Split('[')[0].Split('(')[0].GetInt();
bool def = await GetFfprobeInfoAsync(path, showStreams, "DISPOSITION:default", idx) == "1"; bool def = await GetFfprobeInfoAsync(path, showStreams, "DISPOSITION:default", idx) == "1";
if (progressBar) if (progressBar)
Program.mainForm.SetProgress(FormatUtils.RatioInt(idx + 1, streamCount)); Program.mainForm.SetProgress(FormatUtils.RatioInt(idx + 1, streamCount));
if (streamStr.Contains(": Video:")) if (str.Contains(": Video:"))
{ {
string lang = await GetFfprobeInfoAsync(path, showStreams, "TAG:language", idx); string lang = await GetFfprobeInfoAsync(path, showStreams, "TAG:language", idx);
string title = await GetFfprobeInfoAsync(path, showStreams, "TAG:title", idx); string title = await GetFfprobeInfoAsync(path, showStreams, "TAG:title", idx);
@@ -71,14 +71,14 @@ namespace Flowframes.Media
Size sar = SizeFromString(await GetFfprobeInfoAsync(path, showStreams, "sample_aspect_ratio", idx)); Size sar = SizeFromString(await GetFfprobeInfoAsync(path, showStreams, "sample_aspect_ratio", idx));
Size dar = SizeFromString(await GetFfprobeInfoAsync(path, showStreams, "display_aspect_ratio", idx)); Size dar = SizeFromString(await GetFfprobeInfoAsync(path, showStreams, "display_aspect_ratio", idx));
int frameCount = countFrames ? await GetFrameCountCached.GetFrameCountAsync(path) : 0; int frameCount = countFrames ? await GetFrameCountCached.GetFrameCountAsync(path) : 0;
FpsInfo fps = await GetFps(path, streamStr, idx, (Fraction)defaultFps, frameCount, allowFpsOverride: !mediaFile.IsVfr); FpsInfo fps = await GetFps(path, str, idx, (Fraction)defaultFps, frameCount, allowFpsOverride: !mediaFile.IsVfr);
VideoStream vStream = new VideoStream(lang, title, codec, codecLong, pixFmt, kbits, res, sar, dar, fps, frameCount) { Index = idx, IsDefault = def }; VideoStream vStream = new VideoStream(lang, title, codec, codecLong, pixFmt, kbits, res, sar, dar, fps, frameCount) { Index = idx, IsDefault = def };
Logger.Log($"Added video stream: {vStream}", true); Logger.Log($"Video stream: {vStream}", true);
streamList.Add(vStream); streams.Add(vStream);
continue; continue;
} }
if (streamStr.Contains(": Audio:")) if (str.Contains(": Audio:"))
{ {
string lang = await GetFfprobeInfoAsync(path, showStreams, "TAG:language", idx); string lang = await GetFfprobeInfoAsync(path, showStreams, "TAG:language", idx);
string title = await GetFfprobeInfoAsync(path, showStreams, "TAG:title", idx); string title = await GetFfprobeInfoAsync(path, showStreams, "TAG:title", idx);
@@ -93,12 +93,12 @@ namespace Flowframes.Media
AudioStream aStream = new AudioStream(lang, title, codec, codecLong, kbits, sampleRate, channels, layout); AudioStream aStream = new AudioStream(lang, title, codec, codecLong, kbits, sampleRate, channels, layout);
aStream.Index = idx; aStream.Index = idx;
aStream.IsDefault = def; aStream.IsDefault = def;
Logger.Log($"Added audio stream: {aStream}", true); Logger.Log($"Audio stream: {aStream}", true);
streamList.Add(aStream); streams.Add(aStream);
continue; continue;
} }
if (streamStr.Contains(": Subtitle:")) if (str.Contains(": Subtitle:"))
{ {
string lang = await GetFfprobeInfoAsync(path, showStreams, "TAG:language", idx); string lang = await GetFfprobeInfoAsync(path, showStreams, "TAG:language", idx);
string title = await GetFfprobeInfoAsync(path, showStreams, "TAG:title", idx); string title = await GetFfprobeInfoAsync(path, showStreams, "TAG:title", idx);
@@ -108,24 +108,24 @@ namespace Flowframes.Media
SubtitleStream sStream = new SubtitleStream(lang, title, codec, codecLong, bitmap); SubtitleStream sStream = new SubtitleStream(lang, title, codec, codecLong, bitmap);
sStream.Index = idx; sStream.Index = idx;
sStream.IsDefault = def; sStream.IsDefault = def;
Logger.Log($"Added subtitle stream: {sStream}", true); Logger.Log($"Subtitle stream: {sStream}", true);
streamList.Add(sStream); streams.Add(sStream);
continue; continue;
} }
if (streamStr.Contains(": Data:")) if (str.Contains(": Data:"))
{ {
string codec = await GetFfprobeInfoAsync(path, showStreams, "codec_name", idx); string codec = await GetFfprobeInfoAsync(path, showStreams, "codec_name", idx);
string codecLong = await GetFfprobeInfoAsync(path, showStreams, "codec_long_name", idx); string codecLong = await GetFfprobeInfoAsync(path, showStreams, "codec_long_name", idx);
DataStream dStream = new DataStream(codec, codecLong); DataStream dStream = new DataStream(codec, codecLong);
dStream.Index = idx; dStream.Index = idx;
dStream.IsDefault = def; dStream.IsDefault = def;
Logger.Log($"Added data stream: {dStream}", true); Logger.Log($"Data stream: {dStream}", true);
streamList.Add(dStream); streams.Add(dStream);
continue; continue;
} }
if (streamStr.Contains(": Attachment:")) if (str.Contains(": Attachment:"))
{ {
string codec = await GetFfprobeInfoAsync(path, showStreams, "codec_name", idx); string codec = await GetFfprobeInfoAsync(path, showStreams, "codec_name", idx);
string codecLong = await GetFfprobeInfoAsync(path, showStreams, "codec_long_name", idx); string codecLong = await GetFfprobeInfoAsync(path, showStreams, "codec_long_name", idx);
@@ -134,14 +134,14 @@ namespace Flowframes.Media
AttachmentStream aStream = new AttachmentStream(codec, codecLong, filename, mimeType); AttachmentStream aStream = new AttachmentStream(codec, codecLong, filename, mimeType);
aStream.Index = idx; aStream.Index = idx;
aStream.IsDefault = def; aStream.IsDefault = def;
Logger.Log($"Added attachment stream: {aStream}", true); Logger.Log($"Attachment stream: {aStream}", true);
streamList.Add(aStream); streams.Add(aStream);
continue; continue;
} }
Logger.Log($"Unknown stream (not vid/aud/sub/dat/att): {streamStr}", true); Logger.Log($"Unknown stream (not vid/aud/sub/dat/att): {str}", true);
Stream stream = new Stream { Codec = "Unknown", CodecLong = "Unknown", Index = idx, IsDefault = def, Type = Stream.StreamType.Unknown }; Stream stream = new Stream { Codec = "Unknown", CodecLong = "Unknown", Index = idx, IsDefault = def, Type = Stream.StreamType.Unknown };
streamList.Add(stream); streams.Add(stream);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -154,14 +154,12 @@ namespace Flowframes.Media
Logger.Log($"GetStreams Exception: {e.Message}\n{e.StackTrace}", true); Logger.Log($"GetStreams Exception: {e.Message}\n{e.StackTrace}", true);
} }
Logger.Log($"Video Streams: {string.Join(", ", streamList.Where(x => x.Type == Stream.StreamType.Video).Select(x => string.IsNullOrWhiteSpace(x.Title) ? "No Title" : x.Title))}", true); Logger.Log($"Found {streams.Count} streams - {streams.Count(x => x.Type == Stream.StreamType.Video)} video, {streams.Count(x => x.Type == Stream.StreamType.Audio)} audio, {streams.Count(x => x.Type == Stream.StreamType.Subtitle)} subtitle, {streams.Count(x => x.Type == Stream.StreamType.Data)} data, {streams.Count(x => x.Type == Stream.StreamType.Attachment)} attachment, {streams.Count(x => x.Type == Stream.StreamType.Unknown)} unknown", true);
Logger.Log($"Audio Streams: {string.Join(", ", streamList.Where(x => x.Type == Stream.StreamType.Audio).Select(x => string.IsNullOrWhiteSpace(x.Title) ? "No Title" : x.Title))}", true);
Logger.Log($"Subtitle Streams: {string.Join(", ", streamList.Where(x => x.Type == Stream.StreamType.Subtitle).Select(x => string.IsNullOrWhiteSpace(x.Title) ? "No Title" : x.Title))}", true);
if (progressBar) if (progressBar)
Program.mainForm.SetProgress(0); Program.mainForm.SetProgress(0);
return streamList; return streams;
} }
private static async Task<FpsInfo> GetFps(string path, string streamStr, int streamIdx, Fraction defaultFps, int frameCount, bool allowFpsOverride = false) private static async Task<FpsInfo> GetFps(string path, string streamStr, int streamIdx, Fraction defaultFps, int frameCount, bool allowFpsOverride = false)