Не удается прочитать свойство isStream из неопределенного с помощью fluent-ffmpeg - PullRequest
0 голосов
/ 03 мая 2020

У меня есть эти строки кода

s3.getObject(getParams, function (err, response) {
        ffmpeg(response.Body)
            .size('640x360')
            .videoFilter({ filter: 'scale', options: [640, -1] })
            // .seekInput('3:00')
            .duration('0:08')
            .format('mp4')
            .on('error', function (err) {
                console.error(err, 'invalid ffmpeg conversion')
            })
            .on('start', function (start) {
                console.log(start, 'starting');
            })
            .on('progress', function (any) {
                console.log(any, 'progress')
            })
            .on('end', function () {
                s3.putObject({
                    Bucket: S3_CREDENTIALS.bucketName,
                    Key: newKey,
                    Body: fs.readSync(newKey),
                    ContentType: response.ContentType
                }, function (err, data) {
                    fs.unlinkSync(newKey)
                    if (err) {
                        res.json('ko')
                    } else {
                        res.json('ok')
                    }
                });
            })
            .output(fs.createWriteStream(newKey))
            .run()
    })

Причина, по которой я создаю файл, заключается в том, что я не могу передать поток данных fluent-ffmpeg в тело потока putObject. Конечно, если есть способ избежать создания локального файла (а затем удалить его), лучше

Я получаю ошибку fluent-ffmpeg, говорящую Error [TypeError]: Cannot read property 'isStream' of undefined

Любая помощь оценили.

1 Ответ

0 голосов
/ 03 мая 2020

этот код на самом деле работает. лучшее решение приветствуется.

const newKey = "preview_" + req.params.key
    const source = s3.getSignedUrl('getObject',getParams)
    ffmpeg({source})
        .size('640x360')
        .videoFilter({ filter: 'scale', options: [640, -1] })
        // .seekInput('3:00')
        .duration('0:08')
        .format('mp4')
        .on('end', function () {
            s3.putObject({
                Bucket: S3_CREDENTIALS.bucketName,
                Key: newKey,
                Body: fs.readFileSync(newKey),
                ContentType: 'video/mp4'
            }, function (err, data) {
                fs.unlinkSync(newKey)
                if (err) {
                    res.json('ko')
                } else {
                    res.json('ok')
                }
            });
        })
        .outputOptions([
            '-movflags frag_keyframe+empty_moov',
            '-movflags +faststart'
        ])
        .toFormat('mp4')
        .save(newKey)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...