170 похожих чатов

Есть вот такой код // Получение буфера видео

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

8 ответов

18 просмотров

Может там путь к файлу надо указать

Andrey-Ponomarenko Автор вопроса
Romas Bitinas
Может там путь к файлу надо указать

Где именно?) Пробовал и так // Получение буфера видео 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

Andrey-Ponomarenko Автор вопроса
Romas Bitinas
Output options возможно строкой должны быть?

Тоже не канает, можно вообще удалить outputOptions - ошибка та же)

Andrey Ponomarenko
Тоже не канает, можно вообще удалить outputOptions...

Странно. Вообще, как вариант - ffmpeg установить на сервер или комп и через js выполнять команды из терминала. У меня там всё раьотало

Andrey-Ponomarenko Автор вопроса
Romas Bitinas
Странно. Вообще, как вариант - ffmpeg установить н...

А есть еще какие-нибудь библиотеки для подобных целей? Не знаешь случайно?) А то третий день с этой голову ломаю)

Andrey Ponomarenko
А есть еще какие-нибудь библиотеки для подобных це...

Для выполнения команд терминала не нужно библиотек, есть модули ноды для этого. Нужно только ffmpeg установить на машину

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта