首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ffmpegα通道视频生成

Ffmpegα通道视频生成
EN

Stack Overflow用户
提问于 2021-12-31 09:18:29
回答 1查看 1.8K关注 0票数 1

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

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

我现在正在做的是:

收缩&将视频转换为MP4

代码语言:javascript
复制
ffmpeg -i ios.mov -s 320x240 -filter:v fps=30 -vf scale=320:-2 edited.mp4

创建哑光视频

代码语言:javascript
复制
backgroundremover -i edited.mp4 -wn 4 -mk -o matte.mp4

用alpha通道创建视频(问题)

代码语言:javascript
复制
ffmpeg -i edited.mp4 -i matte.mp4 -filter_complex "[0:v][1:v]alphamerge" -shortest -c:v qtrle -an output.mov

最后一条命令在无效帧大小的情况下失败,如何强制帧大小或跳过此检查?

错误:

代码语言:javascript
复制
[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

答案:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-31 12:25:23

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

  • edited.mp4的分辨率是426x320matte.mp4的分辨率是426x320

我不知道为什么backgroundremover会将分辨率从320x240修改为320x240

剩下的消息只是警告而已。

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

代码语言:javascript
复制
ffmpeg -y -i ios.mov -filter:v fps=30 -vf scale=320:240,setsar=1:1 edited.mp4

它并没有解决这个问题-- matte.mp4的解决方案仍然是426x320

它可能是backgroundremover的一个窃听器..。

您可以使用scale文件处理错误消息。

阿尔法合并之后应该有一个overlay过滤器:

代码语言:javascript
复制
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

样本输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70540761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档