我正尝试使用ffmpeg和一个PY库从视频中删除一个背景,PY (backgroundremover)只是创建一个matte.mp4文件作为输出,其背景为黑色,人为白色剪影。
PY lib: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发布于 2021-12-31 12:25:23
错误Input frame sizes do not match (320x240 vs 426x320)是“自我解释”。
edited.mp4的分辨率是426x320,matte.mp4的分辨率是426x320。我不知道为什么backgroundremover会将分辨率从320x240修改为320x240
剩下的消息只是警告而已。
我不确定,但我认为第一个FFmpeg命令应该是:
ffmpeg -y -i ios.mov -filter:v fps=30 -vf scale=320:240,setsar=1:1 edited.mp4它并没有解决这个问题-- matte.mp4的解决方案仍然是426x320。
它可能是backgroundremover的一个窃听器..。
您可以使用scale文件处理错误消息。
阿尔法合并之后应该有一个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样本输出:

https://stackoverflow.com/questions/70540761
复制相似问题