ffmpeg:无限量的过滤器/淡入淡出动态播放列表

MaP*_*PeR 5 audio filtering ffmpeg playlist cross-fade

我想使用ffmpeg无限播放动态播放列表。这个想法是,执行外部命令/脚本来请求下一个文件的路径(使用文件的预测开始时间作为参数)并继续无限播放文件。

从“使用 FFMPEG 将连续视频文件流式传输到 RTMP 服务器”的答案中,我了解到,我需要编写一个自定义解复用器,类似于解concat复用器。问题源于这样一个事实,即我想在音频文件之间进行交叉淡入淡出,并且根据我对解复用器的理解,我必须将该功能实现到解复用器本身才能做到这一点,因为解复用器只能产生一个(或有限数量)音频输出流,并且您需要两个才能使用acrossfade-filter

所以我必须像这样设置过滤器图:

file1 --------------------------------*-->| cross | ---->more filters ---> Output
file2 -----------------*-->| cross |----->| fade  |
file3 --*-->| cross |----->| fade  |
      ... ->| fade  |
Run Code Online (Sandbox Code Playgroud)

使用无限数量的交叉淡入淡出滤镜。

另外,我真的很想silenceremove在交叉淡入淡出之前对音频文件进行预过滤(*,例如),这使得它变得更加复杂,并且“在解复用器中实现所有内容”方法甚至更糟。

我当前的解决方案是实现一个自定义解复用器,该解复用器在两个输出流之间交替,并在内部进行预过滤,以及输入交替交叉淡入淡出过滤器,如下所示:

files -> | alternating |----->| alternating | ----> more filters--->
         |   demuxer*  |----->|  crossfade  |
Run Code Online (Sandbox Code Playgroud)

我看到这种方法的问题是,我需要将多个 EOF 终止的文件从解复用器发送到交叉淡入淡出过滤器,并且我不知道在使用标准 ffmpeg 函数(例如ff_request_frame.

您能告诉我这种方法是否可行,或者您是否有更好的解决方案来解决这个问题,或者有什么想法可以让这个问题变得更容易?