diff --git a/docs/api.md b/docs/api.md index 4c7b6ba..aed077c 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1,10 +1,164 @@ API === -- createWorker() - - Worker.write() - - Worker.read() - - Worker.mkdir() - - Worker.remove() - - Worker.transcode() - - Worker.run() +- [createWorker()](#create-worker) + - [Worker.load](#worker-load) + - [Worker.write](#worker-write) + - [Worker.read](#worker-read) + - [Worker.mkdir](#worker-mkdir) + - [Worker.remove](#worker-remove) + - [Worker.transcode](#worker-transcode) + - [Worker.run](#worker-run) + +--- + + +## createWorker(options): Worker + +createWorker is a factory function that creates a ffmpeg worker, a worker is basically a Web Worker in browser and Child Process in Node. + +**Arguments:** + +- `options` an object of customized options + - `corePath` path for ffmpeg-core.js script + - `workerPath` path for downloading worker script + - `workerBlobURL` a boolean to define whether to use Blob URL for worker script, default: true + - `logger` a function to log the progress, a quick example is `m => console.log(m)` + + +**Examples:** + +```javascript +const { createWorker } = FFmpeg; +const worker = createWorker({ + corePath: './node_modules/@ffmpeg/core/ffmpeg-core.js', + logger: m => console.log(m), +}); +``` + +### Worker.load(jobId): Promise + +Worker.load() loads ffmpeg-core.js script (download from remote if not presented), it makes Web Worker/Child Process ready for next action. + +**Arguments:** + +- `jobId` jobId is generated by ffmpeg.js to identify each job, but you can put your own when calling the function. + +**Examples:** + +```javascript +(async () => { + await worker.load(); +})(); +``` + + +### Worker.write(path, data, jobId): Promise + +Worker.write() writes data to specific path in Emscripten file system, it is an essential step before doing any other tasks. + +**Arguments:** + +- `path` path to write data to file system +- `data` data to write, can be Uint8Array, URL or base64 format +- `jobId` check Worker.load() + +**Examples:** + +```javascript +(async () => { + await worker.write('flame.avi', 'http://localhost:3000/tests/assets/flame.avi'); +})(); +``` + + +### Worker.read(path, jobId): Promise + +Worker.read() reads data from file system, often used to get output data after specific task. + +**Arguments:** + +- `path` path to read data from file system +- `jobId` check Worker.load() + +**Examples:** + +```javascript +(async () => { + const { data } = await worker.read('output.mp4'); +})(); +``` + + +### Worker.mkdir(path, jobId): Promise + +Worker.mkdir() creates a directory in file system, useful when you need to group files in a directory. + +**Arguments:** + +- `path` path to create directory +- `jobId` check Worker.load() + +**Examples:** + +```javascript +(async () => { + await worker.mkdir('/video-clips'); +})(); +``` + + +### Worker.remove(path, jobId): Promise + +Worker.remove() removes files in file system, it will be better to delete unused files if you need to run ffmpeg.js multiple times. + +**Arguments:** + +- `path` path for file to delete +- `jobId` check Worker.load() + +**Examples:** + +```javascript +(async () => { + await worker.remove('output.mp4'); +})(); +``` + + +### Worker.transcode(inputPath, outputPath, options, jobId): Promise + +Worker.transcode() transcode a video file to another format. + +**Arguments:** + +- `inputPath` input file path, the input file should be written through Worker.write() +- `outputPath` output file path, can be read with Worker.read() later +- `options` a string to add extra arguments to ffmpeg +- `jobId` check Worker.load() + +**Examples:** + +```javascript +(async () => { + await worker.transcode('flame.avi', 'output.mp4', '-s 1920x1080'); +})(); +``` + + +### Worker.run(args, jobId): Promise + +Worker.run() is similar to FFmpeg cli tool, aims to provide maximum flexiblity for users. + +**Arguments:** + +- `args` a string to represent arguments +- `jobId` check Worker.load() + +**Examples:** + +```javascript +(async () => { + await worker.run('-i flame.avi -s 1920x1080 output.mp4'); +})(); +```