从输入视频中创建透明视频

问题描述

我正在尝试从输入视频(具有相同的尺寸等)中创建一个具有透明背景的视频。我尝试了几种策略(使用 chromakey 过滤器和其他),但都没有奏效......我已经走到这一步了:

ffmpeg -i input.mp4 -filter_complex "color=color=black@0.0,format=yuva420p[bg],[bg][0:v]scale2ref[bg][0v],[bg]drawBox=x=10:y=10:w=100:h=100:color=pink@0.5;[0v]nullsink" -c:v qtrle -an "alpha.mov"
  • 创建透明视频流​​,并设置透明背景 (black@0.0)
  • 根据输入视频缩放透明视频
  • [出于测试目的:在透明视频上绘制一个框。为简单起见,我省略了在视频中嵌入字幕的部分]
  • 丢弃输入视频流
  • 删除音频流

它基本上有效,但处理永无止境 - 我无法限制输出视频长度,因此它会匹配输入视频的长度...... 我曾尝试在命令中的任何位置使用 -shortest 选项 - 但没有成功。

解决方法

好的,所以我设法使用 overlay 过滤器(特别是它的 shortest 参数)通过一个小技巧解决了它,并将其 xy 设置为一些坐标在相关边界之外,所以我们留下了适当限制视频长度的效果:

ffmpeg -i input.mp4 -filter_complex "color=color=black@0.0,format=yuva420p[bg],[bg][0:v]scale2ref[bg][0v],[bg]drawbox=x=10:y=10:w=100:h=100:color=pink@0.5[out];[out][0v]overlay=x=100000:y=100000:shortest=1" -c:v qtrle -an "alpha.mov"