Repository navigation
[Whisper] Audio format errors on valid file #333
Copy link
Copy link
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
Hello
I am trying to integrate the whisper API into my Flask app. However I get the following error when I input the received file from the flask endpoint, I get the following error:
openai.error.InvalidRequestError: Invalid file format. Supported formats: ['m4a', 'mp3', 'webm', 'mp4', 'mpga', 'wav', 'mpeg']
However, loading the file in the interactive console works fine.
In [16]: r = openai.Audio.transcribe('whisper-1',open('../Downloads/sample.mp3','rb'))
In [17]: r
Out[17]:
<OpenAIObject at 0x192993c6750> JSON: {
"text": "This episode is actually a co-production with another podcast called Digital Folklore, which is hosted by Mason Amadeus and Perry Carpenter. We've been doing a lot of our research together and our brainstorming sessions have been so thought-provoking, I wanted to bring them on so we could discuss the genre of analog horror together. So, why don't you guys introduce yourselves so we know who's who? Yeah, this is Perry Carpenter and I'm one of the hosts of Digital Folklore. And I'm Mason Amadeus and I'm the other host of Digital Folklore. And tell me, what is Digital Folklore? Yeah, so Digital Folklore is the evolution of folklore, you know, the way that we typically think about it. And folklore really is the product of basically anything that humans create that doesn't have a centralized canon. But when we talk about digital folklore, we're talking about..."
}
To Reproduce
- Create a Flask App.
- Add an end point that receives an valid audio file.
- pass the bytes data of the file to
openai.Audio.transcribemethod through 'request.files[fileName].stream.read()`.
Code snippets
The end point code:
with tempfile.TemporaryFile() as temp_file:
temp_file.write(audio_file)
transcript_read = openai.Audio.transcribe("whisper-1", temp_file)
return transcript_readthe FFprobe info of the file:
ffprobe version 4.4.1-full_build-www.gyan.dev Copyright (c) 2007-2021 the FFmpeg developers
built with gcc 11.2.0 (Rev1, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libglslang --enable-vulkan --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, mp3, from '.\Downloads\sample.mp3':
Metadata:
title : Monsters in the Static
comment : We look at the subgenre of analog horror, where something sinister might be lurking in the horizontal lines and vertical holds of those old VHS tapes.
lyrics-ENG : <p>In the subgenre of analog horror, there’s something sinister or supernatural lurking in the horizontal lines and vertical holds in those old VHS tapes. Filmmaker <a href="https://wnuf.bigcartel.com/">Chris LaMartina</a> explains why he wanted his mov
album : Imaginary Worlds
genre : Podcast
date : 2020
encoder : Lavf58.76.100
Duration: 00:00:50.05, start: 0.025057, bitrate: 128 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc58.13
OS
Windows 11
Python version
Python v10.5
Library version
0.27.2
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working
Activity
sumeyyeyegen commentedon Mar 24, 2023
were you able to find a solution? i am getting the same error. it works very well in jupyter notebook app. but I keep getting this error in the hugging face application.
muddi900 commentedon Mar 24, 2023
IsaacKnowles commentedon Mar 27, 2023
I've run into this today as well, but with the webm audio format, also using Flask. A web app is recording a brief spoken audio clip with mimeType
'audio/webm;codecs=opus'and when I save a copy of the recorded audio to a file, it is submitted to the API and correctly transcribed without issue. However, if I submit the request via my Flask app, I get the same error as @muddi900.ffprobe info:
OS: Mac 12.6.3
Python version: 3.10.1
openai version: 0.27.2
danielfaust commentedon Mar 28, 2023
I was getting this error on some files, and while looking at them, I noticed that they are lacking a proper mp3 header. My solution was to let them run through
ffmpegonce before uploading them, by using theacodec='copy'parameter so that the actual audio content of the mp3 file does not get modified:and then I'm uploading
_temp.mp3instead ofpath.muddi900 commentedon Mar 28, 2023
sparkle666 commentedon Apr 13, 2023
Also got same error when loading audio files locally.
Changing the response formats to a different string returns errors.
sub = openai.Audio.transcribe("whisper-1", audio2, response_format = "srt")grp06 commentedon Apr 14, 2023
I fought with this for a long time. Finally got it working by not using the
MediaRecorder()API on the frontend. I switched to usingand it worked immediately.
zieen commentedon Apr 21, 2023
amoschoomy commentedon May 1, 2023
any updates on this? the request fails inside an endpoint, but works when on local files
calummackervoy commentedon May 10, 2023
I have a variation on the solution using RecordRTC which was posted above. It shows how to use start/stop, reset the audio channel, send with Ajax request (multi-part form data)
odusseys commentedon Aug 3, 2023
Having the same issue with a mp3 file, written by ffmpeg, lame mp3
cquintero4told commentedon Aug 4, 2023
Try with this code:
ilyak1990 commentedon Sep 2, 2023
For me specifically it was on iPhone, I was saving a valid .wav file (was working when I tested it) then I used a file type detector tool to find out it was actually some other file format that apple was saving it to, you can either convert to and from file types using node library ffmpeg or for iphone specifically save it as a .m4a file instead of .wav
andora2 commentedon Sep 11, 2023
was fighting with similar problems.
Works currently on iPhone 13(iOS 17) with MediaRecorder,
Client:
Server:
For Chrome & co. I go with 'audio/webm' on client and 'audio/mp3' on server.
Don't really expect this to be bulletproof, but for the time being its stable enough for my needs.
BR,
Adrian
thiswillbeyourgithub commentedon Nov 8, 2023
Hi, I think I found a viable workaround. The issue seems to be in the way the BufferReader is reading files. Bypassing the bufferreader fixed it for me.
Can't investigate more because of the outtage unfortunately. Might be related to #727
In this line if instead of
file=buffer_readerI putfile=open(args.file, "rb")the function returns normally instead of 400 error.edit: found a fix and submitted a PR in #733
rattrayalex commentedon Nov 10, 2023
OpenAI audio endpoints generally require a filename with extension be provided in the upload, which is used to determine the file type.
This is made more convenient with the new v1 of the SDK, where you can pass a
pathlib.Pathto the API:Fix parallel_tool_calls when False (openai#333)
revert custom code applied to a generated branch (openai#333)
Use MP3 output format for audio chunks to fix OpenAI compatibility