video - 通过命令行 ffmpeg 有效地将视频裁剪为 4x4 网格/图 block /矩阵?

标签 video command-line ffmpeg crop video-processing

你好 Stackoverflow 社区!

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

我尝试使用 ffmpeg 和 mencoder 等所有库,但有 16 个输出可能慢至 0.15 倍。我的项目的目标是将视频分成 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 个映射输出,然后以不同的顺序重新组合它们。但我可以自己做其他部分。理想情况下,有一种方法可以移动像素 block ,例如 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.9 倍。对于 720p 输入,保持原样,速度为 2.5 倍。全部以 Haswell i5 为基准。

关于video - 通过命令行 ffmpeg 有效地将视频裁剪为 4x4 网格/图 block /矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43550344/

相关文章:

javascript - 在 ipad 中覆盖动态插入的视频标签

python - 使用 FFMPEG + Python 修剪视频 : Invalid Argument

ffmpeg - 检测部分帧的场景变化

php - 如何连接两个具有不同比特率的 mp3 文件

node.js - 如何创建接收视频流的 Node 服务器并将流保存为视频文件?

c++ - 与MATLAB相比,OpenCV从视频文件中提取的帧更少

windows - 如何不等待进程在批处理脚本中完成?

macos - 如何在 OSX 中从命令行启动 GUI Emacs?

python - 如何更改 Keras 后端(json 文件在哪里)?

codeigniter - 如何使用CodeIgniter获得YouTube嵌入代码?