handbrake.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const hbjs = require('handbrake-js');
  2. const path = require('path');
  3. const settings = require('../data/settings.json'); // get the settings
  4. const { log } = require('./utils');
  5. // spawn a handbrake
  6. const process = (input, output, preset) => {
  7. return new Promise((resolve, reject) => {
  8. const inputName = path.basename(input);
  9. const outputName = path.basename(output);
  10. hbjs
  11. .spawn({
  12. input: input,
  13. output: output,
  14. preset: preset,
  15. })
  16. .on('start', err => {
  17. log(` -> "${outputName}" [starting] (${new Date()} with "${preset}")`);
  18. })
  19. .on('error', err => {
  20. log(` -> "${outputName}" [errored] (${new Date()}: ${err.message || err})\n`);
  21. //if (settings.queue.deleteOnFail)
  22. reject(err);
  23. })
  24. .on('progress', progress => {
  25. log(` -> "${outputName}" [transcoding] (${progress.percentComplete}%, ETA: ${progress.eta})`);
  26. })
  27. .on('cancelled', () => {
  28. log(` -> "${outputName}" [cancelled] (${new Date()})\n`);
  29. reject(new Error(`Processing "${outputName}" cancelled`));
  30. })
  31. .on('complete', () => {
  32. log(` -> "${outputName}" [completed] (${new Date()} with "${preset}")\n`);
  33. resolve(true);
  34. });
  35. });
  36. };
  37. module.exports = {
  38. process,
  39. };