@mediaproc/video 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,231 +1,243 @@
1
1
  import chalk from 'chalk';
2
- import { mkdir, stat } from 'fs/promises';
3
- import { join, resolve } from 'path';
4
- import { runFFmpeg, getVideoMetadata, checkFFmpeg, formatFileSize, formatDuration, parseTimeToSeconds, } from '../utils/ffmpeg.js';
5
- import { showPluginBranding } from '../utils/branding.js';
6
- import { validatePaths, resolveOutputPaths } from '../utils/pathValidator.js';
7
- import { styleFFmpegOutput, shouldDisplayLine } from '../utils/ffmpeg-output.js';
2
+ import { runFFmpeg, checkFFmpeg } from '../utils/ffmpeg.js';
3
+ import { parseInputPaths, resolveOutputPaths, showPluginBranding, createStandardHelp } from '@mediaproc/core';
4
+ import ora from 'ora';
5
+ import { logFFmpegOutput } from '../utils/ffmpegLogger.js';
8
6
  export function extractCommand(videoCmd) {
9
- // Extract audio
10
- videoCmd
11
- .command('extract-audio <input>')
12
- .description('Extract audio from video')
13
- .option('-o, --output <path>', 'Output audio file')
14
- .option('--format <format>', 'Audio format: mp3, aac, wav, opus', 'mp3')
15
- .option('--bitrate <bitrate>', 'Audio bitrate (e.g., 192k)', '192k')
16
- .option('--dry-run', 'Show what would be done')
17
- .option('-v, --verbose', 'Verbose output')
18
- .option('--help', 'Display help for command')
7
+ const extract = videoCmd.command('extract').description('Extract audio, frames, or thumbnails from video');
8
+ // Extract audio subcommand
9
+ extract
10
+ .command('audio <input>')
11
+ .description('Extract audio from video file')
12
+ .option('-o, --output <path>', 'Output audio file or directory path')
13
+ .option('-f, --format <format>', 'Audio format (mp3, wav, etc.)', 'mp3')
14
+ .option('-b, --bitrate <bitrate>', 'Audio bitrate (e.g., 192k)', '192k')
15
+ .option('--stream <index>', 'Select audio stream index (default: 0)', '0')
16
+ .option('--start <time>', 'Start time (HH:MM:SS or seconds)')
17
+ .option('--duration <time>', 'Duration from start (HH:MM:SS or seconds)')
18
+ .option('--volume <db>', 'Adjust output volume in dB (e.g., -3 for -3dB)')
19
+ .option('--metadata <key=value>', 'Set custom metadata (repeatable)', (val, acc = []) => { acc.push(val); return acc; }, [])
20
+ .option('--force', 'Overwrite output files without prompt')
21
+ .option('--help', 'Display help for extract audio command')
19
22
  .action(async (input, options) => {
20
- try {
21
- console.log(chalk.blue.bold('šŸŽ¬ Audio Extraction\n'));
22
- const ffmpegAvailable = await checkFFmpeg();
23
- if (!ffmpegAvailable) {
24
- throw new Error('ffmpeg is not installed or not in PATH');
25
- }
26
- const validation = validatePaths(input, options.output);
27
- if (validation.errors.length > 0) {
28
- throw new Error(validation.errors.join('\n'));
29
- }
30
- const inputPath = validation.inputFiles[0];
31
- console.log(chalk.dim('šŸ“Š Analyzing video...'));
32
- const metadata = await getVideoMetadata(inputPath);
33
- console.log(chalk.gray(` Duration: ${formatDuration(metadata.duration)}`));
34
- console.log();
35
- const format = options.format || 'mp3';
36
- const outputMap = resolveOutputPaths(validation.inputFiles, validation.outputPath, { newExtension: `.${format}` });
37
- const output = outputMap.get(inputPath);
38
- const codecMap = {
39
- mp3: 'libmp3lame',
40
- aac: 'aac',
41
- wav: 'pcm_s16le',
42
- opus: 'libopus',
43
- };
44
- const audioCodec = codecMap[format] || 'libmp3lame';
45
- const args = ['-i', inputPath, '-vn', '-c:a', audioCodec];
46
- if (format !== 'wav') {
47
- args.push('-b:a', options.bitrate || '192k');
48
- }
49
- args.push('-y', output);
50
- if (options.dryRun) {
51
- console.log(chalk.yellow('šŸƒ Dry run mode - no files will be created\n'));
52
- console.log(chalk.dim('Command:'));
53
- console.log(chalk.gray(` ffmpeg ${args.join(' ')}\n`));
54
- console.log(chalk.green('āœ“ Dry run complete'));
55
- return;
56
- }
57
- console.log(chalk.dim('šŸŽµ Extracting audio...'));
58
- if (options.verbose) {
59
- console.log(chalk.dim(`ffmpeg ${args.join(' ')}\n`));
60
- }
61
- await runFFmpeg(args, options.verbose, (line) => {
62
- if (shouldDisplayLine(line, options.verbose || false)) {
63
- console.log(styleFFmpegOutput(line));
64
- }
23
+ if (options.help || !input) {
24
+ createStandardHelp({
25
+ commandName: 'extract audio',
26
+ emoji: 'šŸŽµ',
27
+ description: 'Extract audio from video files with advanced options.',
28
+ usage: ['extract audio <input> [options]'],
29
+ options: [
30
+ { flag: '-o, --output <path>', description: 'Output file/directory path' },
31
+ { flag: '-f, --format <format>', description: 'Audio format (mp3, wav, etc.)' },
32
+ { flag: '-b, --bitrate <bitrate>', description: 'Audio bitrate (e.g., 192k)' },
33
+ { flag: '--stream <index>', description: 'Select audio stream index' },
34
+ { flag: '--start <time>', description: 'Start time (HH:MM:SS or seconds)' },
35
+ { flag: '--duration <time>', description: 'Duration from start (HH:MM:SS or seconds)' },
36
+ { flag: '--volume <db>', description: 'Adjust output volume in dB' },
37
+ { flag: '--metadata <key=value>', description: 'Set custom metadata (repeatable)' },
38
+ { flag: '--force', description: 'Overwrite output files without prompt' },
39
+ { flag: '--help', description: 'Display help for extract audio command' }
40
+ ],
41
+ examples: [
42
+ { command: 'extract audio video.mp4', description: 'Extract audio from video.mp4 as mp3' },
43
+ { command: 'extract audio video.mp4 -o out.wav -f wav', description: 'Extract as WAV format' },
44
+ { command: 'extract audio video.mp4 --bitrate 256k', description: 'Set audio bitrate to 256k' },
45
+ { command: 'extract audio video.mp4 --stream 1', description: 'Extract second audio stream' }
46
+ ]
65
47
  });
66
- const outputStat = await stat(output);
67
- console.log();
68
- console.log(chalk.green.bold('āœ“ Extraction Complete!\n'));
69
- console.log(chalk.gray(` Format: ${format}`));
70
- console.log(chalk.gray(` Size: ${formatFileSize(outputStat.size)}`));
71
- console.log(chalk.dim(`\n ${output}`));
48
+ return;
72
49
  }
73
- catch (error) {
74
- console.error(chalk.red(`\nāœ— Error: ${error.message}`));
75
- process.exit(1);
50
+ const inputPaths = await parseInputPaths(input, ['.mp4', '.mkv', '.avi', '.mov', '.webm', '.flv', '.wmv', '.m4v', '.mpg', '.mpeg', '.3gp']);
51
+ const outputPathsMap = resolveOutputPaths(inputPaths, options.output, { suffix: '-audio', newExtension: options.format });
52
+ const outputPaths = Array.from(outputPathsMap.values());
53
+ for (let i = 0; i < inputPaths.length; i++) {
54
+ const inputFile = inputPaths[i];
55
+ const outputFile = outputPaths[i];
56
+ const spinner = ora(chalk.cyan(`Extracting audio from ${inputFile}`)).start();
57
+ try {
58
+ if (!(await checkFFmpeg()))
59
+ throw new Error(chalk.red('FFmpeg not found.'));
60
+ const args = ['-i', inputFile];
61
+ if (options.force)
62
+ args.push('-y');
63
+ args.push('-vn');
64
+ if (options.stream)
65
+ args.push('-map', `0:a:${options.stream}`);
66
+ if (options.start)
67
+ args.push('-ss', options.start);
68
+ if (options.duration)
69
+ args.push('-t', options.duration);
70
+ args.push('-acodec', options.format);
71
+ args.push('-b:a', options.bitrate);
72
+ // Audio filters
73
+ const filters = [];
74
+ if (options.volume)
75
+ filters.push(`volume=${options.volume}dB`);
76
+ if (filters.length > 0)
77
+ args.push('-af', filters.join(','));
78
+ // Metadata
79
+ if (options.metadata && Array.isArray(options.metadata)) {
80
+ for (const entry of options.metadata) {
81
+ const [key, value] = entry.split('=');
82
+ if (key && value)
83
+ args.push('-metadata', `${key}=${value}`);
84
+ }
85
+ }
86
+ args.push(outputFile);
87
+ await runFFmpeg(args, options.verbose, logFFmpegOutput);
88
+ spinner.succeed(chalk.green.bold(`āœ“ Audio extracted to ${outputFile}`));
89
+ }
90
+ catch (err) {
91
+ spinner.fail(chalk.red.bold(`āœ— ${err.message}`));
92
+ }
76
93
  }
94
+ showPluginBranding('Video', '../../package.json');
77
95
  });
78
- // Extract frames
79
- videoCmd
80
- .command('extract-frames <input>')
81
- .description('Extract frames from video as images')
82
- .option('-o, --output <dir>', 'Output directory', './frames')
83
- .option('--start <time>', 'Start time (HH:MM:SS or seconds)')
84
- .option('--end <time>', 'End time (HH:MM:SS or seconds)')
85
- .option('--fps <fps>', 'Extract N frames per second', parseFloat, 1)
86
- .option('--format <format>', 'Image format: jpg, png', 'jpg')
87
- .option('--quality <quality>', 'JPEG quality (1-31, lower is better)', parseInt, 2)
88
- .option('--dry-run', 'Show what would be done')
89
- .option('-v, --verbose', 'Verbose output')
90
- .option('--help', 'Display help for command')
96
+ // Extract frame subcommand
97
+ extract
98
+ .command('frame <input>')
99
+ .description('Extract a single frame from video file')
100
+ .option('-o, --output <path>', 'Output image file or directory path')
101
+ .option('-t, --time <timestamp>', 'Timestamp to extract frame (e.g., 00:00:10)', '00:00:01')
102
+ .option('-f, --format <format>', 'Image format (jpg, png, etc.)', 'jpg')
103
+ .option('--frames <range>', 'Extract multiple frames: <start>:<end>:<step> (e.g., 0:100:10)')
104
+ .option('--vf <filter>', 'Apply custom video filter (repeatable)', (val, acc = []) => { acc.push(val); return acc; }, [])
105
+ .option('--force', 'Overwrite output files without prompt')
106
+ .option('--help', 'Display help for extract frame command')
91
107
  .action(async (input, options) => {
92
- try {
93
- console.log(chalk.blue.bold('šŸŽ¬ Frame Extraction\n'));
94
- const ffmpegAvailable = await checkFFmpeg();
95
- if (!ffmpegAvailable) {
96
- throw new Error('ffmpeg is not installed or not in PATH');
97
- }
98
- const validation = validatePaths(input, options.output);
99
- if (validation.errors.length > 0) {
100
- throw new Error(validation.errors.join('\n'));
101
- }
102
- const inputPath = validation.inputFiles[0];
103
- console.log(chalk.dim('šŸ“Š Analyzing video...'));
104
- const metadata = await getVideoMetadata(inputPath);
105
- console.log(chalk.gray(` Duration: ${formatDuration(metadata.duration)}`));
106
- console.log(chalk.gray(` Resolution: ${metadata.width}x${metadata.height}`));
107
- console.log(chalk.gray(` FPS: ${metadata.fps.toFixed(2)}`));
108
- console.log();
109
- const outputDir = resolve(validation.outputPath || './frames');
110
- await mkdir(outputDir, { recursive: true });
111
- const format = options.format || 'jpg';
112
- const outputPattern = join(outputDir, `frame_%04d.${format}`);
113
- const args = ['-i', inputPath];
114
- // Add start time if specified
115
- if (options.start) {
116
- args.push('-ss', parseTimeToSeconds(options.start).toString());
117
- }
118
- // Add end time if specified
119
- if (options.end) {
120
- args.push('-to', parseTimeToSeconds(options.end).toString());
121
- }
122
- // Set frame rate
123
- args.push('-vf', `fps=${options.fps || 1}`);
124
- // Image quality for JPEG
125
- if (format === 'jpg') {
126
- args.push('-q:v', (options.quality || 2).toString());
127
- }
128
- args.push('-y', outputPattern);
129
- // Estimate number of frames
130
- const duration = options.end ? parseTimeToSeconds(options.end) - (options.start ? parseTimeToSeconds(options.start) : 0) : metadata.duration - (options.start ? parseTimeToSeconds(options.start) : 0);
131
- const estimatedFrames = Math.ceil(duration * (options.fps || 1));
132
- console.log(chalk.dim('Extraction settings:'));
133
- console.log(chalk.gray(` FPS: ${options.fps || 1}`));
134
- console.log(chalk.gray(` Format: ${format}`));
135
- console.log(chalk.gray(` Estimated frames: ~${estimatedFrames}`));
136
- console.log(chalk.gray(` Output: ${outputDir}`));
137
- console.log();
138
- if (options.dryRun) {
139
- console.log(chalk.yellow('šŸƒ Dry run mode - no files will be created\n'));
140
- console.log(chalk.dim('Command:'));
141
- console.log(chalk.gray(` ffmpeg ${args.join(' ')}\n`));
142
- console.log(chalk.green('āœ“ Dry run complete'));
143
- return;
144
- }
145
- console.log(chalk.dim('šŸ“ø Extracting frames...'));
146
- if (options.verbose) {
147
- console.log(chalk.dim(`ffmpeg ${args.join(' ')}\n`));
148
- }
149
- await runFFmpeg(args, options.verbose, (line) => {
150
- if (shouldDisplayLine(line, options.verbose || false)) {
151
- console.log(styleFFmpegOutput(line));
152
- }
108
+ if (options.help || !input) {
109
+ createStandardHelp({
110
+ commandName: 'extract frame',
111
+ emoji: 'šŸ–¼ļø',
112
+ description: 'Extract frames from video files with advanced options.',
113
+ usage: ['extract frame <input> [options]'],
114
+ options: [
115
+ { flag: '-o, --output <path>', description: 'Output file/directory path' },
116
+ { flag: '-t, --time <timestamp>', description: 'Timestamp to extract frame' },
117
+ { flag: '-f, --format <format>', description: 'Image format (jpg, png, etc.)' },
118
+ { flag: '--frames <range>', description: 'Extract multiple frames: <start>:<end>:<step>' },
119
+ { flag: '--vf <filter>', description: 'Apply custom video filter (repeatable)' },
120
+ { flag: '--force', description: 'Overwrite output files without prompt' },
121
+ { flag: '--help', description: 'Display help for extract frame command' }
122
+ ],
123
+ examples: [
124
+ { command: 'extract frame video.mp4', description: 'Extract default frame at 00:00:01' },
125
+ { command: 'extract frame video.mp4 -t 00:00:10', description: 'Extract frame at 10 seconds' },
126
+ { command: 'extract frame video.mp4 --frames 0:100:10', description: 'Extract every 10th frame from 0 to 100' },
127
+ { command: 'extract frame video.mp4 --vf "crop=320:240"', description: 'Apply crop filter to frame' }
128
+ ]
153
129
  });
154
- console.log();
155
- console.log(chalk.green.bold('āœ“ Extraction Complete!\n'));
156
- console.log(chalk.gray(` Frames saved to: ${outputDir}`));
157
- console.log(chalk.gray(` Pattern: frame_####.${format}`));
130
+ return;
158
131
  }
159
- catch (error) {
160
- console.error(chalk.red(`\nāœ— Error: ${error.message}`));
161
- process.exit(1);
132
+ const inputPaths = await parseInputPaths(input, ['.mp4', '.mkv', '.avi', '.mov', '.webm', '.flv', '.wmv', '.m4v', '.mpg', '.mpeg', '.3gp']);
133
+ const outputPathsMap = resolveOutputPaths(inputPaths, options.output, { suffix: '-frame', newExtension: options.format });
134
+ const outputPaths = Array.from(outputPathsMap.values());
135
+ for (let i = 0; i < inputPaths.length; i++) {
136
+ const inputFile = inputPaths[i];
137
+ const outputFile = outputPaths[i];
138
+ const spinner = ora(chalk.cyan(`Extracting frame(s) from ${inputFile}`)).start();
139
+ try {
140
+ if (!(await checkFFmpeg()))
141
+ throw new Error(chalk.red('FFmpeg not found.'));
142
+ const args = ['-i', inputFile];
143
+ if (options.force)
144
+ args.push('-y');
145
+ if (options.time)
146
+ args.push('-ss', options.time);
147
+ if (options.frames) {
148
+ const [start, end, step] = options.frames.split(':').map(Number);
149
+ args.push('-vf', `select='not(mod(n\,${step}))',setpts=N/FRAME_RATE/TB`);
150
+ args.push('-frames:v', ((end - start) / step + 1).toString());
151
+ }
152
+ else {
153
+ args.push('-frames:v', '1');
154
+ }
155
+ if (options.vf && Array.isArray(options.vf) && options.vf.length > 0) {
156
+ for (const filter of options.vf) {
157
+ args.push('-vf', filter);
158
+ }
159
+ }
160
+ args.push('-q:v', '2');
161
+ args.push(outputFile);
162
+ await runFFmpeg(args, options.verbose, logFFmpegOutput);
163
+ spinner.succeed(chalk.green.bold(`āœ“ Frame(s) extracted to ${outputFile}`));
164
+ }
165
+ catch (err) {
166
+ spinner.fail(chalk.red.bold(`āœ— ${err.message}`));
167
+ }
162
168
  }
169
+ showPluginBranding('Video', '../../package.json');
163
170
  });
164
- // Extract thumbnail
165
- videoCmd
166
- .command('extract-thumbnail <input>')
167
- .description('Extract a single thumbnail from video')
168
- .option('-o, --output <path>', 'Output image file')
169
- .option('--time <time>', 'Time to extract (HH:MM:SS or seconds)', '00:00:01')
170
- .option('--format <format>', 'Image format: jpg, png', 'jpg')
171
- .option('--width <width>', 'Thumbnail width in pixels', parseInt)
172
- .option('--dry-run', 'Show what would be done')
173
- .option('-v, --verbose', 'Verbose output')
174
- .option('--help', 'Display help for command')
171
+ // Extract thumbnail subcommand
172
+ extract
173
+ .command('thumbnail <input>')
174
+ .description('Extract a thumbnail image from video file')
175
+ .option('-o, --output <path>', 'Output thumbnail file or directory path')
176
+ .option('-t, --time <timestamp>', 'Timestamp for thumbnail (e.g., 00:00:05)', '00:00:01')
177
+ .option('-f, --format <format>', 'Thumbnail format (jpg, png, etc.)', 'jpg')
178
+ .option('--size <size>', 'Thumbnail size (e.g., 320x180)', '320x180')
179
+ .option('--quality <q>', 'JPEG/PNG quality (1-31)', '2')
180
+ .option('--vf <filter>', 'Apply custom video filter (repeatable)', (val, acc = []) => { acc.push(val); return acc; }, [])
181
+ .option('--force', 'Overwrite output files without prompt')
182
+ .option('--help', 'Display help for extract thumbnail command')
175
183
  .action(async (input, options) => {
176
- try {
177
- console.log(chalk.blue.bold('šŸŽ¬ Thumbnail Extraction\n'));
178
- const ffmpegAvailable = await checkFFmpeg();
179
- if (!ffmpegAvailable) {
180
- throw new Error('ffmpeg is not installed or not in PATH');
181
- }
182
- const validation = validatePaths(input, options.output);
183
- if (validation.errors.length > 0) {
184
- throw new Error(validation.errors.join('\n'));
185
- }
186
- const inputPath = validation.inputFiles[0];
187
- console.log(chalk.dim('šŸ“Š Analyzing video...'));
188
- const metadata = await getVideoMetadata(inputPath);
189
- console.log(chalk.gray(` Resolution: ${metadata.width}x${metadata.height}`));
190
- console.log();
191
- const format = options.format || 'jpg';
192
- const output = options.output || inputPath.replace(/\.[^.]+$/, `_thumb.${format}`);
193
- const timeSeconds = parseTimeToSeconds(options.time || '1');
194
- const args = ['-i', inputPath, '-ss', timeSeconds.toString(), '-vframes', '1'];
195
- // Resize if width specified
196
- if (options.width) {
197
- args.push('-vf', `scale=${options.width}:-1`);
198
- }
199
- args.push('-y', output);
200
- if (options.dryRun) {
201
- console.log(chalk.yellow('šŸƒ Dry run mode - no files will be created\n'));
202
- console.log(chalk.dim('Command:'));
203
- console.log(chalk.gray(` ffmpeg ${args.join(' ')}\n`));
204
- console.log(chalk.green('āœ“ Dry run complete'));
205
- showPluginBranding('Video');
206
- return;
207
- }
208
- console.log(chalk.dim('šŸ“ø Extracting thumbnail...'));
209
- if (options.verbose) {
210
- console.log(chalk.dim(`ffmpeg ${args.join(' ')}\n`));
211
- }
212
- await runFFmpeg(args, options.verbose, (line) => {
213
- if (shouldDisplayLine(line, options.verbose || false)) {
214
- console.log(styleFFmpegOutput(line));
215
- }
184
+ if (options.help || !input) {
185
+ createStandardHelp({
186
+ commandName: 'extract thumbnail',
187
+ emoji: 'šŸ–¼ļø',
188
+ description: 'Extract thumbnails from video files with advanced options.',
189
+ usage: ['extract thumbnail <input> [options]'],
190
+ options: [
191
+ { flag: '-o, --output <path>', description: 'Output file/directory path' },
192
+ { flag: '-t, --time <timestamp>', description: 'Timestamp for thumbnail' },
193
+ { flag: '-f, --format <format>', description: 'Thumbnail format (jpg, png, etc.)' },
194
+ { flag: '--size <size>', description: 'Thumbnail size (e.g., 320x180)' },
195
+ { flag: '--quality <q>', description: 'JPEG/PNG quality (1-31)' },
196
+ { flag: '--vf <filter>', description: 'Apply custom video filter (repeatable)' },
197
+ { flag: '--force', description: 'Overwrite output files without prompt' },
198
+ { flag: '--help', description: 'Display help for extract thumbnail command' }
199
+ ],
200
+ examples: [
201
+ { command: 'extract thumbnail video.mp4', description: 'Extract default thumbnail at 00:00:01' },
202
+ { command: 'extract thumbnail video.mp4 -t 00:00:05', description: 'Extract thumbnail at 5 seconds' },
203
+ { command: 'extract thumbnail video.mp4 --size 640x360', description: 'Set thumbnail size to 640x360' },
204
+ { command: 'extract thumbnail video.mp4 --quality 5', description: 'Set JPEG/PNG quality to 5' }
205
+ ]
216
206
  });
217
- const outputStat = await stat(output);
218
- console.log();
219
- console.log(chalk.green.bold('āœ“ Extraction Complete!\n'));
220
- console.log(chalk.gray(` Time: ${formatDuration(timeSeconds)}`));
221
- console.log(chalk.gray(` Size: ${formatFileSize(outputStat.size)}`));
222
- console.log(chalk.dim(`\n ${output}`));
223
- showPluginBranding('Video');
207
+ return;
224
208
  }
225
- catch (error) {
226
- console.error(chalk.red(`\nāœ— Error: ${error.message}`));
227
- process.exit(1);
209
+ const inputPaths = await parseInputPaths(input, ['.mp4', '.mkv', '.avi', '.mov', '.webm', '.flv', '.wmv', '.m4v', '.mpg', '.mpeg', '.3gp']);
210
+ const outputPathsMap = resolveOutputPaths(inputPaths, options.output, { suffix: '-thumbnail', newExtension: options.format });
211
+ const outputPaths = Array.from(outputPathsMap.values());
212
+ for (let i = 0; i < inputPaths.length; i++) {
213
+ const inputFile = inputPaths[i];
214
+ const outputFile = outputPaths[i];
215
+ const spinner = ora(chalk.cyan(`Extracting thumbnail from ${inputFile}`)).start();
216
+ try {
217
+ if (!(await checkFFmpeg()))
218
+ throw new Error(chalk.red('FFmpeg not found.'));
219
+ const [width, height] = options.size.split('x');
220
+ const args = ['-i', inputFile];
221
+ if (options.force)
222
+ args.push('-y');
223
+ if (options.time)
224
+ args.push('-ss', options.time);
225
+ args.push('-vframes', '1');
226
+ let vf = `scale=${width}:${height}`;
227
+ if (options.vf && Array.isArray(options.vf) && options.vf.length > 0) {
228
+ vf += ',' + options.vf.join(',');
229
+ }
230
+ args.push('-vf', vf);
231
+ args.push('-q:v', options.quality);
232
+ args.push(outputFile);
233
+ await runFFmpeg(args, options.verbose, logFFmpegOutput);
234
+ spinner.succeed(chalk.green.bold(`āœ“ Thumbnail extracted to ${outputFile}`));
235
+ }
236
+ catch (err) {
237
+ spinner.fail(chalk.red.bold(`āœ— ${err.message}`));
238
+ }
228
239
  }
240
+ showPluginBranding('Video', '../../package.json');
229
241
  });
230
242
  }
231
243
  //# sourceMappingURL=extract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAiOpD"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAuOpD"}
@@ -4,10 +4,8 @@ import { writeFile, unlink, stat } from 'fs/promises';
4
4
  import { tmpdir } from 'os';
5
5
  import { join } from 'path';
6
6
  import { runFFmpeg, getVideoMetadata, checkFFmpeg, formatFileSize, formatDuration, } from '../utils/ffmpeg.js';
7
- import { showPluginBranding } from '../utils/branding.js';
8
- import { fileExists, validatePaths, resolveOutputPaths } from '../utils/pathValidator.js';
7
+ import { fileExists, validatePaths, resolveOutputPaths, createStandardHelp, showPluginBranding } from '@mediaproc/core';
9
8
  import { logFFmpegOutput } from '../utils/ffmpegLogger.js';
10
- import { createStandardHelp } from '../utils/helpFormatter.js';
11
9
  export function mergeCommand(videoCmd) {
12
10
  videoCmd
13
11
  .command('merge <inputs...>')
@@ -24,6 +22,7 @@ export function mergeCommand(videoCmd) {
24
22
  .option('--normalize-audio', 'Normalize audio levels across videos')
25
23
  .option('--format <format>', 'Output format: mp4, mkv, avi, webm (default: mp4)', 'mp4')
26
24
  .option('--dry-run', 'Preview command without executing')
25
+ .option('--explain', 'Explain the proper flow of this command in detail (Coming Soon...)')
27
26
  .option('-v, --verbose', 'Show detailed FFmpeg output')
28
27
  .option('-h, --help', 'Display help for merge command')
29
28
  .action(async (inputs, options) => {
@@ -50,6 +49,7 @@ export function mergeCommand(videoCmd) {
50
49
  { flag: '--normalize-audio', description: 'Normalize audio levels across videos' },
51
50
  { flag: '--format <format>', description: 'Output format: mp4, mkv, avi, webm (default: mp4)' },
52
51
  { flag: '--dry-run', description: 'Preview FFmpeg command without executing' },
52
+ { flag: '--explain', description: 'Explain what is happening behind the scene in proper flow and in detail (Coming Soon...)' },
53
53
  { flag: '-v, --verbose', description: 'Show detailed FFmpeg output' }
54
54
  ],
55
55
  examples: [
@@ -176,9 +176,13 @@ export function mergeCommand(videoCmd) {
176
176
  console.log(chalk.dim('\nCommand:'));
177
177
  console.log(chalk.gray(` ffmpeg ${args.join(' ')}\n`));
178
178
  console.log(chalk.green('āœ“ Dry run complete'));
179
- showPluginBranding('Video');
179
+ showPluginBranding('Video', '../../package.json');
180
180
  return;
181
181
  }
182
+ if (options.explain) {
183
+ console.log(chalk.gray('Explain mode is not yet available.'));
184
+ console.log(chalk.cyan('Planned for v0.8.x.'));
185
+ }
182
186
  // Run merge
183
187
  console.log(chalk.dim(`šŸ”— Merging videos (${needsReEncode ? 're-encoding' : 'fast mode'})...`));
184
188
  if (options.verbose) {
@@ -197,7 +201,7 @@ export function mergeCommand(videoCmd) {
197
201
  console.log(chalk.gray(` Total duration: ${formatDuration(totalDuration)}`));
198
202
  console.log(chalk.gray(` Output size: ${formatFileSize(outputStat.size)}`));
199
203
  console.log(chalk.dim(`\n ${output}`));
200
- showPluginBranding('Video');
204
+ showPluginBranding('Video', '../../package.json');
201
205
  }
202
206
  catch (error) {
203
207
  console.error(chalk.red(`\nāœ— Error: ${error.message}`));