GizStack
View .mdOpen in ChatGPTOpen in Claude

gizai:video/decode

any audio or video file decoded with ffmpeg.

gizlang
import * as Decode from "gizai:video/decode";

Functions

ffmpegOut

gizlang
function ffmpegOut(sys: System, ffmpeg: string, args: Vec<string>, input: bytes = b""): bytes throws string

What the program ffmpeg (its name on PATH, or a path) writes to its standard output when it runs with args, its standard input input; its error output when it fails.

Effects: fail, read, write, io.

ffprobe

gizlang
function ffprobe(ffmpeg: string): string

The ffprobe beside the program ffmpeg: in its folder, else on PATH.

Effects: fail.

audio

gizlang
function audio(sys: System, ffmpeg: string, path: string, most: f64 = 0.0, rate: i64 = 0, channels: i64 = 0, bits: i64 = 32): Wave throws string

The samples of the audio in the file path (any audio or video file ffmpeg reads: MP3, AAC, M4A, FLAC, Ogg, MP4, WebM, ...) through the program ffmpeg: at most most seconds (when above 0), so a long file stays small; resampled by ffmpeg to rate and mixed to channels (0: the file's own); as bits-bit samples (32: floats; 16: PCM, as a reference decoder that reads 16-bit WAV gets them).

Effects: fail, read, write, io.

mono

gizlang
function mono(wave: Wave, rate: i64): Vec<f32>

The mean of the channels of wave, at rate (resampled as torchaudio does): a speech model's mono input.

Effects: fail.

probe

gizlang
function probe(sys: System, ffmpeg: string, path: string): Result<Vec<i64>, string>

The width, height, (whole) frame rate and frames (by its duration; 0: not known) of the first video stream of the file path, by ffprobe next to ffmpeg.

Effects: fail, read, write, io.

frameIndices

gizlang
function frameIndices(rate: i64, target: i64, count: i64): Vec<i64>

The source frames that WanGP picks for count frames at target fps from a video of rate fps (its _resample_frame_indices from frame 0, which H3 and Qwen's video readers share).

Effects: fail.

frames

gizlang
function frames(sys: System, ffmpeg: string, path: string, wanted: Vec<i64>, width: i64, height: i64, mask: bool): Result<Vec<bytes>, string>

The frames wanted (ascending indices, as frameIndices gives them) of the video path, as width x height RGB bytes each (a mask: one byte each, 1 where the gray is over 127.5), resized by Lanczos as WanGP's preprocess_video_with_mask does; those past its end are left out.

Effects: fail, read, write, io.

filtered

gizlang
function filtered(sys: System, ffmpeg: string, path: string, n: i64, filter: string, format: string, size: i64): Vec<bytes> throws string

At most the first n frames of the video path through ffmpeg's filter, as format (rgb24, gray) frames of size bytes.

Effects: fail, read, write, io.