如何对视频进行编码然后进行滤波以改变块帧输出的位置?



假设视频为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操作)。

最新更新