如何转换视频适配Facebook Graph(Reel)API解决格式不兼容问题
问题背景
调用Instagram的create user media接口发布图片正常,但发布Reel时触发格式不支持错误:
{
"error": {
"message": "The video file you selected is in a format that we don't support.",
"type": "OAuthException",
"code": 352,
"error_subcode": 2207026,
"is_transient": false,
"error_user_title": "Unsupported format",
"error_user_msg": "The video format is not supported. Please check spec for supported streams format",
"fbtrace_id": ""
}
}
已查阅Reel规格文档,测试过Any Video Converter,使用过以下ffmpeg命令仍未解决:ffmpeg -i input.mp4 -c:v libx264 -aspect 16:9 -crf 18 -vf "scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw)/2:(720-ih)/2" -fpsmax 60 -preset ultrafast -c:a aac -b:a 128k -ac 1 -pix_fmt yuv420p -movflags +faststart -t 59 -y output.mp4
你提到的格式混淆需要先澄清:MPEG-4 Part 10是视频编码标准(即H.264),MPEG-4 Part 14是容器格式(即MP4),你的原命令已经在生成MP4容器,问题出在Reel的具体规格细节上。
解决方案
适配Reel的ffmpeg命令
以下命令严格匹配Instagram Reel的官方要求,解决格式兼容问题:
ffmpeg -i input.mp4 \ -c:v libx264 \ -profile:v high \ -level:v 4.2 \ -crf 23 \ -vf "scale=min(1080,iw):min(1920,ih),pad=1080:1920:(1080-iw)/2:(1920-ih)/2,setsar=1" \ -r 30 \ -c:a aac \ -b:a 128k \ -ac 2 \ -pix_fmt yuv420p \ -movflags +faststart \ -t 59 \ -y output_reel.mp4
关键参数说明
- 视频编码:指定
highprofile和4.2level,符合Instagram的H.264标准要求 - 分辨率:Reel优先支持9:16竖屏(1080x1920),原命令用的16:9是普通视频比例,不符合Reel的展示逻辑
- 帧率:设置为30fps(兼容性优于60fps,避免部分设备/接口检测异常)
- 音频:改为立体声(
-ac 2),原单声道配置可能触发格式检测问题 - 容器:默认输出即为MP4(MPEG-4 Part14),无需额外配置
额外排查步骤
- 用
ffprobe output_reel.mp4验证文件信息,确认:- 容器类型为
mov,mp4,m4a,3gp,3g2,mj2(即MP4 Part14) - 视频编码为
H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10(编码和容器不冲突,是Reel允许的组合)
- 容器类型为
- 确保视频码率不超过50Mbps,
crf 23的码率处于合理范围,如需固定码率可替换为-b:v 5M - 确认视频时长在15-60秒区间内,你的
-t 59符合要求
备选工具
如果ffmpeg仍有问题,可使用HandBrake:
- 选择预设
Fast 1080p30 - 修改分辨率为1080x1920(9:16)
- 音频设置为AAC 128kbps立体声
- 导出为MP4格式即可
内容的提问来源于stack exchange,提问作者Micha

