# framefusion

> Video library

Latest version **0.0.3** (published 2023-04-21) · SEE LICENSE IN LICENSE license · 0 weekly downloads

## Install

```sh
npm install framefusion
pnpm add framefusion
yarn add framefusion
bun add framefusion
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3 |
| Published | 2023-04-21 |
| First published | 2023-04-21 |
| Weekly downloads | 0 |
| License | SEE LICENSE IN LICENSE |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 7 |
| Unpacked size | 241.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | antoinemopa |

## Links

- npm: https://www.npmjs.com/package/framefusion
- npm.io page: https://npm.io/package/framefusion

## Dependencies (7)

- [got](https://npm.io/package/got.md) ^12.6.0
- [tmp](https://npm.io/package/tmp.md) ^0.2.1
- [fs-extra](https://npm.io/package/fs-extra.md) ^11.1.1
- [beamcoder](https://npm.io/package/beamcoder.md) ^0.7.1
- [http-server](https://npm.io/package/http-server.md) ^14.1.1
- [tsconfig-paths](https://npm.io/package/tsconfig-paths.md) ^4.1.2
- [rollup-plugin-auto-external](https://npm.io/package/rollup-plugin-auto-external.md) ^2.0.0

## Recent versions

- 0.0.3 (latest) — 2023-04-21
- 0.0.2 — 2023-04-21

## README

# Framefusion

Dump mp4 frames at specific times in node.

Framefusion is an experimental mp4 frame extraction library based on [beamcoder](https://github.com/Streampunk/beamcoder).

# Pre-installation setup

## Mac (M1)

```
brew uninstall ffmpeg
brew install ffmpeg@5
export CXXFLAGS="-I/opt/homebrew/Cellar/ffmpeg/5.1.2_6/include/"
ln -s /opt/homebrew/Cellar/ffmpeg/5.1.2_6/ /opt/homebrew/Cellar/ffmpeg/5.0
```

## Mac (Intel)

TODO

## Linux

TODO

# Installing in a project

```bash
yarn add git+ssh://git@github.com:Lumen5/framefusion.git
```

# Example usage

```typescript
import { BeamcoderExtractor } from 'framefusion';

const inputFile = './video.mp4';

async function run() {
    const extractor = await BeamcoderExtractor.create({
        inputFile,
        //outputFile: 'image-%04d.png', // Uncomment to ouput files to disk
        outputPixelFormat: 'rgba',
    });

    // Get frame at a specific time (in seconds)
    const frame = await extractor.getFrameAtTime(2.0);

    // Do something with frame data
    console.log(frame.data);
}

run();
```

For a complete working project (with package.json, vite config, typescript config), see here: https://github.com/Lumen5/framefusion/tree/main/examples/mini-framefusion-example

# Running test

```bash
npm install && npm run test-ui
```

# Philosophy

We want to limit framefusion to 2 simple roles:

 1. Extracting frames from videos
 2. Combining frames into a video

We want to design the API to be as minimal as possible to achieve these two goals.

We also want to build the library in a way that we can provide different backends to acheive these goals, but still keep a similar interface.

# Where we are with the philosophy currently

Only point 1 is implemented so far (Extracting frames from videos).

We also only provide a beamcoder backend and we still have to figure out how we can swap backends and skip compiling beamcoder. This could be through different npm packages.

---
_Source: https://npm.io/package/framefusion · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
