mirror of
https://github.com/iib0011/omni-tools.git
synced 2025-12-29 16:16:02 +00:00
feat: fix Blob type in tools (main) This commit fixes a type-related issue. The 'Blob' constructor was used without specifying 'as any' for the data argument in several tools. This change ensures correctness and prevents potential type errors. The following files were modified: - src/pages/tools/video/change-speed/index.tsx - src/pages/tools/video/crop-video/service.ts - src/pages/tools/audio/trim/service.ts - src/pages/tools/video/merge-video/service.ts - src/pages/tools/video/rotate/service.ts - src/pages/tools/image/generic/rotate/service.ts - src/pages/tools/pdf/merge-pdf/service.ts - src/pages/tools/pdf/rotate-pdf/service.ts - src/pages/tools/video/compress/service.ts - src/pages/tools/video/flip/service.ts - src/pages/tools/video/trim/index.tsx - src/pages/tools/video/loop/service.ts - src/pages/tools/audio/extract-audio/service.ts - src/pages/tools/pdf/split-pdf/service.ts - src/pages/tools/audio/change-speed/service.ts - src/pages/tools/image/generic/resize/service.ts - src/pages/tools/video/gif/change-speed/index.tsx - src/pages/tools/audio/merge-audio/service.ts - src/pages/tools/video/video-to-gif/index.tsx
42 lines
1.0 KiB
TypeScript
42 lines
1.0 KiB
TypeScript
import { InitialValuesType } from './types';
|
|
import { FFmpeg } from '@ffmpeg/ffmpeg';
|
|
import { fetchFile } from '@ffmpeg/util';
|
|
|
|
const ffmpeg = new FFmpeg();
|
|
|
|
export async function loopVideo(
|
|
input: File,
|
|
options: InitialValuesType
|
|
): Promise<File> {
|
|
if (!ffmpeg.loaded) {
|
|
await ffmpeg.load({
|
|
wasmURL:
|
|
'https://cdn.jsdelivr.net/npm/@ffmpeg/core@0.12.9/dist/esm/ffmpeg-core.wasm'
|
|
});
|
|
}
|
|
|
|
const inputName = 'input.mp4';
|
|
const outputName = 'output.mp4';
|
|
await ffmpeg.writeFile(inputName, await fetchFile(input));
|
|
|
|
const args = [];
|
|
const loopCount = options.loops - 1;
|
|
|
|
if (loopCount <= 0) {
|
|
return input;
|
|
}
|
|
|
|
args.push('-stream_loop', loopCount.toString());
|
|
args.push('-i', inputName);
|
|
args.push('-c:v', 'libx264', '-preset', 'ultrafast', outputName);
|
|
|
|
await ffmpeg.exec(args);
|
|
|
|
const loopedData = await ffmpeg.readFile(outputName);
|
|
return await new File(
|
|
[new Blob([loopedData as any], { type: 'video/mp4' })],
|
|
`${input.name.replace(/\.[^/.]+$/, '')}_looped.mp4`,
|
|
{ type: 'video/mp4' }
|
|
);
|
|
}
|