import { program } from 'commander' import ffmpeg from 'fluent-ffmpeg' import { exit } from 'process' import { buildx264VODCommand, runCommand, TranscodeOptions } from '@server/helpers/ffmpeg-utils' import { VideoTranscodingProfilesManager } from '@server/lib/transcoding/video-transcoding-profiles' program .arguments('') .requiredOption('-r, --resolution [resolution]', 'video resolution') .action((path, cmd) => { if (cmd.resolution !== undefined && Number.isNaN(+cmd.resolution)) { console.error('The resolution must be an integer (example: 1080).') process.exit(-1) } run(path, cmd) .then(() => process.exit(0)) .catch(err => { console.error(err) process.exit(-1) }) }) .parse(process.argv) async function run (path: string, cmd: any) { const options = { type: 'video' as 'video', inputPath: path, outputPath: '/dev/null', availableEncoders: VideoTranscodingProfilesManager.Instance.getAvailableEncoders(), profile: 'default', resolution: +cmd.resolution, isPortraitMode: false } as TranscodeOptions let command = ffmpeg(options.inputPath) .output(options.outputPath) command = await buildx264VODCommand(command, options) command.on('start', (cmdline) => { console.log(cmdline) exit() }) await runCommand({ command }) }