@mediaproc/video 1.0.0 → 1.1.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.
- package/README.md +487 -89
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/compress.d.ts +3 -0
- package/dist/commands/compress.d.ts.map +1 -0
- package/dist/commands/compress.js +195 -0
- package/dist/commands/compress.js.map +1 -0
- package/dist/commands/extract.d.ts +3 -0
- package/dist/commands/extract.d.ts.map +1 -0
- package/dist/commands/extract.js +228 -0
- package/dist/commands/extract.js.map +1 -0
- package/dist/commands/merge.d.ts +3 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.js +214 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/resize.d.ts +3 -0
- package/dist/commands/resize.d.ts.map +1 -0
- package/dist/commands/resize.js +252 -0
- package/dist/commands/resize.js.map +1 -0
- package/dist/commands/transcode.d.ts +3 -0
- package/dist/commands/transcode.d.ts.map +1 -0
- package/dist/commands/transcode.js +108 -0
- package/dist/commands/transcode.js.map +1 -0
- package/dist/commands/trim.d.ts +3 -0
- package/dist/commands/trim.d.ts.map +1 -0
- package/dist/commands/trim.js +198 -0
- package/dist/commands/trim.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/register.d.ts +5 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +18 -0
- package/dist/register.js.map +1 -0
- package/dist/types.d.ts +56 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/ffmpeg-output.d.ts +9 -0
- package/dist/utils/ffmpeg-output.d.ts.map +1 -0
- package/dist/utils/ffmpeg-output.js +94 -0
- package/dist/utils/ffmpeg-output.js.map +1 -0
- package/dist/utils/ffmpeg.d.ts +46 -0
- package/dist/utils/ffmpeg.d.ts.map +1 -0
- package/dist/utils/ffmpeg.js +167 -0
- package/dist/utils/ffmpeg.js.map +1 -0
- package/dist/utils/ffmpegLogger.d.ts +16 -0
- package/dist/utils/ffmpegLogger.d.ts.map +1 -0
- package/dist/utils/ffmpegLogger.js +66 -0
- package/dist/utils/ffmpegLogger.js.map +1 -0
- package/dist/utils/helpFormatter.d.ts +51 -0
- package/dist/utils/helpFormatter.d.ts.map +1 -0
- package/dist/utils/helpFormatter.js +134 -0
- package/dist/utils/helpFormatter.js.map +1 -0
- package/dist/utils/pathValidator.d.ts +60 -0
- package/dist/utils/pathValidator.d.ts.map +1 -0
- package/dist/utils/pathValidator.js +207 -0
- package/dist/utils/pathValidator.js.map +1 -0
- package/package.json +12 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcode.js","sourceRoot":"","sources":["../../src/commands/transcode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trim.d.ts","sourceRoot":"","sources":["../../src/commands/trim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAmNnD"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { runFFmpeg, getVideoMetadata, checkFFmpeg, formatDuration, parseTimeToSeconds, } from '../utils/ffmpeg.js';
|
|
4
|
+
import { parseInputPaths, resolveOutputPaths } from '../utils/pathValidator.js';
|
|
5
|
+
import { logFFmpegOutput } from '../utils/ffmpegLogger.js';
|
|
6
|
+
import { createStandardHelp } from '../utils/helpFormatter.js';
|
|
7
|
+
export function trimCommand(videoCmd) {
|
|
8
|
+
videoCmd
|
|
9
|
+
.command('trim [input]')
|
|
10
|
+
.description('Trim videos to specified time range with precision')
|
|
11
|
+
.option('-o, --output <path>', 'Output file or directory path')
|
|
12
|
+
.option('-s, --start <time>', 'Start time (HH:MM:SS or seconds) (default: 00:00:00)', '00:00:00')
|
|
13
|
+
.option('-e, --end <time>', 'End time (HH:MM:SS or seconds)')
|
|
14
|
+
.option('-d, --duration <duration>', 'Duration from start (HH:MM:SS or seconds)')
|
|
15
|
+
.option('--fast', 'Fast mode - stream copy (less accurate but faster)')
|
|
16
|
+
.option('--accurate', 'Accurate mode - re-encode for frame accuracy')
|
|
17
|
+
.option('-c, --codec <codec>', 'Video codec: h264, h265 (default: copy)', 'copy')
|
|
18
|
+
.option('--format <format>', 'Output format: mp4, mkv, webm')
|
|
19
|
+
.option('--fade-in <duration>', 'Add fade-in effect (seconds)', parseFloat)
|
|
20
|
+
.option('--fade-out <duration>', 'Add fade-out effect (seconds)', parseFloat)
|
|
21
|
+
.option('--speed <factor>', 'Adjust playback speed (0.5-2.0)', parseFloat)
|
|
22
|
+
.option('--volume <factor>', 'Adjust audio volume (0.0-2.0, default: 1.0)', parseFloat)
|
|
23
|
+
.option('--quality <crf>', 'CRF quality if re-encoding (default: 23)', parseInt, 23)
|
|
24
|
+
.option('--no-audio', 'Remove audio track from output')
|
|
25
|
+
.option('--dry-run', 'Preview command without executing')
|
|
26
|
+
.option('-v, --verbose', 'Show detailed FFmpeg output')
|
|
27
|
+
.option('-h, --help', 'Display help for trim command')
|
|
28
|
+
.action(async (input, options) => {
|
|
29
|
+
// Show help if requested
|
|
30
|
+
if (options.help || !input) {
|
|
31
|
+
createStandardHelp({
|
|
32
|
+
commandName: 'trim',
|
|
33
|
+
emoji: '✂️',
|
|
34
|
+
description: 'Trim videos to specific time ranges. Extract clips from longer videos with precision timing. Supports both fast stream copy mode and re-encoding mode. Can process single files or entire directories.',
|
|
35
|
+
usage: [
|
|
36
|
+
'trim <input> --start <time> --end <time>',
|
|
37
|
+
'trim video.mp4 -s 00:01:30 -e 00:05:45',
|
|
38
|
+
'trim videos/ -s 10 -d 30 -o output/'
|
|
39
|
+
],
|
|
40
|
+
options: [
|
|
41
|
+
{ flag: '-o, --output <path>', description: 'Output file/directory (default: <input>-trimmed.<ext>)' },
|
|
42
|
+
{ flag: '-s, --start <time>', description: 'Start time: HH:MM:SS or seconds (default: 00:00:00)' },
|
|
43
|
+
{ flag: '-e, --end <time>', description: 'End time: HH:MM:SS or seconds' },
|
|
44
|
+
{ flag: '-d, --duration <duration>', description: 'Duration from start: HH:MM:SS or seconds' },
|
|
45
|
+
{ flag: '--fast', description: 'Fast mode - stream copy without re-encoding' },
|
|
46
|
+
{ flag: '--accurate', description: 'Accurate mode - re-encode for frame accuracy' },
|
|
47
|
+
{ flag: '-c, --codec <codec>', description: 'Video codec: h264, h265, copy (default: copy)' },
|
|
48
|
+
{ flag: '--format <format>', description: 'Output format: mp4, mkv, webm' },
|
|
49
|
+
{ flag: '--fade-in <duration>', description: 'Add fade-in effect (seconds)' },
|
|
50
|
+
{ flag: '--fade-out <duration>', description: 'Add fade-out effect (seconds)' },
|
|
51
|
+
{ flag: '--speed <factor>', description: 'Adjust playback speed (0.5-2.0)' },
|
|
52
|
+
{ flag: '--volume <factor>', description: 'Adjust audio volume (0.0-2.0, default: 1.0)' },
|
|
53
|
+
{ flag: '--quality <crf>', description: 'CRF quality if re-encoding (default: 23)' },
|
|
54
|
+
{ flag: '--no-audio', description: 'Remove audio track from output' },
|
|
55
|
+
{ flag: '--dry-run', description: 'Preview FFmpeg command without executing' },
|
|
56
|
+
{ flag: '-v, --verbose', description: 'Show detailed FFmpeg output' }
|
|
57
|
+
],
|
|
58
|
+
examples: [
|
|
59
|
+
{ command: 'trim video.mp4 -s 00:01:30 -e 00:05:45', description: 'Trim from 1:30 to 5:45' },
|
|
60
|
+
{ command: 'trim video.mp4 -s 10 -d 30', description: 'Extract 30 seconds starting at 10 seconds' },
|
|
61
|
+
{ command: 'trim video.mp4 -s 60 -d 120 --fast', description: 'Fast trim using stream copy' },
|
|
62
|
+
{ command: 'trim videos/ -s 5 -d 30 -o clips/', description: 'Trim all videos in folder' },
|
|
63
|
+
{ command: 'trim long.mp4 -s 00:10:00 -e 00:15:00 -c h265', description: 'Trim and re-encode with H265' }
|
|
64
|
+
],
|
|
65
|
+
additionalSections: [
|
|
66
|
+
{
|
|
67
|
+
title: 'Time Format',
|
|
68
|
+
items: [
|
|
69
|
+
'Seconds: 90 (1 minute 30 seconds)',
|
|
70
|
+
'MM:SS: 01:30 (1 minute 30 seconds)',
|
|
71
|
+
'HH:MM:SS: 00:01:30 (1 minute 30 seconds)',
|
|
72
|
+
'You must specify either --end or --duration (not both)'
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
title: 'Fast Mode vs Re-encoding',
|
|
77
|
+
items: [
|
|
78
|
+
'Fast (--fast): Stream copy, very quick, may not be frame-accurate',
|
|
79
|
+
'Re-encode (default with codec): Slower but frame-accurate',
|
|
80
|
+
'Stream copy (default): Fast and frame-accurate for most cases'
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
tips: [
|
|
85
|
+
'Use --fast for quick previews or when exact frame accuracy is not critical',
|
|
86
|
+
'For precise frame-accurate cuts, omit --fast (slight re-encoding)',
|
|
87
|
+
'Specify --end for absolute time or --duration for relative time',
|
|
88
|
+
'Use seconds for simpler time specifications (e.g., -s 90 -d 30)'
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
process.exit(0);
|
|
92
|
+
}
|
|
93
|
+
const spinner = ora('Processing trim...').start();
|
|
94
|
+
try {
|
|
95
|
+
// Check ffmpeg
|
|
96
|
+
const ffmpegAvailable = await checkFFmpeg();
|
|
97
|
+
if (!ffmpegAvailable) {
|
|
98
|
+
spinner.fail(chalk.red('ffmpeg is not installed or not in PATH'));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
// Parse input files
|
|
102
|
+
const inputFiles = parseInputPaths(input);
|
|
103
|
+
if (inputFiles.length === 0) {
|
|
104
|
+
spinner.fail(chalk.red('No valid video files found'));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
spinner.text = `Found ${inputFiles.length} video file(s) to process`;
|
|
108
|
+
// Parse start time
|
|
109
|
+
const startSeconds = parseTimeToSeconds(options.start || '0');
|
|
110
|
+
// Validate time options
|
|
111
|
+
if (!options.end && !options.duration) {
|
|
112
|
+
spinner.fail(chalk.red('Either --end or --duration must be specified'));
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
// Resolve output paths
|
|
116
|
+
const outputPaths = resolveOutputPaths(inputFiles, options.output, {
|
|
117
|
+
suffix: '-trimmed',
|
|
118
|
+
newExtension: options.format ? `.${options.format}` : undefined
|
|
119
|
+
});
|
|
120
|
+
// Process each file
|
|
121
|
+
for (let i = 0; i < inputFiles.length; i++) {
|
|
122
|
+
const inputFile = inputFiles[i];
|
|
123
|
+
const outputFile = outputPaths.get(inputFile);
|
|
124
|
+
spinner.text = `Processing ${i + 1}/${inputFiles.length}: ${inputFile}`;
|
|
125
|
+
// Get metadata
|
|
126
|
+
const metadata = await getVideoMetadata(inputFile);
|
|
127
|
+
// Calculate end time
|
|
128
|
+
let endSeconds;
|
|
129
|
+
if (options.duration) {
|
|
130
|
+
endSeconds = startSeconds + parseTimeToSeconds(options.duration);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
endSeconds = parseTimeToSeconds(options.end);
|
|
134
|
+
}
|
|
135
|
+
// Validate times
|
|
136
|
+
if (startSeconds < 0 || startSeconds >= metadata.duration) {
|
|
137
|
+
spinner.warn(chalk.yellow(`Skipping ${inputFile}: Start time out of range`));
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (endSeconds > metadata.duration) {
|
|
141
|
+
endSeconds = metadata.duration;
|
|
142
|
+
}
|
|
143
|
+
if (endSeconds <= startSeconds) {
|
|
144
|
+
spinner.warn(chalk.yellow(`Skipping ${inputFile}: Invalid time range`));
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const trimDuration = endSeconds - startSeconds;
|
|
148
|
+
// Build ffmpeg arguments
|
|
149
|
+
const args = ['-ss', startSeconds.toString(), '-i', inputFile];
|
|
150
|
+
if (options.duration) {
|
|
151
|
+
args.push('-t', trimDuration.toString());
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
args.push('-to', endSeconds.toString());
|
|
155
|
+
}
|
|
156
|
+
// Codec settings
|
|
157
|
+
if (options.fast) {
|
|
158
|
+
args.push('-c', 'copy');
|
|
159
|
+
}
|
|
160
|
+
else if (options.codec && options.codec !== 'copy') {
|
|
161
|
+
const codecMap = {
|
|
162
|
+
'h264': 'libx264',
|
|
163
|
+
'h265': 'libx265',
|
|
164
|
+
'hevc': 'libx265',
|
|
165
|
+
};
|
|
166
|
+
args.push('-c:v', codecMap[options.codec] || 'copy', '-c:a', 'aac');
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
args.push('-c', 'copy');
|
|
170
|
+
}
|
|
171
|
+
args.push('-y', outputFile);
|
|
172
|
+
// Show command if dry-run
|
|
173
|
+
if (options.dryRun) {
|
|
174
|
+
console.log(chalk.cyan('\nFFmpeg command:'));
|
|
175
|
+
console.log(chalk.gray('ffmpeg ' + args.join(' ')));
|
|
176
|
+
console.log();
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
// Run trim
|
|
180
|
+
await runFFmpeg(args, options.verbose, (line) => {
|
|
181
|
+
if (options.verbose) {
|
|
182
|
+
logFFmpegOutput(line);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
spinner.succeed(chalk.green(`✓ [${i + 1}/${inputFiles.length}] Trimmed ${formatDuration(startSeconds)} → ${formatDuration(endSeconds)} (${formatDuration(trimDuration)})\n` +
|
|
186
|
+
chalk.dim(` ${outputFile}`)));
|
|
187
|
+
}
|
|
188
|
+
if (!options.dryRun) {
|
|
189
|
+
console.log(chalk.green.bold(`\n✨ Successfully trimmed ${inputFiles.length} video(s)!`));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
spinner.fail(chalk.red(`Error: ${error.message}`));
|
|
194
|
+
process.exit(1);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=trim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trim.js","sourceRoot":"","sources":["../../src/commands/trim.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,mBAAmB,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ/C"}
|
package/dist/register.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { compressCommand } from './commands/compress.js';
|
|
2
|
+
import { transcodeCommand } from './commands/transcode.js';
|
|
3
|
+
import { extractCommand } from './commands/extract.js';
|
|
4
|
+
import { trimCommand } from './commands/trim.js';
|
|
5
|
+
import { resizeCommand } from './commands/resize.js';
|
|
6
|
+
import { mergeCommand } from './commands/merge.js';
|
|
7
|
+
export const name = '@mediaproc/video';
|
|
8
|
+
export const version = '1.0.0';
|
|
9
|
+
export function register(program) {
|
|
10
|
+
// Register commands directly without 'video' subcommand
|
|
11
|
+
compressCommand(program);
|
|
12
|
+
transcodeCommand(program);
|
|
13
|
+
extractCommand(program);
|
|
14
|
+
trimCommand(program);
|
|
15
|
+
resizeCommand(program);
|
|
16
|
+
mergeCommand(program);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,wDAAwD;IACxD,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface VideoOptions {
|
|
2
|
+
input: string;
|
|
3
|
+
output?: string;
|
|
4
|
+
codec?: 'h264' | 'h265' | 'vp9' | 'av1';
|
|
5
|
+
preset?: 'ultrafast' | 'superfast' | 'veryfast' | 'faster' | 'fast' | 'medium' | 'slow' | 'slower' | 'veryslow';
|
|
6
|
+
crf?: number;
|
|
7
|
+
bitrate?: string;
|
|
8
|
+
fps?: number;
|
|
9
|
+
verbose?: boolean;
|
|
10
|
+
dryRun?: boolean;
|
|
11
|
+
scale?: '480p' | '720p' | '1080p' | '1440p' | '4k';
|
|
12
|
+
width?: number;
|
|
13
|
+
height?: number;
|
|
14
|
+
aspect?: boolean;
|
|
15
|
+
start?: string;
|
|
16
|
+
duration?: string;
|
|
17
|
+
end?: string;
|
|
18
|
+
fast?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface CompressOptions extends VideoOptions {
|
|
21
|
+
quality?: 'low' | 'medium' | 'high';
|
|
22
|
+
}
|
|
23
|
+
export interface TranscodeOptions extends VideoOptions {
|
|
24
|
+
format?: 'mp4' | 'webm' | 'mkv' | 'avi';
|
|
25
|
+
audioCodec?: string;
|
|
26
|
+
audioBitrate?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ExtractOptions {
|
|
29
|
+
input: string;
|
|
30
|
+
output?: string;
|
|
31
|
+
start?: string;
|
|
32
|
+
end?: string;
|
|
33
|
+
format?: 'jpg' | 'png';
|
|
34
|
+
fps?: number;
|
|
35
|
+
quality?: number;
|
|
36
|
+
verbose?: boolean;
|
|
37
|
+
dryRun?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface TrimOptions {
|
|
40
|
+
input: string;
|
|
41
|
+
output?: string;
|
|
42
|
+
start: string;
|
|
43
|
+
end: string;
|
|
44
|
+
}
|
|
45
|
+
export interface ResizeOptions {
|
|
46
|
+
input: string;
|
|
47
|
+
output?: string;
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
maintainAspectRatio?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface MergeOptions {
|
|
53
|
+
inputs: string[];
|
|
54
|
+
output?: string;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACxC,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,OAAO,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse and style FFmpeg output for better readability
|
|
3
|
+
*/
|
|
4
|
+
export declare function styleFFmpegOutput(line: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Check if line should be displayed based on verbosity
|
|
7
|
+
*/
|
|
8
|
+
export declare function shouldDisplayLine(line: string, verbose: boolean): boolean;
|
|
9
|
+
//# sourceMappingURL=ffmpeg-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ffmpeg-output.d.ts","sourceRoot":"","sources":["../../src/utils/ffmpeg-output.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgEtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CA+BzE"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* Parse and style FFmpeg output for better readability
|
|
4
|
+
*/
|
|
5
|
+
export function styleFFmpegOutput(line) {
|
|
6
|
+
line = line.trim();
|
|
7
|
+
// Skip empty lines
|
|
8
|
+
if (!line)
|
|
9
|
+
return '';
|
|
10
|
+
// Error messages (red)
|
|
11
|
+
if (line.includes('Error') || line.includes('error') || line.includes('failed')) {
|
|
12
|
+
return chalk.red(line);
|
|
13
|
+
}
|
|
14
|
+
// Warning messages (yellow)
|
|
15
|
+
if (line.includes('Warning') || line.includes('warning')) {
|
|
16
|
+
return chalk.yellow(line);
|
|
17
|
+
}
|
|
18
|
+
// Progress information (cyan)
|
|
19
|
+
if (line.includes('frame=') || line.includes('fps=') || line.includes('time=') || line.includes('speed=')) {
|
|
20
|
+
// Parse progress line
|
|
21
|
+
const frameMatch = line.match(/frame=\s*(\d+)/);
|
|
22
|
+
const fpsMatch = line.match(/fps=\s*([\d.]+)/);
|
|
23
|
+
const timeMatch = line.match(/time=\s*([\d:\.]+)/);
|
|
24
|
+
const speedMatch = line.match(/speed=\s*([\d.]+x)/);
|
|
25
|
+
const sizeMatch = line.match(/size=\s*(\d+\w+)/);
|
|
26
|
+
const bitrateMatch = line.match(/bitrate=\s*([\d.]+\w+)/);
|
|
27
|
+
let output = chalk.cyan('⚡ Progress: ');
|
|
28
|
+
if (frameMatch)
|
|
29
|
+
output += chalk.white(`Frame ${frameMatch[1]} `);
|
|
30
|
+
if (fpsMatch)
|
|
31
|
+
output += chalk.gray(`• ${fpsMatch[1]} fps `);
|
|
32
|
+
if (timeMatch)
|
|
33
|
+
output += chalk.white(`• ${timeMatch[1]} `);
|
|
34
|
+
if (sizeMatch)
|
|
35
|
+
output += chalk.gray(`• ${sizeMatch[1]} `);
|
|
36
|
+
if (bitrateMatch)
|
|
37
|
+
output += chalk.gray(`• ${bitrateMatch[1]} `);
|
|
38
|
+
if (speedMatch)
|
|
39
|
+
output += chalk.green(`• ${speedMatch[1]}`);
|
|
40
|
+
return output;
|
|
41
|
+
}
|
|
42
|
+
// Input/Output file info (blue)
|
|
43
|
+
if (line.includes('Input #') || line.includes('Output #')) {
|
|
44
|
+
return chalk.blue.bold(line);
|
|
45
|
+
}
|
|
46
|
+
// Stream info (magenta)
|
|
47
|
+
if (line.includes('Stream #')) {
|
|
48
|
+
return chalk.magenta(line);
|
|
49
|
+
}
|
|
50
|
+
// Duration and metadata (green)
|
|
51
|
+
if (line.includes('Duration:') || line.includes('Metadata:')) {
|
|
52
|
+
return chalk.green(line);
|
|
53
|
+
}
|
|
54
|
+
// Configuration info (gray)
|
|
55
|
+
if (line.includes('configuration:') || line.includes('libav') || line.includes('built with')) {
|
|
56
|
+
return chalk.gray(line);
|
|
57
|
+
}
|
|
58
|
+
// Success messages (green)
|
|
59
|
+
if (line.includes('successfully') || line.includes('completed')) {
|
|
60
|
+
return chalk.green(line);
|
|
61
|
+
}
|
|
62
|
+
// Default: dim for general info
|
|
63
|
+
return chalk.dim(line);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if line should be displayed based on verbosity
|
|
67
|
+
*/
|
|
68
|
+
export function shouldDisplayLine(line, verbose) {
|
|
69
|
+
line = line.trim();
|
|
70
|
+
if (!line)
|
|
71
|
+
return false;
|
|
72
|
+
// Always show errors and warnings
|
|
73
|
+
if (line.includes('Error') || line.includes('error') || line.includes('Warning') || line.includes('warning')) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
// Always show progress
|
|
77
|
+
if (line.includes('frame=') && line.includes('time=')) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
// Show important info
|
|
81
|
+
if (line.includes('Input #') || line.includes('Output #') || line.includes('Stream #')) {
|
|
82
|
+
return verbose;
|
|
83
|
+
}
|
|
84
|
+
// Show duration and metadata if verbose
|
|
85
|
+
if (line.includes('Duration:') || line.includes('Metadata:')) {
|
|
86
|
+
return verbose;
|
|
87
|
+
}
|
|
88
|
+
// Filter out configuration and build info unless very verbose
|
|
89
|
+
if (line.includes('configuration:') || line.includes('built with')) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return verbose;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=ffmpeg-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ffmpeg-output.js","sourceRoot":"","sources":["../../src/utils/ffmpeg-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface VideoMetadata {
|
|
2
|
+
duration: number;
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
codec: string;
|
|
6
|
+
fps: number;
|
|
7
|
+
bitrate: number;
|
|
8
|
+
format: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Execute ffmpeg command
|
|
12
|
+
*/
|
|
13
|
+
export declare function runFFmpeg(args: string[], verbose?: boolean, onOutput?: (line: string) => void): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Get video metadata using ffprobe
|
|
16
|
+
*/
|
|
17
|
+
export declare function getVideoMetadata(input: string): Promise<VideoMetadata>;
|
|
18
|
+
/**
|
|
19
|
+
* Check if ffmpeg is available
|
|
20
|
+
*/
|
|
21
|
+
export declare function checkFFmpeg(): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Check if ffprobe is available
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkFFprobe(): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* Validate input file exists
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateInputFile(input: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Generate output filename if not provided
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateOutputPath(input: string, suffix: string, extension?: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Format time for display (seconds to HH:MM:SS)
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatDuration(seconds: number): string;
|
|
38
|
+
/**
|
|
39
|
+
* Parse time string (HH:MM:SS) to seconds
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseTimeToSeconds(time: string): number;
|
|
42
|
+
/**
|
|
43
|
+
* Format file size
|
|
44
|
+
*/
|
|
45
|
+
export declare function formatFileSize(bytes: number): string;
|
|
46
|
+
//# sourceMappingURL=ffmpeg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,UAAQ,EACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0D5E;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAMpD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAMrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWpD"}
|