ffmpegwasm / ffmpegwasm/ffmpeg.wasm

ffprobe.wasm

未关闭
#121 18 条评论 30 个 reaction 已指派 0 人 在 GitHub 查看
enhancement
主要语言
C
星标
17.8k
派生
1.1k
PR 合并指标
30 天内没有已合并 PR

描述

**Is your feature request related to a problem? Please describe.**
Implement `ffprobe` wasm version.

**Describe the solution you'd like**
`ffprobe` is the necessary companion of `ffmpeg`, needed to analyze media file before processing .

**Describe alternatives you've considered**
In this simple case I'm using the command line `ffprobe` via `execFile` to probe the file

```javascript
probe = function (fpath) {
var self = this;
return new Promise((resolve, reject) => {
var loglevel = self.logger.isDebug() ? 'debug' : 'warning';
const args = [
'-v', 'quiet',
'-loglevel', loglevel,
'-print_format', 'json',
'-show_format',
'-show_streams',
'-i', fpath
];
const opts = {
cwd: self._options.tempDir
};
const cb = (error, stdout) => {
if (error)
return reject(error);
try {
const outputObj = JSON.parse(stdout);
return resolve(outputObj);
} catch (ex) {
self.logger.error("MediaHelper.probe failed %s", ex);
return reject(ex);
}
};
cp.execFile('ffprobe', args, opts, cb)
.on('error', reject);
});
}//probe
```

or in this case to `seek` to position in the media file:

```javascript
seek = function (fpath, seconds) {
var self = this;
return new Promise((resolve, reject) => {
var loglevel = self.logger.isDebug() ? 'debug' : 'panic';
const args = [
'-hide_banner',
'-loglevel', loglevel,
'-show_frames',//Display information about each frame
'-show_entries', 'frame=pkt_pos',// Display only information about byte position
'-of', 'default=noprint_wrappers=1:nokey=1',//Don't want to print the key and the section header and footer
'-read_intervals', seconds + '%+#1', //Read only 1 packet after seeking to position 01:23
'-print_format', 'json',
'-v', 'quiet',
'-i', fpath
];
const opts = {
cwd: self._options.tempDir
};
const cb = (error, stdout) => {
if (error)
return reject(error);
try {
const outputObj = JSON.parse(stdout);
return resolve(outputObj);
} catch (ex) {
self.logger.error("MediaHelper.probe failed %s", ex);
return reject(ex);
}
};
cp.execFile('ffprobe', args, opts, cb)
.on('error', reject);
});
}//seek
```
**Additional context**
Probe media files before processing; seek to media position;

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。