From aa5c8fe9c9a2408e33115292c027cba2c27dc65a Mon Sep 17 00:00:00 2001 From: Spencer Brower Date: Sat, 24 Feb 2024 11:27:58 -0500 Subject: [PATCH] feat: Filterchains can now be passed inputs and outputs. --- ffmpeg.nu | 24 +++++++++++++++++++----- ffmpeg_test.nu | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/ffmpeg.nu b/ffmpeg.nu index e65b2a8..d17e692 100644 --- a/ffmpeg.nu +++ b/ffmpeg.nu @@ -36,9 +36,7 @@ export def "run" [ def "append last" [ items: list ]: list -> list { - let list = $in; - - ($list | range 0..-2) | append [($list | default [] | last | append $items)] + update (($in | length) - 1) { $in | append $items } } export def "cmd filters append" [ @@ -97,8 +95,8 @@ def "filter to-string" []: record name: string params: table # Set the input and outputs of a filter chain export def filterchain [ - #input: list - #output: list + --input (-i): list + --output (-o): list filter: closure ] { let cmd = $in; @@ -118,6 +116,22 @@ export def filterchain [ } } | do $filter + | if ($input | is-empty | not $in) { + update filters { + update (($in | length) - 1) { + update 0.input $input + } + } + } else { $in } + | if ($output | is-empty | not $in) { + update filters { + update (($in | length) - 1) { + update (($in | length) - 1) { + update output $output + } + } + } + } else { $in } | update options.chain_filters $original_option ); } diff --git a/ffmpeg_test.nu b/ffmpeg_test.nu index ff16413..c334b85 100644 --- a/ffmpeg_test.nu +++ b/ffmpeg_test.nu @@ -227,3 +227,35 @@ def filterchain_appends_current_filter [] { options: { chain_filters: false } }; } + +#[test] +def filterchains_can_set_inputs_and_outputs [] { + let got = (cmd ['INPUT'] ['OUTPUT'] | filterchain -i ['in'] -o ['out'] { fps 25 | settb '1/25' }); + + assert equal $got { + input: ['INPUT'] + filters: [ + [ + { + input: ['in'] + name: 'fps' + params: [ + {param: 'fps' value: '25'} + ] + output: [] + } + { + input: [] + name: 'settb' + params: [ + {param: 'expr' value: '1/25'} + ] + output: ['out'] + } + ] + ] + output: ['OUTPUT'] + args: [] + options: { chain_filters: false } + } + }