Commit 617dd206 authored by shrabbit's avatar shrabbit
Browse files

通过枚举器迭代。

parent db6feff9
Loading
Loading
Loading
Loading
+14 −16
Original line number Diff line number Diff line
@@ -55,28 +55,28 @@ public class MainCommand : AsyncCommand<MainCommand.Settings>
    /// <param name="file"></param>
    /// <param name="dir"></param>
    /// <returns>两层数组,第一次是每个命令,第二次是命令中的参数。</returns>
    public static string[][] GenerateFfMpegCommand(Settings settings, IFile file, IDirectory dir)
    public static IEnumerable<string[]> GenerateFfMpegCommand(Settings settings, IFile file, IDirectory dir)
    {
        var files = GetFiles(settings, dir);
        var arr = new string[files.Length][];

        var time = SimpleTimeSpanExpress.ToTimeSpan(settings.SliceTime);

        for (var i = 0; i < arr.Length; i++)
        foreach (var f in GetFiles(settings, dir))
        {
            arr[i] = ["-i", files[i], "-vf", $"\"fps:1/{time.TotalSeconds}\"", $"{settings.Desc}{files[i]}_%03d.{settings.Format}"];
            yield return [
                "-i", 
                f, 
                "-vf", 
                $"\"fps:1/{time.TotalSeconds}\"",
                Path.Join(settings.Desc, $"{f}_%03d.{settings.Format}")
            ];
        }

        return arr;
    }

    public static string[] GetFiles(Settings settings, IDirectory dir)
    public static IEnumerable<string> GetFiles(Settings settings, IDirectory dir)
    {
        if (settings.File is { } s) return [s];
        if (settings.File is { } s) yield break;
        
        var split = settings.VideoFormats.Split(',');

        var list = new List<string>();
        foreach (var f in dir.EnumerateFiles(settings.Directory))
        {
            foreach (var sp in split)
@@ -85,12 +85,10 @@ public class MainCommand : AsyncCommand<MainCommand.Settings>
                {
                    if (settings.NoExecute)
                        AnsiConsole.WriteLine($"找到: {f}");
                    list.Add(f);
                    yield return f;
                }
            }
        }
        
        return list.ToArray();
    }

    protected override async Task<int> ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken)
@@ -99,7 +97,7 @@ public class MainCommand : AsyncCommand<MainCommand.Settings>
        {
            foreach (var arr in GenerateFfMpegCommand(settings, FileBridge.Default, DirectoryBridge.Default))
            {
                AnsiConsole.WriteLine(string.Join('\u0020', arr));
                AnsiConsole.WriteLine($"{settings.FfMpegPath}{string.Join('\u0020', arr)}");
            }
            return 0;
        }