Я написал эту облачную функцию, которая транскодирует файл MOV в MP4, но после запуска функции я вижу только сохраненное видео размером 1,3 КБ или около того, но все работает гладко, не зная, что происходит. Я не вижу никаких ошибок, генерируемых в консоли, но я уверен, что я делаю что-то не так в коде, ниже приведена функция:
const storage = require('@google-cloud/storage')();
const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path;
const ffmpeg = require('fluent-ffmpeg');
ffmpeg.setFfmpegPath(ffmpegPath);
exports.vsTranscodeVideo = (req, res) => {
const fileName = req.body.filename;
const userBucket = storage.bucket(req.body.vsuserbucket);
const uploadBucket = storage.bucket(req.body.vstempbucket);
const remoteWriteStream = userBucket.file(fileName.replace('.mov', '.mp4'))
.createWriteStream({
metadata: {
contentLanguage: 'en',
contentType: 'video/mp4'
}
});
const remoteReadStream = uploadBucket.file(fileName).createReadStream();
// Transcode
ffmpeg()
.input(remoteReadStream)
.outputOptions('-c:v copy') // Change these options to whatever suits your needs
.outputOptions('-c:a aac')
.outputOptions('-b:a 160k')
.outputOptions('-f mp4')
.outputOptions('-preset fast')
.outputOptions('-movflags frag_keyframe+empty_moov')
.outputFormat('mp4')
//https://github.com/fluent-ffmpeg/node-fluent-ffmpeg/issues/346#issuecomment-67299526 // end: true, emit end event when readable stream ends
.on('start', (cmdLine) => {
console.log('Started ffmpeg with command:', cmdLine);
})
.on('end', () => {
//uploadBucket.file(fileName).delete();
console.log('Successfully re-encoded video.');
res.status(200).send("success");
})
.on('error', (err, stdout, stderr) => {
console.error('stdout:', stdout);
console.error('stderr:', stderr);
res.status(200).send(err.message);
})
.pipe(remoteWriteStream, { end: true });
};
Есть ли что-то, что я делаю неправильно? Любая помощь высоко ценится. Спасибо