gpt4 book ai didi

c - 用于选择视频/音频流的 FFmpeg 过滤器

转载 作者:行者123 更新时间:2023-11-30 16:44:05 24 4
gpt4 key购买 nike

我正在尝试创建一个节点(节点的集合也可以),它接收许多流和一个索引,并输出由索引指定的一个流。基本上,我想创建一个多路复用器节点,例如:

Node : Stream ... Number -> Stream

FFmpeg 的过滤器图 API 似乎有两个过滤器可以执行此操作:streamselect(用于视频)和 astreamselect(用于音频)。在大多数情况下,他们似乎做了我想做的事:

[in0][in1][in2]streamselect=inputs=3:map=1[out]

该流将接收三个视频流,并输出第二个in1

您可以对音频流使用类似的过滤器:

[in0][in1]astreamselect=inputs=2:map=0[out]

它将接收两个流并输出第一个in0

问题是,我可以创建一个过滤器,它接受音频和视频流的列表并仅根据流索引输出流吗?所以类似:

[v0][v1][a0][a1][a2]avstreamselect=inputs=5:map=3[out]

哪个将a1映射到out

如果有帮助的话,我会使用 libavfilter C API 而不是命令行界面。

最佳答案

虽然使用一个过滤器可能无法1,但通过组合多个过滤器当然可以做到这一点,一个用于音频或视频(取决于您选择的过滤器),并且一堆 nullsinkanullsink 过滤器用于其余部分。

例如,过滤器:

[v0][v1][a0][a1]avstreamselect=inputs=4:map=2[out]

接收两个视频流和两个音频流,并返回第三个流(第一个音频流),可以写为:

[a0][a1]astreamselect=inputs=2:map=0[out];
[v0]nullsink;[v1]nullsink

在这里,我们对第一个流运行 select,所有剩余的流都映射到接收器。这个想法可能会推广到仅使用 nullsinkanullsinkcopyacopy,例如,我们也可以用 4 个节点来编写:

[a0]acopy[out];
[a1]anullsink;
[v0]nullsink;
[v1]nullsink

1我还是不知道是不是。如果确实可能的话,请随意删除它。

关于c - 用于选择视频/音频流的 FFmpeg 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44729922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com