Есть ли способ работы с библиотекой fluent-ffmpeg для кодирования звука (от webm до wav / mp3) в Angular 2+? - PullRequest
0 голосов
/ 24 апреля 2019

Так что я использую медиаобъекты браузера для записи звука, используя микрофон для транскрипции речи в текст.Записанный носитель дает мне блоб / файл в формате webm .Я хочу преобразовать блоб / файл в формат wav или mp3 , который будет отправлен в хранилище AWS S3, откуда я собираюсь использовать сервис AWS Transcribe (Speech to Text) для выборавверх по файлу и представить стенограмму речи.AWS Transcribe не поддерживает формат webm , из-за которого мне нужно кодировать аудио на стороне клиента в wav или mp3 .Я пытаюсь использовать для этого библиотеку fluent-ffmpeg (сторонняя) [https://www.npmjs.com/package/fluent-ffmpeg] npm, но я продолжаю получать следующую ошибку в компиляторе Typescript при сборке с использованием н г .Я уже пробовал использовать библиотеки RecorderJS и WebAudioRecoderJS npm, и я получаю ту же ошибку «Модуль не найден».-

ERROR in ./node_modules/fluent-ffmpeg/index.js
Module not found: Error: Can't resolve './lib-cov/fluent-ffmpeg' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg'
ERROR in ./node_modules/fluent-ffmpeg/lib/ffprobe.js
Module not found: Error: Can't resolve 'child_process' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/processor.js
Module not found: Error: Can't resolve 'child_process' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/utils.js
Module not found: Error: Can't resolve 'child_process' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/recipes.js
Module not found: Error: Can't resolve 'fs' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/capabilities.js
Module not found: Error: Can't resolve 'fs' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/processor.js
Module not found: Error: Can't resolve 'fs' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/isexe/index.js
Module not found: Error: Can't resolve 'fs' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\isexe'
ERROR in ./node_modules/isexe/windows.js
Module not found: Error: Can't resolve 'fs' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\isexe'
ERROR in ./node_modules/isexe/mode.js
Module not found: Error: Can't resolve 'fs' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\isexe'
ERROR in ./node_modules/fluent-ffmpeg/lib/utils.js
Module not found: Error: Can't resolve 'os' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/recipes.js
Module not found: Error: Can't resolve 'path' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/fluent-ffmpeg.js
Module not found: Error: Can't resolve 'path' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/capabilities.js
Module not found: Error: Can't resolve 'path' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/processor.js
Module not found: Error: Can't resolve 'path' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
ERROR in ./node_modules/fluent-ffmpeg/lib/options/misc.js
Module not found: Error: Can't resolve 'path' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib\options'
ERROR in ./node_modules/which/which.js
Module not found: Error: Can't resolve 'path' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\which'
ERROR in ./node_modules/fluent-ffmpeg/lib/recipes.js
Module not found: Error: Can't resolve 'stream' in 'C:\Users\banshuman\Desktop\AWS-Transcribe-Angular\aws-transcribe-angular\node_modules\fluent-ffmpeg\lib'
i 「wdm」: Failed to compile.

Я использую Angular 7.2.0 и TypeScript 3.2.4.Я также установил определения типов для fluent-ffmpeg [https://www.npmjs.com/package/@types/fluent-ffmpeg] внутри node_modules, чтобы указать типизации для TypeScript.Ниже приведен файл угловых компонентов, в котором я реализовал функцию записи звука в браузере -

/// <reference types="@types/dom-mediacapture-record" />
import { Component } from '@angular/core';
import * as aws from 'aws-sdk';
import * as TranscribeService from 'aws-sdk/clients/transcribeservice';
import * as Ffmpeg from 'fluent-ffmpeg';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  speechToText() {

    console.log(Ffmpeg);     

    // Begin streaming audio
    navigator.mediaDevices.getUserMedia({ audio: true })
      .then(stream => {
        const mediaRecorder = new MediaRecorder(stream);
        // Start recording audio
        mediaRecorder.start();

        const audioChunks = [];
        // When recording starts
        mediaRecorder.addEventListener("dataavailable", event => {
          audioChunks.push((<any>event).data);
        });


        // When recording stops
        mediaRecorder.addEventListener("stop", () => {
          const audioBlob = new Blob(audioChunks, { type: 'audio/webm;codecs=opus' });
          const audioFile = new File([audioBlob], 'outputAudioFile');
          const audioUrl = URL.createObjectURL(audioBlob);

Я не публикую весь код компонента, поскольку остальная часть является частью AWS SDK и не имеет отношения кпостановка задачи.Мне нужно преобразовать audioBlob или audioFile , которые в настоящее время имеют формат webm , в wav или mp3 для загрузки в сервисы AWS.Как я могу добиться этого в Angular с помощью библиотеки ffmpeg?Я открыт и для других решений, а не только для ffmpeg, чтобы выполнить работу на стороне клиента.

...