Основная проблема в том, что в этом случае вы не можете использовать H.264 внутри GIF-файла, поэтому вам нужно удалить строку outputOptions
(которая пытается скопировать видео H.264 непосредственно в GIF ), чтобы FFmpeg перекодировал входное видео.
Однако преобразование размера видео и частоты кадров AS-IS в GIF-анимацию не всегда целесообразно, поэтому я рекомендовал бы добавить новую опцию (см., Например, этот ответ для получения дополнительных примеров и варианты) для учета этого.
Позволяет немного изменить код для начала; давайте заменим параметры вывода для этого случая:
var ffmpeg = require("fluent-ffmpeg");
var inFilename = "/home/pi/Videos/video.mp4";
var outFilename = "/home/pi/Videos/video.gif";
ffmpeg(inFilename)
.outputOption("-vf", "scale=320:-1:flags=lanczos,fps=15")
.save(outFilename);
Параметры здесь такие же, как при запуске FFmpeg напрямую:
ffmpeg -i inputfile.h264 -vf scale=320:-1:flags=lanczos,fps=15 outputfile.gif
Параметры:
scale=320:-1
будет масштабироваться до ширины 320 пикселей. -1 будет использовать высоту, пропорциональную ширине. Вы можете перевернуть их, чтобы использовать высоту как абсолютный размер.
flags=lanczos
- алгоритм, используемый для повторной выборки изображения. Lanczos обеспечивает хорошее качество образца
fps=15
означает, что GIF будет работать со скоростью около 15 кадров в секунду (FPS).