Generate .webp video previews from .mp4 files using TypeScript and ffmpeg
$ npm install video-previewer
$ pnpm add video-previewer
$ yarn add video-previewer
import VideoPreviewer from "./generator/VideoPreviewer";
const preview = new VideoPreviewer(
"video.mp4",
"output/path.webp", //output path
[
{ start: "00:00:01", end: "00:00:04" }, // clips to take from video, string with 'HH:MM:SS' format
{ start: "00:04:01", end: "00:04:04" },
{ start: "00:12:01", end: "00:12:04" },
{ start: "00:13:01", end: "00:13:04" },
],
{
clipCount: 5,
clipTime: 5,
clipSelectStrategy: "max-size", // options: 'max-size', 'min-size', 'random'
clipRange: [0.1, 0.9],
fpsRate: 10, // number, -1 (default)
output: {
type: "buffer", // options: 'buffer' (default), 'file', 'dir'
path: "", // Required if output type is not 'buffer' (specify file or directory path)
},
speedMulti: 2,
width: 320, // number, video normal dimensions (default)
height: -1, // number, video normal dimensions (default)
bitrate: 1000, // optional, video bitrate in kbps
videoCodec: "libx264", // optional, codec for video encoding
audioCodec: "aac", // optional, codec for audio encoding
audioBitrate: 128, // optional, audio bitrate in kbps
format: "webp", // optional, output format for the preview
useHardwareAcceleration: false, // optional, enable hardware acceleration for processing
additionalOptions: "", // optional, any additional command line options for ffmpeg
}
);
preview.exec();
Available options:
Option | Type | Default |
---|---|---|
clipCount |
number |
- |
clipTime |
number |
- |
clipSelectStrategy |
string |
'max-size' |
clipRange |
number[] |
- |
fpsRate |
number |
-1 (default: original fps) |
output |
OutputOptions |
{type: 'buffer'} |
speedMulti |
number |
- |
width |
number |
(default: original width) |
height |
number |
(default: original heigth) |
bitrate |
number |
- |
videoCodec |
string |
'libx264' |
audioCodec |
string |
'aac' |
audioBitrate |
number |
128 |
format |
string |
'webp' |
useHardwareAcceleration |
boolean |
false |
additionalOptions |
string |
- |
You can find me on twitter as 🐤 @osinthappyemo or on instagram as 🍢 @osintxv