你好 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/