ffmpeg を使用して 4 つのビデオを遅延付きで並べて結合する

ffmpeg を使用して 4 つのビデオを遅延付きで並べて結合する

Janusによって作成されたビデオ会議のビデオが少なくとも 4 つあり、meetecho/janus-gateway
各ユーザー用に 2 つの mjr ビデオとオーディオ ファイルを作成します。最初にそれらを 1 つの webm ファイルに結合し、次にすべてを 500 x 500 のビデオに変換します。
今、これらのビデオをモザイクのように結合しようとしていて、次のコードを見つけました:

ffmpeg -i 1.webm -i 2.webm -i 3.webm -i 4.webm \
-speed 8 -deadline realtime -filter_complex "[0]pad=2*iw:2*ih[l]; \
[1]setpts=PTS-STARTPTS+428/TB[1v]; [l][1v]overlay=x=W/2[a]; \
[2]setpts=PTS-STARTPTS+439/TB[2v]; [a][2v]overlay=y=H/2[b]; \
[3]setpts=PTS-STARTPTS+514/TB[3v]; [b][3v]overlay=y=H/2:x=W/2[v]; \
[1]adelay=428372|428372[1a]; \
[2]adelay=439999|439999[2a]; \
[3]adelay=514589|514589[3a]; \
[0][1a][2a][3a]amix=inputs=4[a]" \
-map "[v]" -map "[a]" merged.webm

最初のビデオに関連する各ファイルの作成日時から遅延時間を計算しました。

私の問題:

  1. このコードは機能しません。コンソールが数分間フリーズした後、次の行が表示されます。

    29 を終了しました fps=0.1 q=0.0 サイズ= 1kB 時間=00:04:30.07 ビットレート= 0.0kbits/s 速度=0.896x

  2. 重ね合わせ前後の文字の意味は分かりませんでした。[1v][2v][3v][l][a][b][v]...

答え1

オーバーレイを複数回使用する代わりに、すべてのビデオ トラックで「xstack」フィルターを使用して、最初にすべての入力を遅延し、次にそれらを xstack にパイプして独自のレイアウトを作成します。

xstack でパイピングを使用してモザイクを作成する方法の例がここにあります。

[ と ] の間の記号の意味は、トラックを識別するための名前/ID のみです。

「scale」のようなフィルターに 1 つの入力が与えられ、その出力を別のフィルターで処理したい場合は、次のように実行できます。

-filter_complex "[0:v]scale=1920:1080[video_yourscaledoutput];[video_yourscaledoutput]your_next_filter=args[video_finaloutput]" -map "[video_finaloutput]" your_final_file.mp4

[0:v]これは最初の入力ストリームのビデオ トラックの ID です。残りは好きなように名前を付けることができます :)

関連情報