新しいビデオを作成するために 2x2 の方法で並べて表示したい 4 つのビデオがあります。これを簡単に、できれば無料で Linux で行う方法はありますか? おそらく何らかのライブラリと対話するために、適度な量をプログラムするつもりはありますが、ビデオ処理プログラム全体を自分で作成することは望んでいません。入力ビデオと出力ビデオは、一般的に使用される最も便利な形式であると想定できます。
gm montageコマンド (画像用)の類似物は素晴らしいでしょう。
新しいビデオを作成するために 2x2 の方法で並べて表示したい 4 つのビデオがあります。これを簡単に、できれば無料で Linux で行う方法はありますか? おそらく何らかのライブラリと対話するために、適度な量をプログラムするつもりはありますが、ビデオ処理プログラム全体を自分で作成することは望んでいません。入力ビデオと出力ビデオは、一般的に使用される最も便利な形式であると想定できます。
gm montageコマンド (画像用)の類似物は素晴らしいでしょう。
次の ffmpeg コマンドは、質問者が望んでいたことを正確に実行します。
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex \
'[0:v]pad=iw*2:ih*2:0:0[int2];[int2][1:v]overlay=0:H/2[int3];[int3][2:v]overlay=W/2:0[int4];[int4][3:v]overlay=W/2:H/2[out]' \
-map [out] -c:v libx264 -crf 23 -preset veryfast output.mp4
まず、パッド フィルターは最初の入力ビデオのサイズを 2 倍にし、元のビデオを左上隅に残します。シリアル オーバーレイ フィルターは、パッド フィルターによって追加された黒いパディングの上に他の入力を配置します。
ビデオの解像度が異なる場合、コマンドを変更する必要があります。
私は現在、同様のプロジェクト(講義キャプチャ)に GStreamer を使用しています。あなたはおそらくvideomixer要素を探しています。この例を確認してください:ビデオ 4 方向分割画面 gstreamer パイプライン(スクリプトはここにあります)。
GStreamer は、Windows でも問題なく動作します。興味がある場合は、 GStreamer WinBuildsをチェックしてみてください。
例Windows で動作する基本的なスクリプトを次に示します (パイプラインの説明を解析するために C コードからのgst_parse_launch
呼び出し
を使用するため、バックスラッシュはありません)。
v0. ! queue
! decodebin
! ffmpegcolorspace
! videoscale
! video/x-raw-yuv,width=320,height=240
! videobox right=-320 bottom=-240
! ffmpegcolorspace
! vmix.sink_0
v1. ! queue
! decodebin
! ffmpegcolorspace
! videoscale
! video/x-raw-yuv,width=320,height=240
! videobox bottom=-240
! ffmpegcolorspace
! vmix.sink_1
v2. ! queue
! decodebin
! ffmpegcolorspace
! videoscale
! video/x-raw-yuv,width=320,height=240
! videobox right=-240
! ffmpegcolorspace
! vmix.sink_2
v3. ! queue
! decodebin
! ffmpegcolorspace
! videoscale
! video/x-raw-yuv,width=320,height=240
! ffmpegcolorspace
! vmix.sink_3
vmix. ! queue
! ffmpegcolorspace
! dshowvideosink
filesrc location="c:/test.mpg" name="v0"
filesrc location="c:/test.mpg" name="v1"
filesrc location="c:/test.mpg" name="v2"
filesrc location="c:/test.mpg" name="v3"
videomixer name=vmix
sink_0::xpos=0 sink_0::ypos=0 sink_0::zorder=0
sink_1::xpos=320 sink_1::ypos=0 sink_1::zorder=1
sink_2::xpos=0 sink_2::ypos=240 sink_2::zorder=2
sink_3::xpos=320 sink_3::ypos=240 sink_3::zorder=3
これは、 AviSynthが解決するように設計された一種の問題のように聞こえます。
AviSynthは本質的に、ビデオストリームを操作するためのスクリプト言語です。テキストファイルには、1つ以上の入力ビデオストリームに適用する操作が記述されています。テキストファイルはAviSynthエンジンに渡されます。このエンジンは、ソースストリームをフェッチするときに一度に1フレームずつ操作する仮想.AVIファイルを提供します。
AviSynthを、仮想.AVIファイルから読み取り、新しいファイルに書き込んで変更を保存する別のツールと組み合わせます。