我想使用 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
.
你能告诉我这种方法是否可行,或者你有更好的解决这个问题的方法,或者有什么想法可以让这更容易吗?