プレイリストを連続して再生する方法は?

プレイリストを連続して再生する方法は?

20秒の長さの動画ファイルがあります。このビデオファイルをこのようにセグメントに切り取りました。

video_file_0 -> starts at 0:00, ends at 0:02
video_file_1 -> starts at 0:02, ends at 0:04
video_file_2 -> starts at 0:04, ends at 0:06
video_file_3 -> starts at 0:06, ends at 0:08
video_file_4 -> starts at 0:08, ends at 0:10
video_file_5 -> starts at 0:10, ends at 0:12
video_file_6 -> starts at 0:12, ends at 0:14
video_file_7 -> starts at 0:14, ends at 0:16
video_file_8 -> starts at 0:16, ends at 0:18
video_file_9 -> starts at 0:18, ends at 0:20

だから私の質問は、ビデオファイルを切り替えるたびにウィンドウを閉じて再開せずにビデオファイル全体を0:00から0:20まで再生するなど、単一のウィンドウでどのようにこれらのビデオファイルを継続的に再生できるかです。これを達成するためにffplay、ffmpeg、またはvlcjを使用できますか?

頑張った

find -type f -name "video_file_*" | while read f; do ffplay -autoexit -- "$f"; done

ただし、このコードは各ビデオファイル間のウィンドウを閉じて再度開きます。これは望ましくありません。どうすればいいですか?

編集:JFrameの内部にストリームが表示されるJavaプロジェクトを構築しています。だから私はこの機能をJFrameの中に表示したいと思います。

答え1

mpv --gapless-audio=yes --loop-playlist=inf video_file_*シームレス再生を有効にする方法マニュアルに記録されている:

--gapless-audio=<no|yes|weak>

ファイルが変更されたら、無音や中断なしに連続オーディオファイルを再生します。デフォルト:弱い。

no:スムーズなオーディオを無効にします。

yes:再生する最初のファイルに対して選択したパラメータでオーディオデバイスを開き、シームレスな再生のために開いたままにします。つまり、最初のファイルのサンプリングレートが低い場合、後続のファイルも同じ低いサンプリングレートで再度サンプリングされ、音質が低下する可能性があります。他のパラメータを使用してファイルを再生する場合は、--audio-samprateや--audio-formatなどのオプションを使用して共有出力形式を明示的に選択することをお勧めします。

weak:通常、オーディオデバイスは開いたままになります(元の初期化形式を使用)。デコーダから出力されるオーディオフォーマットが変更されると、オーディオデバイスの電源が切れ、再びオンになります。
[...]

に従って:

--loop-playlist=<N|inf|force|no>, --loop-playlist

N回繰り返して再生します。値1は1回再生(デフォルト)、2は2回再生などです。 inf は永遠を意味します。 no 1 と同じで、ループを無効にします。コマンドラインで複数のファイルを指定すると、プレイリスト全体が繰り返されます。--loop-playlist同じです --loop-playlist=inf

mpvまた、ビデオウィンドウにちらつきが発生しないように注意してください。

長い場合、合理的なプレイリストをvideo_file_*置き換えることができますが(十分なバリエーションを使用してsort)、$(printf '%s\n' video_file_* | sort -V)スペースやその他の文字を処理することはできません。

したがって、find+を使用すると、xargsすべての特殊文字に使用できます(まだチョークホールドになる可能性があります)。ユーティリティ車両それ自体)が邪魔になります。端末コントロールはインタラクティブコントロールなので、ここでそれを復元するために人工的に使用されます</dev/tty

find -type f -name 'video_file_*' -print0 | sort -V -z | xargs -0 -- sh -c 'exec mpv </dev/tty --gapless-audio=yes --loop-playlist=inf -- "$@"'

注:最新バージョンは再び独自のバージョンにmpvリダイレクトされました/dev/tty


アップデート:別のウィンドウに含めるオプションがmpvあります。--wid=したがって、ウィンドウを準備したアプリケーションで作成された場合、アプリケーションはターゲットウィンドウのパラメータを提供するだけです。マニュアルから:

--wid=<ID>

これは、mpvに既存のウィンドウに接続するように指示します。このオプションをサポートするVOを選択すると、ビデオ出力にこのウィンドウが使用されます。 mpvは、そのウィンドウのサイズに合わせてビデオのサイズを変更し、ビデオの縦横比が異なる場合は、それを補うために黒いバーを追加します。

X11では、IDはX11のウィンドウとして解釈されます。
[...]

したがって、X11では、多くのコードなしでxwininfoウィンドウのWindow IDを、たとえば次のように検索できます。0xdeadbeefこれはmpv --wid=0xdeadbeef ...ウィンドウに含めることができます。たとえば、xtermより高度な用途に使用するには簡単です。含めるライブラリファイル他のプログラムを入力。 X11へのポインタもあります。XReparentWindow(しかし、mpvそうすることに対する責任は必要です):

関連情報