commit 555073c4283a510ce10cef5b01ee7e0a8c44a093 Author: Spencer Brower Date: Mon Jan 8 13:35:14 2024 -0500 feat: Initial commit. diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..44610e5 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..92b2793 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.direnv diff --git a/README.md b/README.md new file mode 100644 index 0000000..06abc23 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# + +```nu +use ./ffprobe diff --git a/ffprobe b/ffprobe new file mode 100755 index 0000000..8b88819 --- /dev/null +++ b/ffprobe @@ -0,0 +1,36 @@ +#!/usr/bin/env nu +# vim: filetype=nu : + +# Multimedia stream analyzer. +export def main [ + ...input_files: path +] { + $input_files | each { + ^ffprobe -v quiet -print_format json -show_format -show_streams $in | from json + } +} + +# Retrieve all the streams from a list of ffprobe outputs +export def streams [] { + let streams = ($in | get streams); + + match ($streams | describe) { + 'list>' => ($streams | flatten), + _ => $streams + } +} + +# Retrieve all the video streams from a list of ffprobe outputs +export def "streams video" [] { + $in | streams | where codec_type == "video" +} + +# Retrieve all the audio streams from a list of ffprobe outputs +export def "streams audio" [] { + $in | streams | where codec_type == "audio" +} + +# Get the dimensions of a video stream +export def "dimensions" [] { + $in | select width height +} diff --git a/filters.nu b/filters.nu new file mode 100755 index 0000000..dd21249 --- /dev/null +++ b/filters.nu @@ -0,0 +1,22 @@ +#!/usr/bin/env -S nu --stdin + +def "parse filter" [ +] { + $in | parse --regex '^(?[^=]+)=(?.*)' | first | + update params {|row| $row.params | parse --regex `(?[^=]+)=(?[^:]+):?` } +} + +def "filter to-string" [] { + each { |filter| $'($filter.name)=($filter.params | format '{param}={value}')' } | + str join ':' +} + +def "complex-filters to-string" [ + --pretty-print (-p) +]: table, filters: table>, output: string> -> string { + $in | update filters { + |$row| $row.filters | flatten | filter to-string + } | update input { |row| + $row.input | str join '][' + } | format '[{input}]{filters}[{output}]' | str join (";" + (if $pretty_print { "\n" } else { "" })) | str replace --all '[]' '' +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..a09cdfa --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1704538339, + "narHash": "sha256-1734d3mQuux9ySvwf6axRWZRBhtcZA9Q8eftD6EZg6U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "46ae0210ce163b3cba6c7da08840c1d63de9c701", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..69520f0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,23 @@ +{ + description = "A very basic flake"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + pkgs = nixpkgs.legacyPackages.x86_64-linux; + in + { + devShells.x86_64-linux.default = pkgs.mkShell { + packages = with pkgs; [ + ffmpeg + + sbcl + + nushellFull + ]; + }; + }; +}