You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用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命令:

  1. 清除异常元数据并修复容器结构
    添加参数清除所有原视频元数据,同时确保MP4容器的索引结构正确:

    -map_metadata -1 -movflags +faststart+empty_moov
    
  2. 优化关键帧设置
    关闭强制禁用场景检测的设置,改用更贴合平台的关键帧间隔:
    -x264opts keyint=60:min-keyint=30:scenecut=0 替换为:

    -g 60 -keyint_min 60
    

    (30fps下每2秒一个关键帧,符合Reels的处理逻辑)

  3. 明确色彩空间标准
    添加参数指定统一的色彩空间,避免平台解析时出现识别错误:

    -colorspace bt709 -color_trc bt709 -color_primaries bt709
    
  4. 确保音频编码兼容性
    添加参数强制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ıç

火山引擎 最新活动