我想使用ffmpeg无限播放动态播放列表。这个想法是,执行一个外部命令/脚本来请求下一个文件的路径(使用文件的预测开始时间作为参数)并继续无限地播放文件。
从我学到的答案到“Using FFMPEG to stream continuously videos files to a RTMP server”,我需要编写一个自定义分路器,类似于concat
分路器。问题源于这样一个事实:我希望交叉淡入淡出音频文件,并且根据我对分离器的理解,我必须将该功能实现到分离器本身才能够实现,因为解复用器只能生成一个(或有限数量)音频输出流,您需要两个才能使用acrossfade
-filter。
所以我必须像这样设置过滤器图:
file1 --------------------------------*-->| cross | ---->more filters ---> Output
file2 -----------------*-->| cross |----->| fade |
file3 --*-->| cross |----->| fade |
... ->| fade |
使用无限数量的交叉渐变滤镜。
此外,我真的希望在交叉淡入淡出之前预先过滤(*,例如silenceremove
)音频文件,这使得它变得更加复杂,并且“实现分路器中的所有内容” - 接近甚至更糟。
我目前的解决方案是实现一个自定义分离器,它在两个输出流之间交替进行内部预滤波以及输入交替交叉渐变滤波器,如下所示:
files -> | alternating |----->| alternating | ----> more filters--->
| demuxer* |----->| crossfade |
我用这种方法看到的问题是我需要将多个EOF终止的文件从解复用器发送到交叉淡化过滤器,我不知道在使用标准的ffmpeg函数时是否可能/允许ff_request_frame
。
您能否告诉我这种方法是否可行,或者您是否有更好的解决方案来解决这个问题或任何能让这更容易的想法?