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

在React Native中使用ffmpeg-kit-react-native合并N个视频遇阻

无音频视频合并的FFmpeg解决方案

一、输入视频参数一致时(分辨率、帧率、编码相同)

这种场景用concat demuxer效率最高,步骤如下:

  • 先创建一个文本文件(比如input.txt),每行按格式写入视频路径:
    file '/path/to/first.mp4'
    file '/path/to/second.mp4'
    ...
    
  • 执行FFmpeg命令:
    ffmpeg -f concat -safe 0 -i input.txt -c:v copy -an -y ${outputVideoPath}
    
  • 参数解释:
    • -f concat:指定使用concat demuxer模式
    • -safe 0:允许使用绝对路径(避免路径权限报错)
    • -c:v copy:直接复制视频流,不重新编码,速度极快
    • -an:彻底禁用音频输出,确保合并后无音频

二、输入视频参数不一致时(分辨率、帧率不同)

需要用filter_complex的concat滤镜统一视频参数,命令如下:

ffmpeg -i ${videoPaths.join(' -i ')} -filter_complex "[0:v][1:v][2:v]concat=n=${videoPaths.length}:v=1:a=0[v]" -map "[v]" -c:v libx264 -preset medium -crf 23 -an -y ${outputVideoPath}
  • 参数解释:
    • -filter_complex "[0:v][1:v][2:v]concat=n=${videoPaths.length}:v=1:a=0[v]":按输入顺序拼接所有视频流,仅保留视频轨道
    • -c:v libx264:用H.264编码统一输出视频格式
    • -preset medium:平衡编码速度与压缩质量,可按需换成fast(更快)或slow(压缩比更高)
    • -crf 23:控制视频质量,18-28为常用区间,数值越小质量越高
    • -an:明确禁用音频,确保输出无音频

三、你之前命令的问题点

  • 第一条命令中的-shortest会让输出视频长度等于最短的输入视频,这大概率不是你要的合并效果
  • 第二条命令缺少明确的音频禁用参数,且-strict -2是旧版FFmpeg兼容AAC的冗余参数,这里完全不需要
  • 如果输入视频分辨率不一致,concat滤镜要求所有输入流分辨率统一,你之前的scale滤镜写法可能存在适配问题,建议在参数不一致时用上面的第二种命令

在react-native中使用ffmpeg-kit-react-native时,注意:

  • 确保视频路径是应用可访问的绝对路径(Android注意文件权限,iOS注意沙箱路径)
  • 用concat demuxer时,要在应用临时目录创建input.txt,避免读写权限问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:47:09