Загрузить вывод файла ffmpeg в AWS s3, используя NodeJS - PullRequest
0 голосов
/ 10 января 2020

Для ffmpeg.output("path/file.mp4") необходим путь string в качестве аргумента для записи в него выходного файла. Но для s3 bucket.upload(parms, ...) требуется двоичный файл в качестве значения Body: в параметрах JSON

Проблема: Невозможно предоставить данные файла, используя путь к файлу s3 в NodeJS Окружающая среда

FFmpeg()
  .input("source.mp4") //video
  .setStartTime(startTime)
  .setDuration(duration)
  .output(output)    //output file path: string
  .on("end", function() {
    console.log("Processing finished successfully");
    var params = {
      Bucket: process.env.S3_BUCKET,
      Key: "videos/filename.mp4",
      Body: output    //binary file data to be provided not file path
    };
    const bucket = new S3({
      accessKeyId: process.env.S3_ACCESS_KEY_ID,
      secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
      region: process.env.S3_REGION
    });
    bucket.upload(params, function(err, data) {
      console.log(err, data);
    });
  })
  .run();

1 Ответ

0 голосов
/ 29 января 2020

Закончено с использованием fs.readFileSync(), который предоставил мне буфер файлов, который я передал putObject()

import fs = require("fs");

const inputPath = "source.mp4"
const outputPath = "clip.mp4";

FFmpeg()
  .input(inputPath)            //input video path or URL
  .setStartTime(2)
  .setDuration(2)
  .output(outputPath)          //output file path: string
  .on("end", function() {
    console.log("Processing finished successfully");
    const fileContent = fs.readFileSync(outputPath);
    var params = {
      Bucket: process.env.S3_BUCKET,
      Key: "videos/clip.mp4",
      Body: fileContent        //got buffer by reading file path
    };
    const bucket = new S3({
      accessKeyId: process.env.S3_ACCESS_KEY_ID,
      secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
      region: process.env.S3_REGION
    });
    bucket.putObject(params, function(err, data) {
      console.log(err, data);
    });
  })
  .run();
...