Top AI Repos — open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
FFmpeg bindings for Node.js. Features both low-level and high-level APIs, full hardware acceleration, TypeScript support, and modern async patterns
| Date | Stars |
|---|---|
| 2026-07-24 | 357 |
| 2026-07-25 | 357 |
| 2026-07-28 | 357 |
| 2026-07-30 | 357 |
| 2026-08-06 | 357 |
Today
— stars today
This week
— stars this week
This month
— stars this month
Momentum
15.0
growth rate 0.00%/day
<p align="center">
<img src="https://github.com/seydx/node-av/blob/main/docs/logo.png?raw=true" width="250px">
</p>
# NodeAV
[](https://www.npmjs.com/package/node-av)
[](https://www.npmjs.com/package/node-av)
[](https://socket.dev/npm/package/node-av)
[](https://opensource.org/licenses/MIT)
[](https://www.typescriptlang.org/)
[](https://ffmpeg.org)
[%20%7C%20macOS%20%7C%20Linux-lightgrey.svg)](https://github.com/seydx/node-av)
Native Node.js bindings for FFmpeg with full TypeScript support - including type-safe options (autocomplete + validation) for every codec, format, filter, and bitstream filter, generated from FFmpeg's own metadata. Provides direct access to FFmpeg's C APIs through N-API. Includes both raw FFmpeg bindings for full control and higher-level abstractions. Automatic resource management via Disposable pattern, hardware acceleration support and prebuilt binaries for Windows, Linux, and macOS.
📚 **[Documentation](https://seydx.github.io/node-av)**
## Table of Contents
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Low-Level API](#low-level-api)
- [High-Level API](#high-level-api)
- [Pipeline API](#pipeline-api)
- [Hardware Acceleration](#hardware-acceleration)
- [Auto-Detection](#auto-detection)
- [Specific Hardware](#specific-hardware)
- [Stream Processing](#stream-processing)
- [From Files or Network](#from-files-or-network)
- [From Buffers](#from-buffers)
- [Raw Media Processing](#raw-media-processing)
- [Device Capture](#device-capture)
- [FFmpeg Binary Access](#ffmpeg-binary-access)
- [Resource Management](#resource-management)
- [Imports and Tree Shaking](#imports-and-tree-shaking)
- [Key Features](#key-features)
- [Performance](#performance)
- [Benchmarks](#benchmarks)
- [Sync vs Async Operations](#sync-vs-async-operations)
- [Memory Safety Considerations](#memory-safety-considerations)
- [Electron](#electron)
- [Examples](#examples)
- [Prebuilt Binaries](#prebuilt-binaries)
- [Cross-Platform Packaging (CI/CD)](#cross-platform-packaging-cicd)
- [Troubleshooting](#troubleshooting)
- [License](#license)
- [Contributing](#contributing)
- [Support](#support)
- [See Also](#see-also)
## Installation
```bash
npm install node-av
```
## Quick Start
### Low-Level API
Direct access to FFmpeg's C APIs with minimal abstractions. Perfect when you need full control over FFmpeg functionality.
```typescript
import { AVERROR_EOF, AVMEDIA_TYPE_VIDEO } from 'node-av/constants';
import { Codec, CodecContext, FFmpegError, FormatContext, Frame, Packet, Rational } from 'node-av/lib';
// Open input file
await using ifmtCtx = new FormatContext();
let ret = await ifmtCtx.openInput('input.mp4');
FFmpegError.throwIfError(ret, 'Could not open input file');
ret = await ifmtCtx.findStreamInfo();
FFmpegError.throwIfError(ret, 'Could not find stream info');
// Find video stream
const videoStreamIndex = ifmtCtx.findBestStream(AVMEDIA_TYPE_VIDEO);
const videoStream = ifmtCtx.streams?.[videoStreamIndex];
if (!videoStream) {
throw new Error('No video stream found');
}
// Create codec
const codec = Codec.findDecoder(videoStream.codecpar.codecId);
if (!codec) {
throw new Error('Codec not found');
}
// Allocate codec context for the decoder
using decoderCtx = new CodecContext();
decoderCtx.allocContext3(codec);
ret = decoderCtx.parametersToContext(videoStream.codecpar);
FFmpegError.throwIfError(ret, 'Could not copy codec parameters to decoder context');
// Open decoder context
ret = await decoderCtx.open2(codec, null);
FFmpegErExcerpt of 25,015 characters
Read on GitHubWould you bet a product on this? Bounded 0–100 and slow moving.
matched fp:1a9526862a0a4df3, topic:whisper