通过命令行 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 上进行基准测试。
你好 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 上进行基准测试。