You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Graph API给Facebook视频传字幕:NodeJS调用成功但字幕不显示求助

Facebook视频字幕上传的NodeJS实现(Axios/Request)

一、Axios 实现方案

需要借助 form-data 模块构建 multipart/form-data 请求,和你使用curl的逻辑完全对齐:

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

async function uploadCaption(videoId, accessToken, subtitlePath) {
  const form = new FormData();
  // 追加字幕文件,注意文件名必须符合 [name].[locale].srt 格式(如 video.en.srt)
  form.append('captions_file', fs.createReadStream(subtitlePath));
  form.append('method', 'POST');

  const apiUrl = `https://graph-video.facebook.com/v19.0/${videoId}/captions`;
  const requestParams = {
    access_token: accessToken,
    default_locale: 'none',
    locales_to_delete: '[]'
  };

  try {
    const res = await axios.post(apiUrl, form, {
      params: requestParams,
      headers: { ...form.getHeaders() } // 必须携带 FormData 自动生成的请求头
    });
    console.log('字幕上传成功:', res.data);
  } catch (err) {
    console.error('上传失败:', err.response?.data || err.message);
  }
}

// 调用示例
// uploadCaption('1109093056874668', '你的AccessToken', './subtitle.en.srt');

二、Node-Request 实现方案

注意:request 模块已被官方标记为废弃,仅作兼容场景参考:

const request = require('request');
const fs = require('fs');

function uploadCaption(videoId, accessToken, subtitlePath) {
  const apiUrl = `https://graph-video.facebook.com/v19.0/${videoId}/captions`;
  const formData = {
    captions_file: fs.createReadStream(subtitlePath),
    method: 'POST',
    access_token: accessToken,
    default_locale: 'none',
    locales_to_delete: '[]'
  };

  request.post({ url: apiUrl, formData }, (err, res, body) => {
    if (err) return console.error('上传失败:', err);
    console.log('字幕上传成功:', JSON.parse(body));
  });
}

// 调用示例
// uploadCaption('1109093056874668', '你的AccessToken', './subtitle.en.srt');

三、API返回成功但字幕不显示的排查点

  • 文件名格式:必须严格遵循 文件名.语言代码.srt(如 video.zh_CN.srt 对应简体中文),Facebook 依赖文件名识别字幕语言
  • 视频后台设置:进入Facebook视频管理页面,确认字幕已被启用,部分场景下默认不会自动显示,需手动开启「自动显示字幕」或选择对应语言
  • 参数配置:default_locale=none 表示无默认字幕,用户需手动切换语言;若要默认显示,可改为对应语言代码(如 en)
  • 处理延迟:Facebook 处理字幕需要时间,上传成功后等待3-5分钟再刷新查看
  • 权限验证:确保 Access Token 拥有 pages_manage_posts 和 pages_read_engagement 权限,且属于视频所属的页面

内容的提问来源于stack exchange,提问作者Gaurav Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:53:19