docs: Updated README.md.

This commit is contained in:
Spencer Brower
2024-01-09 11:00:48 -05:00
parent 555073c428
commit e854b53bcf
4 changed files with 38 additions and 16 deletions

View File

@@ -1,4 +1,26 @@
#
# nu-ffmpeg
Utility commands for working with ffmpeg in nushell.
## Capabilities
- Return tables from `ffprobe`
- `ffprobe` multiple files at once
- Use `streams`, `streams video`, and `streams audio` to filter `ffprobe` output
- get the `dimensions` of a video stream as a record
- Apply and parse complex filters to a video (Work In Progress)
## Setup
The `ffmpeg` and `ffprobe` commands are required to be installed and available
in your path; they are not installed for you.
Currently nushell versions 0.87.0 - 0.88.1 are supported.
After that, clone this repository and add the following code to your scripts,
or to your `config.nu` file:
```nu
use ./ffprobe
use <path-to-repository>/ffprobe
use <path-to-repository>/filters *
```

10
ffprobe
View File

@@ -4,14 +4,14 @@
# Multimedia stream analyzer.
export def main [
...input_files: path
] {
]: nothing -> table {
$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 [] {
export def streams []: table<streams: table, format: record> -> table {
let streams = ($in | get streams);
match ($streams | describe) {
@@ -21,16 +21,16 @@ export def streams [] {
}
# Retrieve all the video streams from a list of ffprobe outputs
export def "streams video" [] {
export def "streams video" []: table<streams: table, format: record> -> table {
$in | streams | where codec_type == "video"
}
# Retrieve all the audio streams from a list of ffprobe outputs
export def "streams audio" [] {
export def "streams audio" []: table<streams: table, format: record> -> table {
$in | streams | where codec_type == "audio"
}
# Get the dimensions of a video stream
export def "dimensions" [] {
export def "dimensions" []: table<streams: table, format: record> -> record<width: int, height: int> {
$in | select width height
}

View File

@@ -1,22 +1,22 @@
#!/usr/bin/env -S nu --stdin
def "parse filter" [
export def "parse filter" [
] {
$in | parse --regex '^(?<name>[^=]+)=(?<params>.*)' | first |
update params {|row| $row.params | parse --regex `(?<param>[^=]+)=(?<value>[^:]+):?` }
update params { parse --regex `(?<param>[^=]+)=(?<value>[^:]+):?` }
}
def "filter to-string" [] {
export def "filter to-string" [] {
each { |filter| $'($filter.name)=($filter.params | format '{param}={value}')' } |
str join ':'
str join ':'
}
def "complex-filters to-string" [
export def "complex-filters to-string" [
--pretty-print (-p)
]: table<input: list<string>, filters: table<name: string, params: table<param: string, value: string>>, output: string> -> string {
$in | update filters {
|$row| $row.filters | flatten | filter to-string
} | update input { |row|
$row.input | str join ']['
flatten | filter to-string
} | update input {
str join ']['
} | format '[{input}]{filters}[{output}]' | str join (";" + (if $pretty_print { "\n" } else { "" })) | str replace --all '[]' ''
}

View File

@@ -1,5 +1,5 @@
{
description = "A very basic flake";
description = "Utility commands for working with video files in nushell";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";