ffmpeg alpha 通道视频生成

Ffmpeg alpha channel video generation

我正在尝试使用 ffmpeg 和执行此操作的 PY 库从视频中删除背景,PY 库(backgroundremover)只是创建一个 matte.mp4 文件作为输出,背景为黑色,人作为白色剪影。

PY 库:https://github.com/nadermx/backgroundremover#advance-usage-for-video

我现在在做什么:

缩小视频并将其转换为 MP4

ffmpeg -i ios.mov -s 320x240 -filter:v fps=30 -vf scale=320:-2 edited.mp4

创建遮罩视频

backgroundremover -i edited.mp4 -wn 4 -mk -o matte.mp4

创建带 alpha 通道的视频(问题)

ffmpeg -i edited.mp4 -i matte.mp4 -filter_complex "[0:v][1:v]alphamerge" -shortest -c:v qtrle -an output.mov

最后一条命令因帧大小无效而失败,我该如何强制帧大小或跳过此检查?

错误:

[swscaler @ 0x7ff5c957b000] No accelerated colorspace conversion found from yuv420p to argb.
[Parsed_alphamerge_0 @ 0x7ff5c4e6d480] Input frame sizes do not match (320x240 vs 426x320).
[Parsed_alphamerge_0 @ 0x7ff5c4e6d480] Failed to configure output pad on Parsed_alphamerge_0
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument

答案:

ffmpeg -y -i edited.mp4 -i matte.mp4 -f lavfi -i color=c=black:s=320x240 -filter_complex "[1:v]scale=320:240,setsar=1:1,split[vs][alpha];[0:v][vs]alphamerge[vt];[2:v][vt]overlay=shortest=1[rgb];[rgb][alpha]alphamerge" -shortest -c:v hevc_videotoolbox -allow_sw 1 -alpha_quality 0.75 -vtag hvc1 -pix_fmt yuva420p -an output.mov

错误 Input frame sizes do not match (320x240 vs 426x320) 是“自我解释”。

  • edited.mp4的分辨率为320x240
  • matte.mp4的分辨率是426x320
    不知道为什么backgroundremover把分辨率从320x240修改为426x320

其余消息只是警告。

我不太确定,但我认为第一个 FFmpeg 命令应该是:

ffmpeg -y -i ios.mov -filter:v fps=30 -vf scale=320:240,setsar=1:1 edited.mp4

它没有解决问题 - matte.mp4 的分辨率仍然是 426x320
这可能是 backgroundremover...

中的错误

您可以使用 scale 文件管理器解决错误消息。
alpha 合并后应跟一个 overlay 过滤器:

ffmpeg -y -i edited.mp4 -i matte.mp4 -f lavfi -i color=c=black:s=320x240 -filter_complex "[1:v]scale=320:240,setsar=1:1[vs];[0:v][vs]alphamerge[vt];[2:v][vt]overlay=shortest=1" -shortest -c:v qtrle -an output.mov

示例输出: