2画面並べ動画ツール
2 本の動画を 1 つの画面に並べます(横並び/縦並び)。比較やビフォーアフター、リアクション動画をブラウザの中で作れます。
対応する FFmpeg コマンド
現在の設定に対応するコマンドラインです。設定を変えるとリアルタイムで更新されます。
ffmpeg -i inA.mp4 -i inB.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS,scale=640:720:force_original_aspect_ratio=decrease,pad=640:720:(ow-iw)/2:(oh-ih)/2,setsar=1[a];[1:v]setpts=PTS-STARTPTS,scale=640:720:force_original_aspect_ratio=decrease,pad=640:720:(ow-iw)/2:(oh-ih)/2,setsar=1[b];[a][b]hstack=inputs=2:shortest=1,format=yuv420p[v]" -map "[v]" -map "0:a:0?" -c:a aac -b:a 128k -shortest -c:v libx264 -preset veryfast -crf 24 -movflags +faststart output.mp4 使い方
- 2本のクリップを追加クリップ A(左/上)と B(右/下)に動画をドロップします。1 本 75MB 未満、合計 120MB までです。
- レイアウトを選ぶ横並びは左右に、縦並びは上下に並べます。
- 音声を選ぶクリップ A の音声を使うか、ミュートにします。
- 合成してダウンロード「動画を合成」を押すと、H.264 の MP4 で書き出します。再生して確かめてからダウンロードします。
うまくいかないとき
出力が思ったより短い
原因:短い方のクリップが終わると、出力も終わります。
対処:先に 2 本を同じ長さにトリミングします。
片側に黒帯が出る
原因:クリップの縦横比が枠と合わないため、引き伸ばさずに余白を黒で埋めています。
対処:向きのそろったクリップを使うか、先に枠の形に合わせてクロップします。横並びの枠(640×720)は縦長なので、16:9 の横長クリップは上下に黒帯が出ます。
メモリ不足・とても遅い
原因:2 本の動画をブラウザのタブの中で読み込み、再エンコードしているためです。
対処:数秒程度の短いクリップを使います。スマホでは 1 本 50MB 程度までが目安です(50MB を超えると注意が出ます)。
よくある質問
横長と縦長の動画を合成できますか?
できます。各クリップを枠に収まる大きさに縮小・拡大し、余白は黒で埋めるので、向きが違っても引き伸ばされません。
合成動画の長さは?
短い方のクリップの長さです。両方を最後まで見せたいときは、先に同じ長さにそろえます。
どちらの音声が使われますか?
クリップ A の音声か、音なしのどちらかです。2 本の音声を混ぜる機能はありません。音楽を付けたいときは、音なしで作ってから「BGM追加・音声ミックスツール」で足します。
出力解像度は?
横並びは 1280×720、縦並びは 720×1280 です。
動画はアップロードされますか?
いいえ。すべて ffmpeg.wasm でブラウザの中で処理し、ファイルは外部に送りません。
くわしい説明(設定の意味・制限・FFmpeg のコマンド)
設定の意味
使えるブラウザと制限
- ブラウザのメモリに限りがあるため、短いクリップ向けです。1 本 75MB 未満、合計 120MB までです。
- レイアウトは横並びと縦並び(同じ大きさの枠 2 つ)だけです。自由な配置やピクチャーインピクチャーはできません。
同じ処理を FFmpeg のコマンドで
ffmpeg -i a.mp4 -i b.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS,scale=640:720:force_original_aspect_ratio=decrease,pad=640:720:(ow-iw)/2:(oh-ih)/2,setsar=1[a];[1:v]setpts=PTS-STARTPTS,scale=640:720:force_original_aspect_ratio=decrease,pad=640:720:(ow-iw)/2:(oh-ih)/2,setsar=1[b];[a][b]hstack=inputs=2:shortest=1,format=yuv420p[v]" -map "[v]" -map "0:a:0?" -c:v libx264 -crf 24 -preset veryfast -c:a aac -b:a 128k -movflags +faststart -shortest out.mp4 ffmpeg -i a.mp4 -i b.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS,scale=720:640:force_original_aspect_ratio=decrease,pad=720:640:(ow-iw)/2:(oh-ih)/2,setsar=1[a];[1:v]setpts=PTS-STARTPTS,scale=720:640:force_original_aspect_ratio=decrease,pad=720:640:(ow-iw)/2:(oh-ih)/2,setsar=1[b];[a][b]vstack=inputs=2:shortest=1,format=yuv420p[v]" -map "[v]" -an -c:v libx264 -crf 24 -preset veryfast -movflags +faststart out.mp4