使用Facebook Graph API上传Instagram Reels遇OIL Error,求ffmpeg调整方案
解决Facebook Graph API发布Instagram Reels时的OIL Error问题
我们使用Facebook Graph API向Instagram商业账号发布Reels,无论是通过file_url还是分片上传,部分视频始终返回OIL Error。已核对官方视频规格文档,确认参数无误。通过PHP调用FFmpeg处理视频后问题仍未解决,Graph API返回的错误响应如下:
"status_code": "IN_PROGRESS", "video_status": { "uploading_phase": { "status": "error", "bytes_transferred": 0, "source_file_size": 0, "errors": [ { "code": 1363008, "message": "OIL Error[FILE_NOT_FOUND: 6]: File not found.Caused by exception: facebook_crude_OILException" } ] }, "processing_phase": { "status": "error" } }
尽管做了上述处理,Graph API最初显示uploading_phase状态为completed,但很快变为错误状态,且问题视频每次都会触发该错误。当前使用的FFmpeg命令如下:
ffmpeg -i input.mp4 \ -c:v libx264 \ -preset slow \ -crf 18 \ -profile:v high \ -level:v 4.0 \ -pix_fmt yuv420p \ -vf "scale=1080:1920" \ -r 30 \ -maxrate 15M -bufsize 30M \ -x264opts keyint=60:min-keyint=30:scenecut=0 \ -c:a aac \ -b:a 128k \ -ar 48000 \ -ac 2 \ -movflags +faststart \ output.mp4
参考过FFmpeg适配短视频平台的相关建议后仍未解决问题。我们怀疑问题出在特定视频的元数据或编码设置上,而非PHP代码——因为问题出现得不一致:部分80MB的大视频可成功发布,50MB的小视频却失败。
解决方案:调整FFmpeg参数
针对OIL Error[FILE_NOT_FOUND:6](实际是视频解析兼容性问题,而非真的文件找不到),可以从以下几个方向修改FFmpeg命令:
清除异常元数据并修复容器结构
添加参数清除所有原视频元数据,同时确保MP4容器的索引结构正确:-map_metadata -1 -movflags +faststart+empty_moov优化关键帧设置
关闭强制禁用场景检测的设置,改用更贴合平台的关键帧间隔:
将-x264opts keyint=60:min-keyint=30:scenecut=0替换为:-g 60 -keyint_min 60(30fps下每2秒一个关键帧,符合Reels的处理逻辑)
明确色彩空间标准
添加参数指定统一的色彩空间,避免平台解析时出现识别错误:-colorspace bt709 -color_trc bt709 -color_primaries bt709确保音频编码兼容性
添加参数强制AAC编码兼容标准格式:-strict -2
调整后的完整FFmpeg命令
ffmpeg -i input.mp4 \ -c:v libx264 \ -preset slow \ -crf 18 \ -profile:v high \ -level:v 4.0 \ -pix_fmt yuv420p \ -vf "scale=1080:1920" \ -r 30 \ -maxrate 15M -bufsize 30M \ -g 60 -keyint_min 60 \ -colorspace bt709 -color_trc bt709 -color_primaries bt709 \ -c:a aac \ -b:a 128k \ -ar 48000 \ -ac 2 \ -strict -2 \ -map_metadata -1 \ -movflags +faststart+empty_moov \ output.mp4
额外排查步骤
- 用
ffprobe input.mp4检查问题视频的原文件参数,对比成功视频的音频/视频流信息,排查是否存在时间戳异常、流缺失等问题。 - 尝试直接重新封装问题视频(不重新编码):
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4,若能成功发布,说明是原视频的容器结构问题而非编码问题。
内容的提问来源于stack exchange,提问作者Abbas Eren Kılıç




