当前位置: 首页 > 知识库问答 >
问题:

使用ffmpeg的多层覆盖

盛嘉
2023-03-14

我试图满足几个使用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

但这会产生以下错误:

为“格式”筛选器指定的输入太多。初始化复杂筛选器时出错。无效参数

完全错误:

输入#0,mov,mp4,m4a,3GP,3G2,mj2,来自“Video.mp4”:
元数据:major_brand:mp42 minor_version:0 Compatible_Brands:mp42mp41 creation_time:2018-03-09T20:52:18.000000 Z

持续时间:00:00:30.00,开始时间:0.000000,比特率:8002 KB/s

流#0:0(英):视频: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.000000 Z handler_name:别名数据处理程序编码器:AVC编码输入#1,image2,来自“image.jpg”:

持续时间:00:00:0004,起始时间:0.000000,比特率:526829 KB/s

流#1:0:视频:mjpeg,yuvj444p(pc,BT470BG/未知/未知),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中是走错了路。我想知道我是否需要创建两个覆盖,然后覆盖那些(即覆盖文本到视频,然后覆盖到基础图像),虽然我不确定如何完成。

如果有人能给我指出正确的方向,我会非常感激的。

共有1个答案

方季同
2023-03-14

我将跳过缩放,因为我假设您会根据需要进行匹配或缩放

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

文本被覆盖在视频的顶部,然后视频被覆盖在图像的顶部。

 类似资料:
  • 我有两个视频,其中一个覆盖在另一个上,覆盖的只有几秒钟长,我希望它在主视频播放的同时保持循环。我尝试了我能想到的一切,但似乎在ffmpeg中都行不通 将一个覆盖在另一个之上,但没有循环。将更改为 给我一条错误消息 [movie@01B19FC0]找不到键“loop”。[movie@01b19f40]分析选项字符串时出错:“loop=0”初始化带有参数“重叠”的筛选器“movie”时出错。wmv:l

  • 我不知道如何搜索这个,所以真的没有成功。我将从我拥有的数据类开始, 以下是培训计划实体(示例) 以下是培训实体(示例) 我希望我能够清楚地解释这一点,所以我在这里试图实现的是从所有以前的(培训计划)阶段获得培训。 工作原理——当创建下一个(新培训计划)计划阶段时,它会使用之前的PlanID引用旧计划,以便识别其父计划(类似的层)。 例如,如果TrainingPlan有第2阶段,我可以很容易地从第1

  • 我试图测试如何使用if语句添加彩色方块覆盖到视频,但得到以下错误。 找不到颜色“if(1==1,red,green)”[AVFilterGraph@000002D24A659440]用参数“x=0:y=0:w=200:h=200:color=if(1==1,red,green):t=fill”初始化筛选器“drawbox”时出错,重新初始化筛选器时出错!无法将帧注入筛选器网络:处理流#0:0的解码

  • 我刚开始使用ffmpeg库。我使用http://writingminds.github.io/ffmpeg-android-java/将库添加到我的android studio项目中。当我运行命令或时,它工作得很好,但是当我尝试以开头的命令时,例如时,我会得到错误: onFailure:ffmpeg version N3.0.1版权所有(c)2000-2016使用gcc 4.8(gcc)构建的ff

  • 我正在写java web应用程序的扩展。我用maven覆盖插件将这个应用程序添加到扩展中,并使用主应用程序中的web.xml文件和webapp文件夹。我还想用jetty嵌入式服务器为我的扩展编写集成测试平台。我试过了

  • 问题内容: 使用的文档/例子的覆盖材料UI造型与风格的成分,我已经成功地风格内的根源,“更深层次的元素” 和。 但是,当我使用相同的技术返回传递给的函数的覆盖时,DOM中的移动以及整个移动将不再正确呈现。 所应用的技术(在容器上按预期工作): 和朋友的典型DOM(缩写为类名): 当我将上述技术应用于时的DOM : 为了完整起见,这是我正在做的事情的最小复制,它会触发DOM切换: 我的JSX是标准设