通过命令行 ffmpeg 有效地将视频裁剪成 4x4 grid/tiles/matrix?

Crop video into a 4x4 grid/tiles/matrix efficiently via command-line ffmpeg?

你好 Whosebug 社区!

我不敢问问题,但似乎没有有效的方法来获取单个输入视频并将矩阵应用 transformation/split 视频分成大小相等的片段,最好是每个输入 4x4=16 个片段。

我尝试使用所有的库,例如 ffmpeg 和 mencoder,但是有 16 个输出可能会慢到 0.15x。我项目的目标是将视频分成 16 个片段,重新排列这些片段并组合回最终视频;后来在 HTML5 canvas 中逆转了这个过程。这是一张图片,可以帮助您理解我在说什么: the source but also the final destination after reorganizing the pieces

after the segments are exported, I will recombine the pieces in a puzzle manner (they are also inverted and rotated but unrelated)

我不相信你可以在一个命令中完成这一切,所以我的目标是快速裁剪成 16 个映射输出,然后以不同的顺序重新组合它们。但我可以自己做其他部分。理想情况下,应该有一种方法可以移动像素块,例如 100x100,然后四处移动。我的数学不够强.. 我真的很感谢你们所做的工作!

admin@dr.com

基本模板是

ffmpeg -i in.mp4
  -filter_complex
     "[0]split=16[a][b][c][d][e][f][g][h][i][j][k][l][m][n][o][p];
      [a]crop=iw/4:ih/4:0*iw/4:0*ih/4[a];
      [b]crop=iw/4:ih/4:1*iw/4:0*ih/4[b];
      [c]crop=iw/4:ih/4:2*iw/4:0*ih/4[c];
      [d]crop=iw/4:ih/4:3*iw/4:0*ih/4[d];
      [e]crop=iw/4:ih/4:0*iw/4:1*ih/4[e];
      [f]crop=iw/4:ih/4:1*iw/4:1*ih/4[f];
      [g]crop=iw/4:ih/4:2*iw/4:1*ih/4[g];
      [h]crop=iw/4:ih/4:3*iw/4:1*ih/4[h];
      [i]crop=iw/4:ih/4:0*iw/4:2*ih/4[i];
      [j]crop=iw/4:ih/4:1*iw/4:2*ih/4[j];
      [k]crop=iw/4:ih/4:2*iw/4:2*ih/4[k];
      [l]crop=iw/4:ih/4:3*iw/4:2*ih/4[l];
      [m]crop=iw/4:ih/4:0*iw/4:3*ih/4[m];
      [n]crop=iw/4:ih/4:1*iw/4:3*ih/4[n];
      [o]crop=iw/4:ih/4:2*iw/4:3*ih/4[o];
      [p]crop=iw/4:ih/4:3*iw/4:3*ih/4[p];
      [b][d][i][p]hstack=4[w];
      [n][g][j][c]hstack=4[x];
      [e][o][a][l]hstack=4[y];
      [h][f][m][k]hstack=4[z];
      [w][x][y][z]vstack=4"
      out.mp4

不漂亮,但完成了工作。最好是您的视频尺寸为 (mod 4)。如果不是,则在 vstack 之后可能需要一个缩放器。指定给 hstacks 的输入控制着片段的混洗。

重新排列部分发生得非常快 - 1080p 输入速度为 7 倍。编码将其降低到 0.9 倍。如果输出为 720p,则跳转到 1.9x。对于 720p 输入,保持原样,速度为 2.5 倍。全部在 Haswell i5 上进行基准测试。