快速掌握ffmpeg复杂滤镜concat系列

发布于:2025-07-04 ⋅ 阅读:(17) ⋅ 点赞:(0)

👦👦一个帅气的boy,你可以叫我Love And Program
🖱 ⌨个人主页:Love And Program的个人主页
💖💖如果对你有帮助的话希望三连💨💨支持一下博主

前言

简单滤镜

描述:

  • Simple filtergraphs are those that have exactly one input and output, both of the same type (audio or video). They are configured with the per-stream -filter option (with -vf and -af aliases for -filter:v (video) and -filter:a (audio) respectively). Note that simple filtergraphs are tied to their output stream, so e.g. if you have multiple audio streams, -af will create a separate filtergraph for each one.
  • Taking the trancoding example from above, adding filtering (and omitting audio, for clarity) makes it look like this:

说明:简单 过滤器 是那些只有一个输入和输出的 filtergraphs,两者都是 相同类型(音频或视频)。它们配置了每个流的 -filter 选项,带有 -vf 和 -af 别名 -filter:v (video)和 -filter:a (audio)这2种组成了一个视频流,通过简单滤镜可以直接对流做一些基本操作,比如加关键帧,设置分辨率等
简单滤镜流程

复杂滤镜

       复杂滤镜图(Complex filtergraphs)是指无法简单描述为应用于单一流的线性处理链的滤镜结构。例如,当滤镜图包含多个输入和 / 或输出,或输出流类型与输入不同时,即属于复杂滤镜图。复杂滤镜图通过 -filter_complex 选项进行配置。请注意,该选项具有全局作用域,因为复杂滤镜图的本质决定了其无法明确关联到单个流或文件。每个 -filter_complex 实例都会创建一个新的复杂滤镜图,且其数量不受限制。
       ffmpeg中将切片文件合成一个完整文件需要用到复杂滤镜,因为它需要将多个视频流进行叠加
在这里插入图片描述

concat滤镜

       首先我们准备3个视频,文件格式并不影响操作(已尝试过flv、mp4、ts格式),然后需要在调用复杂滤镜,生成[v]、[a]流,流可以显式的看到,然后通过map操作选择合成后的流即可,输出结果可以选择指定位置。

ffmpeg -y  -i ./aa.ts -i ./bb.ts -i ./cc.ts \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a] concat=n=3:v=1:a=1 [v] [a]" \
-map "[v]" -map "[a]" \
 ./your_path/merge.ts
  • 也可以选择直接输出在控制台,来判断你的命令是可以执行的(注意:文件过大会使shell控制台无法显示,输出本身就为乱码状态)
ffmpeg -y  -i ./aa.ts -i ./bb.ts -i ./cc.ts \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a] concat=n=3:v=1:a=1 [v] [a]" \
-map "[v]" -map "[a]" \
 -f mpegts -
  • 也可以选择直接udp输出
ffmpeg -y -re  -i ./aa.ts -i ./bb.ts -i ./cc.ts -filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a] concat=n=3:v=1:a=1 [v] [a]" -map "[v]" -map "[a]"  -f mpegts udp://@1.1.1.1:8000

在这里插入图片描述

通过gpu加速

       目前我还未测试成功复杂滤镜的gpu加速,但是我们可以将其他的编码、解码操作通过gpu完成操作,合并代码后为

ffmpeg -y -hwaccel cuda -i ./aa.ts -i ./bb.ts -i ./cc.ts \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a] concat=n=3:v=1:a=1 [v] [a]" \
-map "[v]" -map "[a]" \
-c:v h264_nvenc  ./your_path/merge.ts

第一张图为gpu处理,最大速度可达x11.7,比第二张cpu处理速度x3快4倍。

  1. gpu
    gpu加速

  2. cpu
    cpu处理