@codenoobforreal/clitools
Version:
CLI tool for video processing (H.265/HEVC encoding & QuickTime compatibility) using FFmpeg, and batch lossless image compression with format preservation
40 lines • 1.64 kB
JavaScript
import { spinner } from "@clack/prompts";
import { getVideoInfoListFromUserInput } from "../../core/video/pipeline.js";
import { FFmpegProcessError } from "../../error.js";
import { runFFmpegCommand } from "../../libs/ffmpeg-executor.js";
import { getFileNameFromPath } from "../../utils/path.js";
import { createProgressHandler } from "../cli/progress-handler.js";
import { buildFFmpegEncodeVideoArgs } from "./args.js";
export async function encodeVideoTask({ input }) {
const videoInfoList = await getVideoInfoListFromUserInput(input);
for (let index = 0; index < videoInfoList.length; index++) {
const videoInfo = videoInfoList[index];
if (videoInfo !== undefined) {
await encodeVideo(videoInfo, index, videoInfoList.length);
}
}
}
async function encodeVideo(videoInfo, index, length) {
const s = spinner();
const filename = getFileNameFromPath(videoInfo.input);
s.start(`Preparing FFmpeg staff`);
try {
await runFFmpegCommand(buildFFmpegEncodeVideoArgs(videoInfo), createProgressHandler(videoInfo.metadata.duration, {
message: (msg) => {
s.message(`Encoding ${filename}: ${msg}`);
},
}));
s.stop(`Finish encoding ${index + 1}/${length}:\n${videoInfo.input}`);
}
catch (error) {
let errMessage = `Failed to encode: ${videoInfo.input}\nerror: `;
if (error instanceof FFmpegProcessError) {
errMessage += error.cause.message;
}
else {
errMessage += "unknown error";
}
s.stop(errMessage);
}
}
//# sourceMappingURL=index.js.map