React-Native 使用 expo-av IOS 录制的 mp4 文件形式数据调用 openai 的音频转录,表示文件格式无效

2023-12-19

我整晚都在做这个,我试图使用 expo-av(通过 iPhone 记录语音)在我的 iPhone 上通过 expo 录制自己的声音,并使用 Whisper-1 模型将其上传到 openai 的转录端点。

该文件保存为mp4,我将其转换为base64字符串,我已确认base64内容实际上是mp4:

Base64 转文件工具

上传和检查文件工具

这是反应本机代码:

  const recordingOptions = {
    android: {
      extension: ".mp4",
      outputFormat: Audio.AndroidOutputFormat.MPEG_4,
      audioEncoder: Audio.AndroidAudioEncoder.AAC,
      sampleRate: 44100,
      numberOfChannels: 2,
      bitRate: 128000,
    },
    ios: {
      extension: ".mp4",
      // outputFormat: Audio.IOSOutputFormat.MPEG4AAC,
      audioQuality: Audio.IOSAudioQuality.HIGH,
      sampleRate: 44100,
      numberOfChannels: 2,
      bitRate: 128000,
    },
    web: {
      mimeType: "audio/mp4",
      bitsPerSecond: 128000 * 8,
    },
  };

实际执行:

const recordingUri = recording.getURI();
      const recordingBase64 = await ExpoFileSystem.readAsStringAsync(
        recordingUri,
        {
          encoding: ExpoFileSystem.EncodingType.Base64,
        }
      );
      const languageCode = "en"; // English
      console.log(languageCode);
      console.log(recordingBase64)

      const buffer = Buffer.from(recordingBase64, "base64")
      const blob= new Blob([buffer], { type:'audio/mp4' })
      const file = new File([blob],'test.mp4', {type:'audio/mp4'})



      const formData = new FormData();
      formData.append('file',file);
      formData.append("model", "whisper-1");

      const apiUrl = "https://api.openai.com/v1/audio/transcriptions";

      const requestOptions = {
        method: "POST",
        headers: {
          Authorization: `Bearer ${OPENAI_API_KEY}`,
        },
        body: formData,
      };

      fetch(apiUrl, requestOptions)
        .then((response) => response.json())
        .then((data) => console.log(data))
        .catch((error) => console.log(error));

每次的响应都是:

{"error": {"code": null, "message": "Invalid file format. Supported formats: ['m4a', 'mp3', 'webm', 'mp4', 'mpga', 'wav', 'mpeg']", "param": null, "type": "invalid_request_error"}}

有谁知道我做错了什么?


尝试添加一个filename to the formData.append。与此类似的东西:

formData.append('file', file, 'input.mp4');

Whisper 不应该依赖扩展,但看起来确实如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React-Native 使用 expo-av IOS 录制的 mp4 文件形式数据调用 openai 的音频转录,表示文件格式无效 的相关文章

随机推荐