Facebook Graph API - Getting error 2207026 when trying to upload video

Viewed 26

I try to upload a video via the graph API but as the title states, I get an error that states that I use an unsupported video format.

I thought maybe the original video file doesn't match the video specifications as defined on https://developers.facebook.com/docs/instagram-api/reference/ig-user/media#video-specifications so I wrote a function to convert the file to match the specification, using ffmpeg with the following command (I tried many different ones, but this is the last one I tried)

ffmpeg -i ${tmpInFile} -vf format=yuv420p -vf scale=-2:720 -pix_fmt yuv420p -r 30 -movflags +faststart -c:v libx264 -b:v 3M -c:a aac -b:a 128k -ac 2 -ar 44100 -shortest -f mp4 ${tmpOutFile}

Unfortunately, the error persists.

Here's the complete process:

First I use await fetch('/api/convert-mp4', { method: 'POST', body: file }); to send the uploaded video file to the backend.

Next I get the blob data from the request with const blob = await request.blob();.

Then I create a temporary file with await fs.writeFile(tmpInFile, await blob.stream()).

Then I call ffmpeg with the above command mentioned above and then read the file with const buffer = await fs.readFile(tmpOutFile);.

Then I send the buffer as response body back to the client with return {status: 200,body: buffer}.

Then I get the blob data from the response with const blob = await convertVideoResponse.blob();.

Finally I convert it back into a file object with const convertedFile = new File([blob], file.name, { type: 'video/mp4' });

This file I upload to Supabase Storage (https://supabase.com/storage), and get a publicly accessible url (which I confirmed by opening it in an incognito tab).

In the supabase dashboard I can see the video file has the correct media container (video/mp4) and the file size is small enough.

Does anyone have an idea what could be the issue?

Edit:

By changing the ffmpeg command to use h265 instead of h254 ffmpeg -i ${tmpInFile} -vf format=yuv420p -vf scale=-2:1350 -pix_fmt yuv420p -r 30 -movflags +faststart -c:v libx265 -vtag hvc1 -an -x265-params crf=25 -b:v 3M -c:a copy -c:a aac -b:a 128k -ac 2 -ar 44100 -shortest -f mp4 ${tmpOutFile} I managed to get it to work for some videos but not all, which confuses me, as I assumed that the video attributes should be the same for all videos processed by the same command.

0 Answers
Related