Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/legraphista/ffmpeg-progress-wrapper
A simple wrapper that helps determinng the progress of the ffmpeg conversion and other info
https://github.com/legraphista/ffmpeg-progress-wrapper
Last synced: 12 days ago
JSON representation
A simple wrapper that helps determinng the progress of the ffmpeg conversion and other info
- Host: GitHub
- URL: https://github.com/legraphista/ffmpeg-progress-wrapper
- Owner: legraphista
- License: mit
- Created: 2016-05-07T20:42:27.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-08-07T09:02:47.000Z (over 4 years ago)
- Last Synced: 2024-10-19T09:05:12.475Z (23 days ago)
- Language: TypeScript
- Homepage:
- Size: 72.3 KB
- Stars: 16
- Watchers: 5
- Forks: 7
- Open Issues: 4
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# FFMPEG Progress Wrapper
_Wraps your ffmpeg raw command line with a nice progress interface_
___### Installation
`$ npm install ffmpeg-progress-wrapper`
`$ yarn ffmpeg-progress-wrapper`### Use cases
- Provides a progress status for your video without you having to guess the frame count
- Provides duration and bitrate of the file___
### Usage
#### Constructor
```typescript
import {FFMpegProgress} from 'ffmpeg-progress-wrapper';
new FFMpegProgress(args, options);
```- args: `string[]` - List of string arguments
- options?: `object` - optional
- cmd?: `string` - path to ffmpeg (defaults to ffmpeg from PATH)
- cwd?: `string` - working dir (defaults to current working dir)
- env?: `ProcessEnv` - environment vars (defaults to process.env)
- duration?: `number` - output duration in seconds (default is determined from file)
useful when using complex filters and the input time differs from output
- hideFFConfig?: `boolean` - hide ffmpeg config from stderr (default false)
- maxMemory?:` number` - max amount of bytes allowed by the process to use before killing for OOM (default unset)
#### `FFMpegProgress.on('progress')`
- progressData: `object`
- eta: `number | null` - time left to process in seconds
- speed: `number | null` - processed output time / real time (2x - twice realtime, 0.5x - half realtime)
- fps: `number | null`
- time: `number | null` - current output time in seconds
- frame: `number | null` - current output frame
- progress: `number | null` - progress percentage (from 0 to 1)
- drop: `number` - dropped frames
- dup: `number` - duplicated frames
- quality: `number[][]` - stream quality per frame, per stream
- psnr: `{ y: number | null, u: number | null, v: number | null, all: number | null }[][]` - stream psnr per file, per stream, per channel (enabled via `-psnr` ffmpeg arg)
- size: `number | null` - output file size
- bitrate: `number | null` - output file bitrate in bytes
#### `FFMpegProgress.on('raw')` - Fires whenever ffmpeg outputs text - very volatile
- raw: `string`
#### `FFMpegProgress.on('details')` - Fires once per command, at the beginning
- details: `object`
- duration: `number` - video duration in seconds
- bitrate: `number` - video bitrate in bytes
- start: `number` - video\'s first frame time in seconds
___
### Example```javascript
const {FFMpegProgress} = require('ffmpeg-progress-wrapper');
// or
import {FFMpegProgress} from 'ffmpeg-progress-wrapper';(async () => {
const process = new FFMpegProgress(['-i', 'test.mov' ,'test output.mp4']);
process.on('raw', console.log);
process.once('details', (details) => console.log(JSON.stringify(details)));
process.on('progress', (progress) => console.log(JSON.stringify(progress)));
process.once('end', console.log.bind(console, 'Conversion finished and exited with code'));
process.done(console.log);
await process.onDone();})();
/**
{
duration: 216,
bitrate: 36864,
start: 0,
resolution: { width: 320, height: 240 },
fps: 25
}
{
drop: 0,
dup: 0,
frame: 1366,
time: 52.480078,
speed: 105,
fps: 0,
eta: 1.5573325904761905,
progress: 0.24296332407407406,
quality: [ [ 28 ] ],
psnr: [ [ { y: NaN, u: NaN, v: NaN, all: NaN } ] ],
size: 36,
bitrate: 0
}
{
drop: 0,
dup: 0,
frame: 2700,
time: 105.840078,
speed: 106,
fps: 2696.44,
eta: 1.0392445471698113,
progress: 0.4900003611111111,
quality: [ [ 28 ] ],
psnr: [ [ { y: NaN, u: NaN, v: NaN, all: NaN } ] ],
size: 262180,
bitrate: 20275.2
}
{
drop: 0,
dup: 0,
frame: 4138,
time: 163.360078,
speed: 109,
fps: 2756.01,
eta: 0.4829350642201836,
progress: 0.7562966574074074,
quality: [ [ 28 ] ],
psnr: [ [ { y: NaN, u: NaN, v: NaN, all: NaN } ] ],
size: 524324,
bitrate: 26316.8
}
{
drop: 0,
dup: 0,
frame: 5423,
time: 216.800078,
speed: 110,
fps: 2747.61,
eta: 0,
progress: 1.0037040648148148,
quality: [ [ -1 ] ],
psnr: [ [ { y: Infinity, u: Infinity, v: Infinity, all: Infinity } ] ],
size: 977469,
bitrate: 36966.4
}
Conversion finished and exited with code 0 null
*/
```