解像度が異なる 2 つのビデオを並べて 1 つに結合するにはどうすればよいでしょうか?

解像度が異なる 2 つのビデオを並べて 1 つに結合するにはどうすればよいでしょうか?

ビデオが2つあります

  1. deskshare.webm 1280x720 音声なし
  2. webcams.webm 640x480 音声付き

以下に説明するコマンドは必要に応じて機能します

ffmpeg -i deskshare.webm -i webcams.webm -filter_complex 
"[0:v]pad=(iw+640):ih[bg]; [bg][1:v]overlay=w+640" out.mp4

ffmpeg -i deskshare.webm -i webcams.webm -filter_complex 
"[0:v]pad=(iw+640):ih[bg]; [bg][1:v]overlay=main_w-overlay_w" out.mp4

2 番目のビデオの手動入力解像度 (私の場合は 640 ピクセル) を削除できる構文はありますか?

[1:v]width のようなものを使用してその値を自動的に取得することは可能ですか?

私の場合もこれでうまくいきます

ffmpeg -i deskshare.webm -i webcams.webm -filter_complex "[0:v]pad=(iw+iw/2):ih[bg]; [bg][1:v]overlay=main_w-overlay_w" out.mp4

ただし、これは 1 番目のビデオの幅が 2 番目のビデオの幅の 2 倍である場合にのみ機能します。

答え1

これは回りくどい方法で行うことができます。

使用

ffmpeg -i deskshare.webm -i webcams.webm -filter_complex 
   "[1:v][0:v]scale2ref=main_w:ih[sec][pri];
   [sec]setsar=1,drawbox=c=black:t=fill[sec];[pri][sec]hstack[canvas];
   [canvas][1:v]overlay=main_w-overlay_w" out.mp4

scale2ref は、セカンダリ ビデオの 1 つのコピーを、元の幅を維持しながらメイン ビデオの高さに合わせてサイズ変更します。次に、セカンダリ ビデオは黒で塗りつぶされ、メイン ビデオの右側に積み重ねられます。

次に、セカンダリ ビデオの 2 番目のコピーが、拡張されたキャンバスにオーバーレイされます。

ffmpeg 4.0 以降が必要です。

関連情報