突发奇想,为什么不能用这种方式导出视频呢。
转成视频,支持透明的视频只有avi(RGBA)和mov。但是前者显然不现实,因为太大了;后者速度太慢了。
然后就想到,为什么不能把alpha通道导出成另一个视频呢。得,要学complex filter了。
看了一番文档,这东西也挺容易理解的,基本语法是:
-filter_complex [输入1]滤镜1[输出1];[输入2]滤镜2[输出2];...
于是就有了下面的程序:
ffmpeg -f lavfi -i color=black@0:1920x1080:30:10,format=rgba,subtitles=test.ass:alpha=1 -filter_complex split[v1][v2];[v2]alphaextract[o2];[v1]format=yuv420p[o1] -map [o1] 1.mp4 -map [o2] 2.mp4
注释:
给透明的视频加上透明的字幕,结果复制两份,取名v1
和v2
(注意这里他们两个都是rgba格式,便于取出透明度);取v2
的透明度通道命名为o2
,并作为最后的输出;把v1
转回视频应取的yuv420
格式然后命名为o1
,并作为最后的输出。
于是,命令执行之后就可以得到两个视频了,把两个视频导入pr里面就可以为所欲为了。
修改版
ffmpeg -filter_complex color=black@0:1920x1080:30:10,format=rgba,subtitles=0.ass:alpha=1,split[v1][v2];[v2]alphaextract[o2];[v1]format=yuv420p[o1] -map [o1] 1.mp4 -map [o2] 2.mp4