nodejs ffmpeg получает видео буфер, обрезает его и возвращает буфер - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть сервер и я хочу получить загруженное видео, затем обрезать его и завершить sh загрузить его на aws s3

, поэтому сначала я получаю свой буфер от multer, затем я Я преобразовываю его в поток и передаю его в ffmpeg (не могу найти, как напрямую передать буфер в ffmpeg) и в fini sh Я возвращаю буфер, чтобы затем загрузить его.

const ffmpeg = require('fluent-ffmpeg');
const streams = require('memory-streams');

    cropVideo(buffer, width, height, x, y) {

        const stream = new streams.WritableStream();

        return new Promise((resolve, reject) => {
            ffmpeg(new streams.ReadableStream(buffer))
                .videoFilters(`crop=${width}:${height}:${x}:${y}`)
                .format('mp4')
                .on('progress', function (progress) {
                    console.log('Processing: ' + progress.percent + '% done');
                })
                .on('stderr', function(stderrLine) {
                    console.log('Stderr output: ' + stderrLine);
                })
                .on('error', err => console.log(err))
                .on('end', () => resolve(stream.toBuffer()))
                .pipe(stream)
        })
    }

Но это не работает по плану: D

Единственный выход, который у меня есть, это .on('stderr')

Stderr output: ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers
Stderr output:   built with Apple LLVM version 9.0.0 (clang-900.0.37)
Stderr output:   configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma
Stderr output:   libavutil      55. 78.100 / 55. 78.100
Stderr output:   libavcodec     57.107.100 / 57.107.100
Stderr output:   libavformat    57. 83.100 / 57. 83.100
Stderr output:   libavdevice    57. 10.100 / 57. 10.100
Stderr output:   libavfilter     6.107.100 /  6.107.100
Stderr output:   libavresample   3.  7.  0 /  3.  7.  0
Stderr output:   libswscale      4.  8.100 /  4.  8.100
Stderr output:   libswresample   2.  9.100 /  2.  9.100
Stderr output:   libpostproc    54.  7.100 / 54.  7.100

Я не совсем понимаю ошибку

...