4

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

从“使用 FFMPEG 将视频文件连续流式传输到 RTMP 服务器”的答案中,我了解到,我需要编写一个自定义解复用器,它类似于解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.

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

4

0 回答 0