Выполнение дочернего процесса в электронном упаковщике

#javascript #encoding #electron #child-process #electron-packager

Вопрос:

Я исполняю ffmpeg.exe обработайте из приложения Electron через модуль Node child_process, чтобы получить некоторую информацию.

 // preload.js
const child_process = require("child_process");
const FFMPEG_PATH = require("path").join(__dirname, "ffmpeg/ffmpeg.exe");

child_process.exec(`${FFMPEG_PATH} -list_devices 1 -f dshow -i dummy`, (error, stdout, stderr) => {
    console.log(stderr);
});
 

Все работает нормально, когда я запускаю приложение с помощью electron . команды.

Вывод на консоль:

 ffmpeg version N-102545-g59032494e8 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10-win32 (GCC) 20210408
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-shared --disable-static --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp
  libavutil      57.  0.100 / 57.  0.100
  libavcodec     59.  1.100 / 59.  1.100
  libavformat    59.  2.100 / 59.  2.100
  libavdevice    59.  0.100 / 59.  0.100
  libavfilter     8.  0.101 /  8.  0.101
  libswscale      6.  0.100 /  6.  0.100
  libswresample   4.  0.100 /  4.  0.100
  libpostproc    56.  0.100 / 56.  0.100
...
 

Но у меня есть иероглифы, если я создаю пакет с помощью электронного упаковщика.

команда электронного упаковщика: electron-packager . --overwrite --platform=win32 --arch=ia32 --out=out

Вывод консоли из файла .exe:

 �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.
 

Комментарии:

1. А как насчет электронной кузницы? Мне кажется, что все запуталось после процесса упаковки.

2. С электронной кузницей проблем нет.

Ответ №1:

Я не решил проблему с электронным пакетом, но нашел способ избежать ее.

  1. Вместо этого используйте метод child_process#spawn

Код:

 // preload.js
const child_process = require("child_process");
const FFMPEG_PATH = require("path").join(__dirname, "ffmpeg/ffmpeg.exe");

const child = child_process.spawn(FFMPEG_PATH, ["-list_devices", "1", "-f", "dshow", "-i", "dummy"]);

child.stderr.on("data", (data) => {
    console.log(data.toString());
});
 
  1. Импорт электронного приложения в Электронную кузницу