UNPKG

@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
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