Android Studio使用FFmpeg合并音视频后音频正常视频无法播放
问题原因及解决方案
核心问题排查
- 首先检查代码低级错误:你定义的FFmpeg命令数组名为
ccommand,但执行时传入的参数是cmd,变量名不匹配会导致执行的命令不是你预期的内容,首先修正该错误。 - 流选择错误:未明确指定音视频流来源时,FFmpeg可能默认选错流,导致输出文件缺少可播放的视频轨道。
- 编码兼容性问题:你使用
-c:v copy参数直接复制原视频流,如果原视频的编码格式、profile等级、封装参数与输出容器不兼容,就会出现安卓端播放器无法识别视频流的情况。 - 执行错误:可打印返回值
rc判断命令是否执行成功,返回值为0代表执行正常,非0可调用FFmpeg.getLastCommandOutput()查看执行日志定位具体问题。
解决方案
方案1:重新编码视频(兼容性最高,优先选择)
直接复制视频流对输入格式要求高,改成用libx264重新编码为安卓兼容的baseline profile,命令如下:
val command = arrayOf( "-i", videoName, "-i", audioName, "-c:v", "libx264", "-profile:v", "baseline", "-c:a", "aac", "-map", "0:v:0", "-map", "1:a:0", "-shortest", fileName!!.path ) val rc = FFmpeg.execute(command)
方案2:保留视频流复制(执行速度快,适合确认输入视频编码兼容的场景)
明确指定流来源,避免FFmpeg选流错误,命令如下:
val command = arrayOf( "-i", videoName, "-i", audioName, "-c:v", "copy", "-c:a", "aac", "-map", "0:v:0", "-map", "1:a:0", "-shortest", fileName!!.path ) val rc = FFmpeg.execute(command)
内容的提问来源于stack exchange,提问作者Muhammad Mubashar Hussain
相关产品推荐
相关产品推荐

