← Files Cecil-IA Labs FFmpegARCHIVED FILE
skills/ffmpeg-audio/scripts/run.mjs
4.61 KB · Sep 30, 2026 · 23:17 UTC
#!/usr/bin/env node
import {
contextPlan,
enumValue,
executeSkillScript,
inputPath,
objectInput,
optionalBoolean,
optionalNumber,
optionalString,
reportResult,
requiredEnum,
runtimeOptions,
} from "../../../dist/skill-scripts/shared.js";
import {
addSilenceToVideo,
attachAudio,
detectSilence,
generateSilence,
removeSilence,
transcodeTelephony,
} from "../../../dist/audio/index.js";
const actions = ["attach", "silence", "add-silence", "detect-silence", "remove-silence", "telephony"];
const modes = ["replace", "append"];
const videoModes = ["auto", "copy", "encode"];
const codecs = ["mulaw", "alaw", "gsm", "pcm"];
const containers = ["wav", "mulaw", "alaw", "gsm", "s16le"];
await executeSkillScript("audio.run", async ({ request, context, signal }) => {
const input = objectInput(request.input);
const action = enumValue(input, "action", actions) ?? "attach";
const planned = contextPlan(
input,
context,
"Run skills/ffmpeg-audio/scripts/run.mjs from Codex, Work, or a local terminal.",
);
if (planned !== undefined) return planned;
const options = runtimeOptions(input, request, context, signal);
let report;
if (action === "silence") {
report = await generateSilence({
...options,
...(optionalNumber(input, "duration") !== undefined ? { duration: optionalNumber(input, "duration") } : {}),
...(optionalNumber(input, "sampleRate") !== undefined ? { sampleRate: optionalNumber(input, "sampleRate") } : {}),
...(optionalNumber(input, "channels") !== undefined ? { channels: optionalNumber(input, "channels") } : {}),
...(optionalString(input, "channelLayout") !== undefined ? { channelLayout: optionalString(input, "channelLayout") } : {}),
});
} else if (action === "attach") {
const mode = enumValue(input, "mode", modes);
const videoMode = enumValue(input, "videoMode", videoModes);
const pad = optionalBoolean(input, "pad");
report = await attachAudio(inputPath(input, "input", request), inputPath(input, "audioInput", request), {
...options,
...(mode !== undefined ? { mode } : {}),
...(videoMode !== undefined ? { videoMode } : {}),
...(pad !== undefined ? { pad } : {}),
});
} else if (action === "add-silence") {
const videoMode = enumValue(input, "videoMode", videoModes);
const replaceExisting = optionalBoolean(input, "replaceExisting");
report = await addSilenceToVideo(inputPath(input, "input", request), {
...options,
...(optionalNumber(input, "sampleRate") !== undefined ? { sampleRate: optionalNumber(input, "sampleRate") } : {}),
...(optionalNumber(input, "channels") !== undefined ? { channels: optionalNumber(input, "channels") } : {}),
...(optionalString(input, "channelLayout") !== undefined ? { channelLayout: optionalString(input, "channelLayout") } : {}),
...(videoMode !== undefined ? { videoMode } : {}),
...(replaceExisting !== undefined ? { replaceExisting } : {}),
});
} else if (action === "detect-silence") {
report = await detectSilence(inputPath(input, "input", request), {
...options,
...(optionalNumber(input, "noiseDb") !== undefined ? { noiseDb: optionalNumber(input, "noiseDb") } : {}),
...(optionalNumber(input, "minDuration") !== undefined ? { minDuration: optionalNumber(input, "minDuration") } : {}),
});
} else if (action === "remove-silence") {
report = await removeSilence(inputPath(input, "input", request), {
...options,
...(optionalNumber(input, "noiseDb") !== undefined ? { noiseDb: optionalNumber(input, "noiseDb") } : {}),
...(optionalNumber(input, "minDuration") !== undefined ? { minDuration: optionalNumber(input, "minDuration") } : {}),
...(optionalNumber(input, "keepSilence") !== undefined ? { keepSilence: optionalNumber(input, "keepSilence") } : {}),
});
} else {
const container = enumValue(input, "container", containers);
report = await transcodeTelephony(inputPath(input, "input", request), {
...options,
codec: requiredEnum(input, "codec", codecs),
...(container !== undefined ? { container } : {}),
...(optionalNumber(input, "sampleRate") !== undefined ? { sampleRate: optionalNumber(input, "sampleRate") } : {}),
...(optionalNumber(input, "channels") !== undefined ? { channels: optionalNumber(input, "channels") } : {}),
...(optionalString(input, "sampleFormat") !== undefined ? { sampleFormat: optionalString(input, "sampleFormat") } : {}),
});
}
return reportResult(input, report, [
"Verify codec, sample rate, channel layout, stream presence, and duration from the returned report before declaring success.",
]);
});
SHA-256: d7a262fce30e674553814b2cd51b88cb7bce002ff14d85b8fec6ffdca94b285e