下面的(批处理)脚本生成了九个输入视频的马赛克:
FFMPEG ^
-y -i "v1.mp4" -i "v2.mp4" -i "v3.mp4" -i "v4.mp4" -i "v5.mp4" -i "v6.mp4" -i "v7.mp4" -i "v8.mp4" -i "v9.mp4" ^
-filter_complex "[0:v][1:v][2:v]hstack=3[Row0];[3:v][4:v][5:v]hstack=3[Row1];[6:v][7:v][8:v]hstack=3[Row2];[Row0][Row1][Row2]vstack=3[v]" ^
-map "[v]" -shortest "Mosaic3x3.mp4"
输入视频都是 1280x720,因此输出结果为 3840x2160,渲染时间较长。计划使用此脚本作为基础来制作更大的马赛克,渲染输出的时间会变得过长。
因此我希望了解以下内容:
是先缩放输入视频再堆叠,还是先缩放超大尺寸的马赛克输出?还是两者兼而有之(在输入和输出时缩放)?我感兴趣的是缩放和输出质量与处理时间之间的权衡:
对于 6x6 马赛克,假设最终分辨率为 1920x1080,如果我要在输入端缩放,我会将 1280x720 缩小到 320x180。我无法找出在任一端应用缩放的命令语法。
答案1
缩放 N 个中等尺寸的视频然后将它们堆叠起来,比将 N 个较大的视频堆叠到非常大的画布中然后缩小它要好一些。
ffmpeg ^
-y -i "v1.mp4" -i "v2.mp4" -i "v3.mp4" -i "v4.mp4" -i "v5.mp4" -i "v6.mp4" -i "v7.mp4" -i "v8.mp4" -i "v9.mp4" ^
-filter_complex "[0:v]scale=320:180[v0];[1:v]scale=320:180[v1];[2:v]scale=320:180[v2];[3:v]scale=320:180[v3];[4:v]scale=320:180[v4];[5:v]scale=320:180[v5];[6:v]scale=320:180[v6];[7:v]scale=320:180[v7];[8:v]scale=320:180[v8];[v0][v1][v2]hstack=3[Row0];[v3][v4][v5]hstack=3[Row1];[v6][v7][v8]hstack=3[Row2];[Row0][Row1][Row2]vstack=3[v]" ^
-map "[v]" -shortest "Mosaic3x3.mp4"