我正在尝试使用ffmpeg来满足一些分层方案来构建视频文件。
场景1 :在图片顶部叠加视频(指定视频的不透明度),然后根据结果创建新视频。
我用以下方法解决了这个问题:
ffmpeg -i video.mp4 -i image.jpg -filter_complex '[0]format=rgba,colorchannelmixer=aa=0.7,scale=w=3840:h=2160[a];[1][a]overlay=0:0' -t 30 output.mp4
我正在将视频缩放到3840x2160以匹配我的图像(理想情况下我预先将它们匹配)。
场景2 :现在有3层,视频 - 图像 - 图像。中间图像层是带有文本的透明图像。因此,我们有一个基本图像,文本覆盖,并在一个不透明度的顶部的视频。
我用以下方法解决了这个问题:
ffmpeg -i video.mp4 -i image.jpg -i text.png -filter_complex '[0]format=rgba,colorchannelmixer=aa=0.7,scale=w=3840:h=2160[a];[2][a]overlay=0:0,scale=w=3840:h=2160[b];[1][b]overlay=0:0' -t 30 output.mp4
场景3(我无法工作):与场景#2相同,但视频顶部有文字。
我尝试重新安排我的过滤器,希望影响分层顺序:
ffmpeg -i video.mp4 -i image.jpg -i text.png -filter_complex '[2]overlay=0:0,scale=w=3840:h=2160[a];[0][a]format=rgba,colorchannelmixer=aa=0.7,scale=w=3840:h=2160[b];[1][b]overlay=0:0' -t 5 output.mp4
但是这会产生以下错误:
为“格式”过滤器指定的输入太多。初始化复杂过滤器时出错。参数无效
完全错误:
从'video.mp4'输入#0,mov,mp4,m4a,3gp,3g2,mj2:
元数据: major_brand:mp42 minor_version:0 compatible_brands:mp42mp41 creation_time:2018-03-09T20:52:18.000000Z持续时间:00:00:30.00,开始:0.000000,比特率:8002 kb / s
流#0:0(eng):视频:h264(高)(avc1 / 0x31637661),yuv420p(tv,bt709),1920x1080 [SAR 1:1 DAR 16:9],7997 kb / s,24 fps , 24 tbr,24k tbn,48 tbc(默认)
元数据: creation_time:2018-03-09T20:52:18.000000Z handler_name:别名数据处理程序 编码器:AVC编码输入#1,image2,来自'image.jpg':
持续时间:00:00:00.04,开始:0.000000,比特率:526829 kb / s
流#1:0:视频:mjpeg,yuvj444p(pc,bt470bg / unknown / unknown),3840x2160 [SAR 96:96 DAR 16:9],25 tbr,25 tbn,25 tbc输入#2, png_pipe,来自'text.png':持续时间:N / A,比特率:N / A
流#2:0:视频:png,rgba(pc),1500x1500,25 tbr,25 tbn,25 tbc [AVFilterGraph @ 0x7fc37d402de0]
为“格式”过滤器指定的输入太多。初始化复杂过滤器时出错。参数无效
我可以通过调整命令来解决这个问题,以便文本不是叠加层的输入:
ffmpeg -i lightTexture.mp4 -i image.jpg -i textSample.png -filter_complex '[2]overlay=0:0,scale=w=3840:h=2160;[0]format=rgba,colorchannelmixer=aa=0.7,scale=w=3840:h=2160[b];[1][b]overlay=0:0' -t 5 output_text_on_top.mp4
然后我的输出视频全部搞砸了。我怀疑我在错误的轨道上试图把所有这些都塞进-filter_complex
。我想知道我是否需要创建两个叠加然后覆盖它们(即将文本叠加到视频上,然后将其叠加到基本图像上),虽然我不知道如何实现这一点。
如果有人能指出我正确的方向,我会非常感激。
答案 0 :(得分:2)
我会跳过缩放,因为我假设你会根据需要进行匹配或缩放
ffmpeg -i video.mp4 -i image.jpg -i text.png \
-filter_complex \
'[0]format=rgba,colorchannelmixer=aa=0.7[v]; \
[v][2]overlay=0:0[vt]; \
[1][vt]overlay=0:0' output.mp4
文字覆盖在视频的顶部,然后叠加在图像上方。