summaryrefslogtreecommitdiff
path: root/apps/web
diff options
context:
space:
mode:
authorShubbu03 <thatcoderguyshubham@gmail.com>2025-06-23 22:10:15 +0530
committerShubbu03 <thatcoderguyshubham@gmail.com>2025-06-23 22:10:15 +0530
commit7d1b5ceb0d79ab8428750f68e7f105bf662696b0 (patch)
tree272ae4799ad15cbbf747dff01a7dc636daf2fd7e /apps/web
parentfddbecc736a037b938385eb5eb7d1ec752581c76 (diff)
downloadopencut-7d1b5ceb0d79ab8428750f68e7f105bf662696b0.tar.gz
Completed the getVideoInfo func according to the comment specified
Diffstat (limited to 'apps/web')
-rw-r--r--apps/web/src/lib/ffmpeg-utils.ts52
1 files changed, 39 insertions, 13 deletions
diff --git a/apps/web/src/lib/ffmpeg-utils.ts b/apps/web/src/lib/ffmpeg-utils.ts
index 56085a21..de203fd6 100644
--- a/apps/web/src/lib/ffmpeg-utils.ts
+++ b/apps/web/src/lib/ffmpeg-utils.ts
@@ -102,26 +102,52 @@ export const getVideoInfo = async (videoFile: File): Promise<{
fps: number;
}> => {
const ffmpeg = await initFFmpeg();
-
+
const inputName = 'input.mp4';
-
+
// Write input file
await ffmpeg.writeFile(inputName, new Uint8Array(await videoFile.arrayBuffer()));
-
- // Get video info
+
+ // Capture FFmpeg stderr output
+ let ffmpegOutput = '';
+ const listener = (data: string) => {
+ ffmpegOutput += data;
+ };
+ ffmpeg.on('log', ({ message }) => listener(message));
+
+ // Run ffmpeg to get info (stderr will contain the info)
await ffmpeg.exec(['-i', inputName, '-f', 'null', '-']);
-
- // Note: In a real implementation, you'd parse the FFmpeg output
- // For now, we'll return default values and enhance this later
-
+
+ // Remove listener
+ // (No off() method in ffmpeg.wasm, so this is a no-op, but included for clarity)
+
// Cleanup
await ffmpeg.deleteFile(inputName);
-
+
+ // Parse output for duration, resolution, and fps
+ // Example: Duration: 00:00:10.00, start: 0.000000, bitrate: 1234 kb/s
+ // Example: Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
+
+ const durationMatch = ffmpegOutput.match(/Duration: (\d+):(\d+):([\d.]+)/);
+ let duration = 0;
+ if (durationMatch) {
+ const [, h, m, s] = durationMatch;
+ duration = parseInt(h) * 3600 + parseInt(m) * 60 + parseFloat(s);
+ }
+
+ const videoStreamMatch = ffmpegOutput.match(/Video:.* (\d+)x(\d+)[^,]*, ([\d.]+) fps/);
+ let width = 0, height = 0, fps = 0;
+ if (videoStreamMatch) {
+ width = parseInt(videoStreamMatch[1]);
+ height = parseInt(videoStreamMatch[2]);
+ fps = parseFloat(videoStreamMatch[3]);
+ }
+
return {
- duration: 10, // Placeholder - would parse from FFmpeg output
- width: 1920, // Placeholder
- height: 1080, // Placeholder
- fps: 30 // Placeholder
+ duration,
+ width,
+ height,
+ fps
};
};