直接用下面overlay带有透明通道的视频时会出现,浮层视频边缘锐化,或者亮度变暗等等问题
ffmpeg -i in.mp4 -i x.mov -filter_complex "[0][1]overlay" -y output.mp4
改进方式:
添加参数alpha=1
ffmpeg -i in.mp4 -i x.mov -filter_complex "[0][1]overlay=alpha=1" -y output.mp4
https://ffmpeg.org/ffmpeg-filters.html#overlay-1
解释:
alpha : Set format of alpha of the overlaid video, it can be straight or premultiplied. Default is straight.
- straight
- premultiplied
参考https://segmentfault.com/a/1190000002990030 解释了为什么要用premultiplied;
Alpha Blending
要搞清楚这个问题,先得理解Alpha通道的工作原理,如果你已经了解可以直接跳过。
最常见的像素表示格式是RGBA8888即 ( r , g , b , a ) (r, g, b, a) (r,g,b,a),每个通道8位,0-255。例如红色60%透明度就是 ( 255 , 0 , 0 , 153 ) (255, 0, 0, 153) (255,0,0,153),为了表示方便alpha通道一般记成正规化后的0-1的浮点数,也就是 ( 255 , 0 , 0 , 0.6 ) (255, 0, 0, 0.6) (255,0,0,0.6)。而 Premultiplied Alpha 则是把RGB通道乘以透明度也就是 (r a, g a, b * a, a),50%透明红色就变成了 ( 153 , 0 , 0 , 0.6 ) (153, 0, 0, 0.6) (153,0,0,0.6)。
透明通道在渲染的时候通过 Alpha Blending 产生作用,如果一个透明度为 α s \alpha_s α