假设视频为1920x1080, 3分钟。我想把每个帧分成4个块。所以每个方块是480x270。然后,我想把block 1放到4的位置。第4块到第1位。https://i.ibb.co/QkGpKN6/Naruto-Uzumaki.png
确切地说,我可以将视频帧提取为图像。然后,编辑该图像。但画质变差了,尺寸变大了。缺点是需要两倍的时间。
ffmpeg -r 1 -i input.mp4 -r 1 output_%d.jpg
// convert back image to video after block frame set to specific position in backend.
ffmpeg -r 23.97602397602398 -i output_%d.jpg -c:v h264 -r 23.97602397602398 output.mp4
有直接的方法吗?
FFmpeg的-vf
,-af
和-filter_complex
选项接受过滤器的组合作为过滤图(逗号连接它们,分号有多个链)。
对于您的目的,您可以先尝试这个过滤器组合(在crop
+overlay
之前):
ffmpeg -i input -vf 'untile=2x2,shuffleframes=0 2 1 3,tile=2x2' output
你可能想要不同的洗牌顺序。试着弄清楚。
阅读文档了解他们的选项:https://ffmpeg.org/ffmpeg-filters.html
编辑如果你想使用裁剪叠加,试试
ffmpeg -i input.mp4 -filter_complex
"[0]crop=427:240:0:0[v1];
[0]crop=427:240:427:0[v2];
[0]crop=427:240:0:240[v3];
[0]crop=427:240:427:240[v4];
[0][v1]overlay=x=0:y=0[v5];
[v5][v2]overlay=x=427:y=0[v6];
[v6][v3]overlay=x=0:y=240[v7];
[v7][v8]overlay=x=427:y=240[out]"
-c:v libx264 -crf 30 output.mp4
我个人更喜欢另一种方法(一种更紧凑的方法)
另一个选择是使用xstack
过滤器而不是overlay
过滤器(一个xstack
负责所有overlay
操作)。