Использование Fluent-FFmpeg для подтверждения файла и преобразования без файловой системы в Express - PullRequest
0 голосов
/ 28 апреля 2019

Я использую Multer в качестве промежуточного программного обеспечения для передачи файлового буфера в мой контроллер в Express. Я могу легко конвертировать буфер в читаемый поток, используя Streamifier, а затем конвертировать. Например:

ffmpeg()
   .input(streamifier.createReadStream(req.file.buffer))
   .format('mp3')
   .audioCodec('libmp3lame')
   .audioQuality(0)
   ///etc.....

Моя проблема в том, что я хотел бы подтвердить метаданные файла перед преобразованием.

ffmpeg()
   .input(streamifier.createReadStream(req.file.buffer))
   .ffprobe((err, data) => {

Проблема 1: Некоторые аспекты мета не могут быть захвачены из потока. Самое главное, data.format.duration.

Задача 2: Из документации fluent-ffmpeg:
"Предупреждение: ffprobe может вызываться с входным потоком, но в этом случае он будет использовать данные из потока, и эти данные больше не будут доступны для ffmpeg. Использование ffprobe и команды транскодирования в одном входном потоке скорее всего, потерпит неудачу, если поток не является живым потоком. Делайте это, только если вы знаете, что делаете. "

Я хотел бы сохранить свою архитектуру без сохранения состояния (не используя файловую систему), и, во-вторых, я хотел бы выполнить этот процесс достаточно эффективно. Кто-нибудь делал это с пакетами с открытым исходным кодом npm раньше, какие-либо рекомендации?

Заранее спасибо!

...