FFMPEG를 사용하여 파일을 변환하고 AWS S3 Nodejs에 업로드

codernoob8

안녕하세요, 빠른 질문입니다. 사용자가 WebM 파일을 업로드하고 FFmpeg를 사용하여 mp4로 변환 할 수 있도록하고 싶습니다. 백엔드에 Nodejs를 사용하고 있으며 Amazon S3 파일 스토리지에 파일을 업로드하는 경로가 이미 있습니다. 하지만 내가 그 파일을 보내고 어디에도 저장하지 않고 요청 자체에서 mp4로 변환하고 싶다고 가정 해 보겠습니다. 그렇지 않은 경우 s3 파일 URL을 가져 와서 mp4로 변환 할 수 있습니까? 누구든지 가능한 일과이를 수행하는 가장 좋은 방법에 대해 올바른 방향으로 나를 가리킬 수 있습니까?

기본적으로 제가하고 싶은 것은

const objectUrl = createObjectURL(Blob);
ffmpeg -i objectURL S3OutputLocation

또는

ffmpeg -i myS3InputLocation myS3OutputLocation
codernoob8

좋습니다.이 작업을 수행하려면 몇 가지해야 할 일이 있습니다. 1. s3로 이동하기 전에 파일을 로컬로 업로드해야하므로 multer의 로컬 인스턴스를 설정해야합니다. s3로 직접 시도했지만 파일을 먼저 서버에 쓰는 것보다 훨씬 오래 걸리는 많은 비용과 시간 소모적 인 읽기 작업을 사용하는 것 같습니다. 이것이 최선의 해결책이라는 것을 알았습니다.

다음과 같이합니다.

const localStorage = multer.diskStorage({
  destination: function(req, file, cb) {
    const destination = __dirname + "\\canvas-uploads";
    console.log("destination", destination);
    cb(null, destination);
  },
  filename: function(req, file, cb) {
    const filename = req.body.id + "." + file.mimetype.toString().slice(file.mimetype.toString().lastIndexOf("/") + 1);
    console.log("filename", filename);
    cb(null, filename);
  }
});
  const uploadLocal = multer({
    storage: localStorage
  });
  1. 편의를 위해 ffmpeg-fluent를 설정하고 약속으로 포장하여 모든 처리 (동일한 경로에서 s3 등으로 업로드)가 완료되었는지 확인할 수 있습니다.

다음과 같이합니다.

router.post('/upload-temp', uploadLocal.array("upload"), async(req, res, next) =>{
  res.json({id: req.body.id});
});

router.post('/ffmpeg', async(req, res, next) => {
    try {
    const reqPath = path.join(__dirname, '../upload/canvas-uploads/');
     const {id, type} = req.body;
    const localFileInput = `${reqPath}${id}.webm`;
    const localFileOutput = `${reqPath}${id}.${type}`;
    console.log("localInput", localFileInput);
    console.log("localOutput", localFileOutput);
    const key = `canvas/${id}.${type}`;
    await new Promise((resolve, reject) => {
        ffmpeg().input(localFileInput)
        .withOutputFormat(type)
        .output(localFileOutput)
        .on('end',async ()=> {
            const fileContent = await fs.readFileSync(localFileOutput);
             await fs.unlinkSync(localFileInput);
             await fs.unlinkSync(localFileOutput);
            const params = {
              Bucket: process.env.BUCKET_NAME,
              Key: key,
              Body: fileContent
            }
            await s3.putObject(params).promise();
            resolve();
            }).run();  
    })

    res.send("success")
} catch(error){
    console.log(error);
    res.send(error);
}
});

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

NodeJS를 사용하여 AWS S3에 여러 파일 업로드

Преобразуйте файл с помощью FFMPEG и загрузите в AWS S3 Nodejs

Загрузите вывод файла ffmpeg в AWS s3 с помощью NodeJS

Загрузите вывод файла ffmpeg в AWS s3 с помощью NodeJS

Преобразуйте файл с помощью FFMPEG и загрузите в AWS S3 Nodejs

S3 : 많은 수의 파일을 업로드하는 방법

각도에서 반응 양식을 사용하여 여러 파일 업로드

AWS EMR-올바른 암호화 키를 사용하여 S3에 쓰기

객체에 Windows 호환되지 않는 파일 이름이있는 경우 s3 버킷에서 모든 파일을 다운로드하는 방법

apache-commons-fileupload를 사용하여 Spring에서 파일을 업로드하는 동안 문제가 발생했습니다.

Python을 사용하여 ftp 서버에 특정 형식으로 업로드 된 파일 표시

Как убедиться, что сведения о корзине AWS S3 действительны или не используются Nodejs?

nodeJS AWS S3 загрузка данных неправильная кодировка

Загрузка нескольких файлов в AWS S3 с помощью NodeJS

NodeJs загрузить файл в AWS S3 - поврежденный файл

Ошибка при загрузке нескольких файлов из AWS S3 с помощью Nodejs

Удаление объекта AWS S3, Nodejs

Live Sass 컴파일을 사용하여 scss를 CSS에 연결

문자열이 AWS S3 CSV 파일에 있는지 확인하는 방법

Node js에서 모든 것이 정확하지만 aws s3에서 이미지를 다운로드 할 수 없음

Vec <T>를 반환 유형으로 사용하고 wasm_bindgen을 사용하여 Javascript에서 읽을 수 있도록 만드는 방법

여러 HTML 파일을 반복하고 csv로 변환

빌드 / 릴리스 파이프 라인 작업을 사용하여 AzureDevOps git repo에서 개인 TFS 서버로 변경 사항 업로드

Angular를 사용하여 zip 파일 다운로드

nodejs Express 4에서 단일 입력을 통해 여러 파일을 업로드하는 가장 좋은 방법은 무엇입니까?

XML 파일 업데이트 및 XSLT를 사용하여 태그에 ID 할당

initState를 사용하여 함수에서 값을 가져오고 빌드 전에 변수에 삽입

AWS Opsworks에서 Chef 12를 사용하여 Chef Community Cookbook을 찾지 못함

Julia, Pluto.jl 및 PlutoUI.jl의 FilePicker 요소를 사용하여 업로드 된 CSV 파일을 읽는 방법

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Резервное копирование / восстановление kafka и zookeeper

  3. 3

    Редактировать существующий файл Excel C # npoi

  4. 4

    Ipython использует% store magic для получения динамического имени

  5. 5

    Как получить список индексов всех значений NaN в массиве numpy?

  6. 6

    Почему бы не выдать ошибку ERROR в тесте Jasmine?

  7. 7

    Дженерики и потоки Java

  8. 8

    Как отфильтровать несколько столбцов в Qtableview?

  9. 9

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  10. 10

    Как изменить значок приложения для проекта libgdx android

  11. 11

    Thymeleaf не отображает значения в проекте Spring Boot

  12. 12

    Unity Проверить, включен ли Toggle

  13. 13

    Airflow не распознает мои настройки подключения S3

  14. 14

    Flutter: Unhandled Exception: FileSystemException: Creation failed, path = 'Directory: '' (OS Error: Read-only file system, errno = 30)

  15. 15

    Bogue étrange datetime.utcnow()

  16. 16

    На графике Matplotlib не отображается легенда

  17. 17

    Создание X509Certificate2 из ECC X509Certificate выдает исключение System.NotSupportedException в C #

  18. 18

    Как добавить фреймворк в файл в папке «Источники» Xcode Playground?

  19. 19

    Выполнение команд PowerShell в программе Java

  20. 20

    Статус HTTP 403 - ожидаемый токен CSRF не найден

  21. 21

    Инструмент для вставки данных, собранных в электронной таблице, в документ Word или PDF

популярныйтег

файл