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

React Native中FFmpeg命令执行完成后uploadVideo未执行,如何触发完成回调

解决FFmpeg-kit合成后uploadVideo未执行的问题

排查方向

  1. 先确认FFmpeg命令是否执行成功:当前代码仅打印返回码但无错误详情,无法判断是命令失败还是逻辑问题。
  2. 检查executeAsync的回调逻辑:确保正确捕获会话完成事件,覆盖所有可能的返回状态。

修正后的代码

const burnVideoAsync = async (inputVideo: string, inputImage: string, outputVideo: string) => {
  try {
    const session = await FFmpegKit.executeAsync(
      `-y -i ${inputVideo} -i ${inputImage} -filter_complex "[1:v]scale=50:200[ovr1];[0:v][ovr1]overlay=5:5:enable='between(t\\,0\\,50)'" -c:a copy ${outputVideo}`
    );

    const returnCode = await session.getReturnCode();
    console.log('FFmpeg执行返回码:', returnCode);

    // 打印完整日志,快速定位命令执行问题
    const outputLogs = await session.getAllLogs();
    console.log('FFmpeg输出日志:', outputLogs.map(log => log.getMessage()).join('\n'));

    if (ReturnCode.isSuccess(returnCode)) {
      console.log('视频合成成功,启动上传');
      uploadVideo(outputVideo);
    } else if (ReturnCode.isCancel(returnCode)) {
      console.log('FFmpeg任务被取消');
    } else {
      console.error('视频合成失败,错误码:', returnCode);
      // 可在此添加失败后的兜底处理
    }
  } catch (error) {
    console.error('FFmpeg执行出现异常:', error);
  }
};

关键调整点

  • 改用async/await语法,简化逻辑同时捕获执行过程中的异常。
  • 增加完整日志输出:打印FFmpeg所有运行日志,能快速排查命令语法错误、文件路径无效等问题。
  • 修正滤镜命令语法:将filter_complex内的分隔符改为分号;,避免潜在的解析异常。
  • 覆盖异常场景:捕获executeAsync可能抛出的Promise异常,避免流程静默中断。

额外检查项

  • 确认inputVideo、inputImage、outputVideo的路径合法性(比如Android的文件权限、iOS的沙箱路径)。
  • 本地验证FFmpeg命令:把生成的命令复制到电脑终端执行,排除命令本身的逻辑错误。

内容的提问来源于stack exchange,提问作者sandulasanth-7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:48:25