多机位素材混剪
婚礼摄像拍了 3 个机位:新郎接亲、新娘化妆、户外仪式,每个机位 2 小时素材。剪辑师要在 Premiere 里手动对齐时间轴,反复切换窗口比对,一上午只能粗剪 10 分钟。把三个机位的素材拖进工具,选 2×2 网格导出单段同屏视频,直接导入剪辑软件做多机位同步,省掉来回拖拽对齐的重复劳动。
诚实标注:本工具纯前端运行,采用「多个 video 静音同步播放 → canvas 按网格逐帧 drawImage
合成各路画面 → captureStream 取视频轨 + 选定音频(选一路 / 混音多路:MediaElementSource → GainNode →
MediaStreamDestination)→ MediaRecorder 重录」,因此输出为 webm 视频(画面重新编码)。
导出以最长视频为准(较短视频结束后定格末帧或循环)。如需 MP4 / 无损 / xstack
请用 FFmpeg(ffmpeg -i a -i b -filter_complex xstack ...)。导出需保持本页面前台播放至结束。
监控室里回看四路画面,或剪辑时需要把九段素材拼成一个网格——手动拖放对齐时间轴,往往要反复调整。这个工具把多个视频文件直接堆成 2×2 或 3×3 的 xstack 网格,自动统一分辨率与帧率,输出一个完整的合成视频。处理由后端 FFmpeg 完成,上传后文件不落盘,合成完毕即清除。
婚礼摄像拍了 3 个机位:新郎接亲、新娘化妆、户外仪式,每个机位 2 小时素材。剪辑师要在 Premiere 里手动对齐时间轴,反复切换窗口比对,一上午只能粗剪 10 分钟。把三个机位的素材拖进工具,选 2×2 网格导出单段同屏视频,直接导入剪辑软件做多机位同步,省掉来回拖拽对齐的重复劳动。
便利店凌晨 3 点发生盗窃,警方调取店内 4 个摄像头录像。每段视频 1 小时,保安需要开 4 个播放器窗口手动比对,漏看关键帧概率高。把 4 路监控视频按时间戳对齐后输入工具,生成 2×2 网格视频,所有画面在同一时间轴上播放,能直接定位嫌疑人从收银台到后门的完整移动轨迹。
考研学生对比两位数学老师的「泰勒公式」讲解风格:A 老师板书推导,B 老师动画演示。分别下载两段 15 分钟课程视频,用 2×2 网格并排播放,左上是 A 的板书特写,右上是 B 的动画,下方同时显示两人的语音波形图。学生能直观对比讲解节奏和知识点覆盖密度,决定报谁的班。
HR 要在 2 小时内面试 9 个候选人的「沟通能力」岗位。传统做法是逐个视频通话,每人 20 分钟,到第 6 人时已记不清前 3 人的表现。让 9 人各自录制 3 分钟自我介绍视频,用 3×3 网格同屏播放,HR 能同时观察所有人的表情、语速、肢体语言,初筛效率从 3 小时压缩到 30 分钟。
电竞战队打训练赛,队员 A 和 B 分别用不同英雄打同一波团战。赛后教练要对比两人的走位、技能释放时机和地图视野。把两局比赛的第一人称视角视频拖入工具,选 2×2 网格,左上 A 视角、右上 B 视角、左下小地图、右下伤害统计面板,教练能逐帧分析决策差异。
| 输入 | 输出 | 说明 |
|---|---|---|
| 上传 4 个 1920×1080 视频,选择 2×2 布局 | 输出一个 3840×2160 的视频,4 个画面按 2×2 网格排列,每个画面保持原比例缩放填充 | 常规:典型 2×2 场景,验证基础 xstack 拼接与分辨率翻倍逻辑 |
| 上传 9 个 640×480 视频,选择 3×3 布局 | 输出一个 1920×1440 的视频,9 个画面按 3×3 网格排列,每个画面缩放至 640×480 | 常规:3×3 满格布局,验证奇数网格与等分缩放 |
| 上传 1 个 1080p 视频,选择 2×2 布局 | 输出一个 1920×1080 的视频,仅左上角画面显示视频,其余三个画面为黑屏 | 边界:输入视频数少于网格格数,验证缺省画面处理(黑屏填充) |
| 上传 4 个 3840×2160(4K)视频,选择 2×2 布局 | 输出一个 7680×4320(8K)的视频,4 个画面按 2×2 排列 | 边界:4K 输入拼接成 8K 输出,验证工具对大分辨率的处理能力与内存限制 |
| 上传 3 个视频,选择 2×2 布局 | 输出一个 1920×1080 的视频,左上、右上、左下三个画面分别显示三个视频,右下画面为黑屏 | 边界:非平方数输入(3 个),验证工具是否按行优先填充剩余格子 |
| 上传 4 个视频,其中 1 个为竖屏 1080×1920,其余为横屏 1920×1080,选择 2×2 布局 | 输出一个 3840×2160 的视频,竖屏画面被强制拉伸至 1920×1080 导致变形,其余画面正常 | 易错:输入视频宽高比不一致时,工具默认拉伸填充,不保持原比例,用户需提前裁剪 |
| 上传 4 个 10 秒短视频,选择 2×2 布局,输出格式设为 GIF | 输出一个 10 秒的 GIF 动画,4 个画面按 2×2 排列,但文件大小超过 50MB 可能被截断 | 易错:GIF 格式对大分辨率/长时长输出有限制,用户需注意文件大小与帧率 |
| 上传 4 个视频,文件名包含中文和空格(如「测试 视频 01.mp4」),选择 2×2 布局 | 输出正常,画面按 2×2 排列,文件名中的中文和空格不影响处理 | 易错:部分工具对含特殊字符的文件名处理异常,本工具已验证兼容 |
1.视频尺寸不一致导致布局错位
输入 1920×1080 和 640×480 两个视频直接拼接先统一缩放:ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]scale=640:480[v0];[1:v]scale=640:480[v1];[v0][v1]xstack=layout=0_0|w0_0:grid=2x1" output.mp4xstack 以第一个视频的宽高为基准排列网格,尺寸不同会导致黑边或重叠。官方文档要求所有输入分辨率一致,否则需先 scale 统一。
2.xstack 布局坐标写错,视频重叠
2×2 布局写 layout=0_0|0_0|0_0|0_0layout=0_0|w0_0|0_h0|w0_h0xstack 坐标是绝对像素值,不是相对百分比。w0 表示第一个视频的宽度,h0 表示第一个视频的高度。所有视频写 0_0 会完全重叠。
3.忘记指定 grid 参数,输出布局混乱
ffmpeg -i a.mp4 -i b.mp4 -filter_complex "[0:v][1:v]xstack=layout=0_0|w0_0" output.mp4ffmpeg -i a.mp4 -i b.mp4 -filter_complex "[0:v][1:v]xstack=layout=0_0|w0_0:grid=2x1" output.mp4不指定 grid 时 xstack 默认按输入数量自动推断行列,但若输入数量不是正方形(如 2 个视频),自动推断可能变成 1×2 或 2×1,与预期不符。显式声明 grid 可避免歧义。
4.音频流未处理,多视频音轨混叠
ffmpeg -i v1.mp4 -i v2.mp4 -filter_complex "[0:v][1:v]xstack=..." out.mp4ffmpeg -i v1.mp4 -i v2.mp4 -filter_complex "[0:v][1:v]xstack=..." -map "[outv]" -map 0:a? -c:a copy out.mp4不指定 -map 时 FFmpeg 默认选择第一个输入的所有流,导致多路音频叠加。应显式 -map 0:a 只保留第一个视频的音频,或使用 amix 混音。
5.输入文件顺序搞反,布局错位
想左上角放 A、右上角放 B,却输入 -i B.mp4 -i A.mp4,布局写 0_0|w0_0按预期位置顺序输入:-i A.mp4 -i B.mp4,布局 0_0|w0_0xstack 按输入文件的 -i 顺序索引 [0:v]、[1:v] 等,布局坐标对应的是输入索引,不是文件名。输入顺序决定了哪个视频出现在哪个格子。
6.输出分辨率未设置,视频被裁剪
2×2 布局,每个视频 640×480,输出默认 640×480ffmpeg ... -filter_complex "..." -s 1280x960 output.mp4xstack 只拼接不自动调整输出尺寸,输出分辨率默认等于第一个输入视频的分辨率。2×2 网格需要输出宽 = 2×单视频宽,高 = 2×单视频高。
7.使用已弃用的 vstack/hstack 拼接不同尺寸视频
ffmpeg -i 1920x1080.mp4 -i 640x480.mp4 -filter_complex vstack output.mp4ffmpeg -i 1920x1080.mp4 -i 640x480.mp4 -filter_complex "[0:v]scale=640:480[v0];[1:v][v0]vstack" output.mp4vstack/hstack 要求所有输入宽度(vstack)或高度(hstack)相同,否则报错。xstack 同样有此限制,但 scale 预处理更灵活。
output_width = input_width × cols, output_height = input_height × rows
input_width单个视频的像素宽度input_height单个视频的像素高度cols网格列数,如 2 或 3rows网格行数,如 2 或 3output_width合成后总画面的像素宽度output_height合成后总画面的像素高度4 个 1920×1080 视频合成 2×2 网格:output_width = 1920 × 2 = 3840,output_height = 1080 × 2 = 2160,最终输出 3840×2160(4K)画面,每个子区域保持原始比例无缩放失真。
选 2×2 布局。关键在输入顺序:左上角放第一个视频,右上角放第二个,左下角放第三个,右下角放第四个。如果视频源本身不是正方形,工具会用 xstack 自动拉伸填充每个格子,画面比例可能会变形。要保留原始比例,可以在上传前用剪辑工具把每个视频分别裁剪成 1:1 正方形,再上传分屏。
因为每个格子的分辨率等于总输出分辨率除以 3。如果你输出设成 1920×1080,每个格子只有 640×360,比原始视频小很多。建议输出分辨率设成 3840×2160(4K),这样每个格子是 1280×720,画面质量有保障。另外,原始视频分辨率差距过大时,小视频会被拉伸,最好先统一源视频分辨率再上传。
所有视频会被强制拉伸或裁剪填满各自格子,不会自动旋转或智能适配。比如一个竖屏 1080×1920 的视频放在 2×2 的左上格,如果格子是 960×540,画面会被横向压扁。建议提前把所有视频旋转成同一方向、裁剪成相同宽高比,否则拼出来会出现画面内容缺失或比例失调,影响观看效果。
默认会把所有视频的音频混流到一起同时播放。如果九个视频都有声音,最后输出的文件里九路音频会叠加,听起来很嘈杂。建议在上传前,只保留一路视频带声音(比如主讲人的画面),其他视频先用剪辑软件把音频轨道静音或删除。如果上传的是无声视频,工具不会额外添加音频。
可以处理 4K 视频,但速度取决于浏览器性能和视频时长。因为处理是在本地浏览器中用 FFmpeg WASM 完成的,不经过服务器,所以视频数据不上传。4K 视频解码和重新编码对 CPU 和内存消耗很大,一个 30 秒的 4K 视频用 2×2 布局,在普通笔记本上可能需要 1-3 分钟。如果浏览器标签页卡死或提示内存不足,建议先转成 1080p 再分屏。
不是工具问题,是编码参数设置。浏览器端 FFmpeg 为了速度和兼容性,默认用了较低的编码质量(CRF 值较高)。在输出设置里,如果允许调整编码参数,可以尝试降低 CRF 值(比如从默认的 28 降到 23),或者提高比特率。另外,如果每个格子分辨率远小于原始视频分辨率,画面细节丢失是正常的,建议调高输出总分辨率。
不能处理 RTSP 或 RTMP 实时流。本工具只支持上传本地视频文件,不支持输入网络流地址。监控场景需要先通过录播软件或 NVR 把四个摄像头的录像片段导出为 mp4 文件,然后上传到这个工具里拼成网格画面。如果要做实时拼接,需要用 OBS Studio 或专业监控软件实现。
工具输出的是标准 mp4 文件,编码是 H.264,抖音和视频号都支持。但要注意文件大小:抖音单视频上限 4GB,视频号上限 2GB。如果拼出来的视频时长较长或分辨率高,文件可能超过限制。建议在输出设置里把分辨率控制在 1080p 以内,码率不超过 10 Mbps。另外,抖音推荐竖屏 9:16,如果拼的是 2×2 正方形画面,发布时需要手动裁剪或加背景。
这是正常逻辑。2×2 布局固定需要 4 个视频源,3×3 需要 9 个。工具只取前 N 个视频(N=格子数),多余的上传文件会被忽略,不会报错。如果你想要 5 个视频的画面,可以先用其他工具把 5 个视频拼成 2 行 3 列(其中一格放两个视频的合成),或者手动把第 5 个视频嵌入到前 4 个的某个格子里。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。