ffmpeg を使用して動的プレイリストを無限に再生したいと考えています。アイデアは、外部コマンド/スクリプトを実行して次のファイルへのパスを要求し (ファイルの予測開始時刻を引数として使用)、ファイルを無限に再生し続けるというものです。
「FFMPEGを使用して連続的にビデオファイルをRTMPサーバーにストリーミングする」への回答から、デマルチプレクサーに似たカスタムデマルチプレクサーを作成する必要があることを学びましたconcat
。問題は、オーディオファイル間でクロスフェードしたいという事実と、デマルチプレクサーについての私の理解から、デマルチプレクサーは1つしか生成できないため、それを実行できるようにするには、その機能をデマルチプレクサー自体に実装する必要があるという事実から発生します(または有限数) オーディオ出力ストリームであり、 acrossfade
-filterを使用するには 2 つ必要です。
したがって、次のようにフィルター グラフを設定する必要があります。
file1 --------------------------------*-->| cross | ---->more filters ---> Output
file2 -----------------*-->| cross |----->| fade |
file3 --*-->| cross |----->| fade |
... ->| fade |
無数のクロスフェード フィルターを使用します。
また、クロスフェードの前にオーディオ ファイルを事前にフィルター処理 (* など) したいと思ってsilenceremove
います。これにより、さらに複雑になり、「デマルチプレクサーにすべてを実装する」アプローチがさらに悪化します。
私の現在の解決策は、2 つの出力ストリームを交互に切り替え、内部で事前フィルタリングを行うカスタム demuxer と、次のような入力交互クロスフェード フィルターを実装することです。
files -> | alternating |----->| alternating | ----> more filters--->
| demuxer* |----->| crossfade |
このアプローチで見られる問題は、複数の EOF で終了するファイルをデマルチプレクサからクロスフェード フィルタに送信する必要があることですff_request_frame
。
このアプローチが実現可能かどうか教えていただけますか、またはこの問題に対するより良い解決策や、これを簡単にするアイデアはありますか?