Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/androzdev/mediaplex
[WIP] High performance media transcoding utility for node written in Rust 🦀 🎶
https://github.com/androzdev/mediaplex
audio ffmpeg hacktoberfest libopus media node rust
Last synced: 3 months ago
JSON representation
[WIP] High performance media transcoding utility for node written in Rust 🦀 🎶
- Host: GitHub
- URL: https://github.com/androzdev/mediaplex
- Owner: androzdev
- License: other
- Created: 2023-07-15T09:37:38.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-06-14T06:01:13.000Z (8 months ago)
- Last Synced: 2024-11-09T04:02:29.016Z (3 months ago)
- Topics: audio, ffmpeg, hacktoberfest, libopus, media, node, rust
- Language: Rust
- Homepage: https://npm.im/mediaplex
- Size: 6.43 MB
- Stars: 12
- Watchers: 2
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# `mediaplex`
![https://github.com/napi-rs/tar/actions](https://github.com/napi-rs/tar/workflows/CI/badge.svg)
[![install size](https://packagephobia.com/badge?p=mediaplex)](https://packagephobia.com/result?p=mediaplex)
[![Downloads](https://img.shields.io/npm/dm/mediaplex.svg?sanitize=true)](https://npmcharts.com/compare/mediaplex?minimal=true)Media processing library for Node.js
## Install this package
```
yarn add mediaplex
pnpm add mediaplex
bun add mediaplex
npm install mediaplex
```# Examples
## Probe metadata
You can use Mediaplex to probe media files for metadata. Here's an example:
```js
const mediaplex = require('mediaplex');const stream = createReadStream('./media.mp3');
const { result } = await mediaplex.probeStream(stream);console.log(result);
/* Sample Output */
{
channels: 2,
sampleRate: 44100,
framesPerBlock: 0,
codec: 4099, // use `CodecType` enum to validate this
nFrames: 796032,
duration: 18, // seconds
metadata: [
{ name: 'TXXX:major_brand', value: 'mp42' },
{ name: 'TXXX:minor_version', value: '0' },
{ name: 'TXXX:compatible_brands', value: 'isommp42' },
{ name: 'TSSE', value: 'Lavf59.6.100' },
{ name: 'TIT2', value: "..." },
{ name: 'TPE1', value: '...' },
{ name: 'TALB', value: '...' },
{ name: 'TCON', value: '...' },
{ name: 'TPUB', value: '...' }
]
}
```This will output an object containing information about the media file, including the number of channels, sample rate, codec, duration, and metadata.
The default probe size is `2MB`, but you can adjust this as needed by passing the second argument to `probeStream`:```js
// probe only 1024 bytes
const { result } = await mediaplex.probeStream(stream, 1024)// probe 5 MB
const { result } = await mediaplex.probeStream(stream, 5 * 1024 * 1024)
```## Opus Encoder
Mediaplex also includes an Opus encoder/decoder, which can be used as a drop-in replacement for [`@discordjs/opus`](https://github.com/discordjs/opus). Here's an example on how to use it:
```js
const { OpusEncoder, getOpusVersion } = require('mediaplex')console.log(getOpusVersion()) // libopus xxx
const encoder = new OpusEncoder(48000, 2)
const encoded = encoder.encode(buffer)
const decoded = encoder.decode(encoded)
```You can use `OpusEncoder` to encode pcm data to opus and decode opus data to pcm format. Stream interface is provided by [@discord-player/opus](https://npm.im/@discord-player/opus) package.