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

使用FFmpeg色度键将视频绿幕转透明背景却出现黑底问题求助

解决FFmpeg色度键后背景变黑的问题

你现在的问题主要出在三个地方:

  • 没必要引入第一个透明背景视频,叠加操作反而把chromakey生成的透明区域覆盖成了该视频的背景(大概率是黑色)
  • libx264编码器默认配置不支持Alpha通道,得指定对应的profile
  • alpha_mode参数设置不对

直接修改命令如下:

val outputVideoPath = FileUtil.createMediaFilePathforChroma(this@ChromaActivity, 1)
cmdList.append("ffmpeg").append("-y")
cmdList.append("-i").append(reducedFrameRatePath)
// 去掉第一个透明视频的输入
cmdList.append("-filter_complex")
cmdList.append("[0:v]scale=$width:$height,chromakey=0x00FF00:similarity=.455[out]")
// 直接对原视频做色度键处理,生成带Alpha通道的流
cmdList.append("-map").append("[out]")
cmdList.append("-t").append(TimeUnit.MILLISECONDS.toSeconds(videodata?.endduration!!).toString())
cmdList.append("-preset").append("ultrafast")
cmdList.append("-c:a").append("copy")
cmdList.append("-c:v").append("libx264")
cmdList.append("-profile:v").append("high444")
// 必须指定high444 profile才能让libx264支持Alpha通道
cmdList.append("-pix_fmt").append("yuva420p")
cmdList.append("-metadata:s:v:0").append("alpha_mode=1")
// alpha_mode设为1表示启用透明模式
cmdList.append(outputVideoPath)

补充说明:

  • 去掉第一个输入的透明视频后,直接对目标视频做chromakey,滤镜会自动把绿色区域替换成透明(生成Alpha通道)
  • high444是libx264支持Alpha通道的必要profile,默认的baseline/main/high都不包含Alpha支持
  • 输出的MP4容器本身支持透明,但要确保播放工具能识别(比如大部分专业视频软件支持,普通播放器可能显示黑色背景,这是播放器的问题,不是视频本身的问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:40:30