4

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

このアプローチが実現可能かどうか教えていただけますか、またはこの問題に対するより良い解決策や、これを簡単にするアイデアはありますか?

4

0 に答える 0