FFmpeg+Python给透明视频叠加方框,兼容视频编辑器问题排查
问题原因
你的drawbox调用没有明确设置颜色的alpha通道,导致绘制的蓝色方框虽然RGB通道正常,但alpha通道仍保持原始帧的全透明状态(/dev/zero生成的rgba帧alpha值为0)。部分播放器可能会忽略alpha通道直接显示RGB内容,但视频编辑器、Firefox以及PNG序列导出会严格遵循alpha通道规则,所以看不到方框。
解决方案
修改drawbox的color参数,明确指定不透明的alpha值,两种方式可选:
- 方式1:用
color='blue@1.0',@后数值为alpha透明度(1.0代表完全不透明) - 方式2:用RGBA十六进制格式
color='0x0000FFFF'(对应蓝色底+完全不透明alpha)
修改后的代码:
import ffmpeg stream = ffmpeg.input("/dev/zero", f='rawvideo', pix_fmt='rgba', s='{}x{}'.format(1920, 1080), r=30) stream = ffmpeg.overlay(stream, ffmpeg.input("tmp.png"), x=0, y=0) # 新增alpha通道设置 stream = ffmpeg.drawbox(stream, x=900, y=100, width=500, height=500, color='blue@1.0', thickness="fill") stream = ffmpeg.trim(stream, duration=1) stream = ffmpeg.output(stream, "out.webm", pix_fmt="yuva420p") ffmpeg.run(stream)
效果验证
修改后导出PNG序列时,原本不显示的方框会正常出现在帧中;在Kdenlive、Shotcut等编辑器叠加,或用Firefox打开时,方框也能正常显示。
内容的提问来源于stack exchange,提问作者Sidney
相关产品推荐
相关产品推荐

