Init commit
This commit is contained in:
6
src/constants/defaultArgs.js
Executable file
6
src/constants/defaultArgs.js
Executable file
@@ -0,0 +1,6 @@
|
||||
module.exports = [
|
||||
'./ffmpeg', // args[0] is always binary path
|
||||
'-nostdin', // Disable interaction mode
|
||||
'-loglevel',
|
||||
'quiet',
|
||||
];
|
||||
7
src/index.js
Executable file
7
src/index.js
Executable file
@@ -0,0 +1,7 @@
|
||||
const load = require('./load');
|
||||
const transcode = require('./transcode');
|
||||
|
||||
module.exports = {
|
||||
load,
|
||||
transcode,
|
||||
};
|
||||
12
src/load.js
Executable file
12
src/load.js
Executable file
@@ -0,0 +1,12 @@
|
||||
const { setModule } = require('./util/module');
|
||||
const FFmpegCore = require('@ffmpeg/core');
|
||||
|
||||
module.exports = () => (
|
||||
new Promise((resolve, reject) => {
|
||||
FFmpegCore()
|
||||
.then((Module) => {
|
||||
setModule(Module);
|
||||
resolve();
|
||||
});
|
||||
})
|
||||
);
|
||||
17
src/transcode.js
Executable file
17
src/transcode.js
Executable file
@@ -0,0 +1,17 @@
|
||||
const fs = require('fs');
|
||||
const { getModule } = require('./util/module');
|
||||
const getFFmpeg = require('./util/getFFmpeg');
|
||||
const strList2ptr = require('./util/strList2ptr');
|
||||
const defaultArgs = require('./constants/defaultArgs');
|
||||
|
||||
module.exports = (inputPath, outputExt, options='') => {
|
||||
const Module = getModule();
|
||||
const data = new Uint8Array(fs.readFileSync(inputPath));
|
||||
const iPath = `file.${inputPath.split('.').pop()}`;
|
||||
const oPath = `file.${outputExt}`;
|
||||
const ffmpeg = getFFmpeg();
|
||||
const args = [...defaultArgs, ...`${options} -i ${iPath} ${oPath}`.trim().split(' ')];
|
||||
Module.FS.writeFile(iPath, data);
|
||||
ffmpeg(args.length, strList2ptr(args));
|
||||
return Buffer.from(Module.FS.readFile(oPath));
|
||||
};
|
||||
6
src/util/getFFmpeg.js
Executable file
6
src/util/getFFmpeg.js
Executable file
@@ -0,0 +1,6 @@
|
||||
const { getModule } = require('./module');
|
||||
|
||||
module.exports = () => {
|
||||
const Module = getModule();
|
||||
return Module.cwrap('ffmpeg', 'number', ['number', 'number']);
|
||||
};
|
||||
7
src/util/module.js
Executable file
7
src/util/module.js
Executable file
@@ -0,0 +1,7 @@
|
||||
let Module = null;
|
||||
|
||||
exports.setModule = m => {
|
||||
Module = m;
|
||||
};
|
||||
|
||||
exports.getModule = () => Module;
|
||||
11
src/util/str2ptr.js
Executable file
11
src/util/str2ptr.js
Executable file
@@ -0,0 +1,11 @@
|
||||
const { getModule } = require('./module');
|
||||
|
||||
module.exports = (s) => {
|
||||
const Module = getModule();
|
||||
const ptr = Module._malloc((s.length+1)*Uint8Array.BYTES_PER_ELEMENT);
|
||||
for (let i = 0; i < s.length; i++) {
|
||||
Module.setValue(ptr+i, s.charCodeAt(i), 'i8');
|
||||
}
|
||||
Module.setValue(ptr+s.length, 0, 'i8');
|
||||
return ptr;
|
||||
};
|
||||
14
src/util/strList2ptr.js
Executable file
14
src/util/strList2ptr.js
Executable file
@@ -0,0 +1,14 @@
|
||||
const { getModule } = require('./module');
|
||||
const str2ptr = require('./str2ptr');
|
||||
|
||||
module.exports = (strList) => {
|
||||
const Module = getModule();
|
||||
const listPtr = Module._malloc(strList.length*Uint32Array.BYTES_PER_ELEMENT);
|
||||
|
||||
strList.forEach((s, idx) => {
|
||||
const strPtr = str2ptr(s);
|
||||
Module.setValue(listPtr + (4*idx), strPtr, 'i32');
|
||||
});
|
||||
|
||||
return listPtr;
|
||||
};
|
||||
Reference in New Issue
Block a user