const fileData = req.file.buffer;
// Сжатие видео
const compressedData = await new Promise((resolve, reject) => {
ffmpeg(fileData)
.size('500x500') // Установка размера
.outputOptions(['-movflags', 'faststart', '-pix_fmt', 'yuv420p']) // Дополнительные параметры
.outputFormat('mp4') // Установка формата
.on('error', (err) => reject(err))
.on('end', () => resolve(buffer))
.toFormat('mp4') // Формат сжатого видео
.save(`./temp/video-${Date.now()}.mp4`); // Сохраняем файл на сервере
});
Мне нужно сжать видео, получаемое из буфера и сохранить его на сервере.
Но выдает такую ошибку, говоря о том, что file должен быть строкой а не объектом, я так полагаю таким методом через ffmpeg сжать нельзя?
TypeError [ERR_INVALID_ARG_TYPE]: The "file" argument must be of type string. Received an instance of Object
Может там путь к файлу надо указать
Где именно?) Пробовал и так // Получение буфера видео const fileData = req.file.buffer; const filePath = `./temp/video-${Date.now()}.mp4`; fs.writeFileSync(filePath, fileData); // Сжатие видео const compressedData = await new Promise((resolve, reject) => { ffmpeg(filePath) .size('500x500') // Установка размера .outputOptions(['-movflags', 'faststart', '-pix_fmt', 'yuv420p']) // Дополнительные параметры .outputFormat('mp4') // Установка формата .on('error', (err) => reject(err)) .on('end', () => resolve(buffer)) .toFormat('mp4') // Формат сжатого видео .save(`./temp/video-${Date.now()}.mp4`); // Сохраняем файл на сервере }); То-есть видосик сохраняется в .temp но далее опять ошибка в консоли TypeError [ERR_INVALID_ARG_TYPE]: The "file" argument must be of type string. Received an instance of Object
Output options возможно строкой должны быть?
Тоже не канает, можно вообще удалить outputOptions - ошибка та же)
Странно. Вообще, как вариант - ffmpeg установить на сервер или комп и через js выполнять команды из терминала. У меня там всё раьотало
А есть еще какие-нибудь библиотеки для подобных целей? Не знаешь случайно?) А то третий день с этой голову ломаю)
Для выполнения команд терминала не нужно библиотек, есть модули ноды для этого. Нужно только ffmpeg установить на машину
https://stackabuse.com/executing-shell-commands-with-node-js/
Обсуждают сегодня