使用FFmpeg对输入视频进行多次裁剪操作

5

我希望能够高效地将一个视频文件(2048x2048像素,100,000帧)分割成多个瓷砖。通常,将其分割成四个相等大小的象限(1024x1024像素,100,000帧)。 我可以使用ffmpeg的裁剪滤镜一个接一个地处理每个瓷砖:

ffmpeg -i in.avi -filter:v "crop=1024:1024:0:0" out1.mp4
ffmpeg -i in.avi -filter:v "crop=1024:1024:1023:0" out2.mp4

这是否可以组合成一个命令以提高执行速度?


这个能迁移到 https://video.stackexchange.com 吗? - David J.
1个回答

8

使用单个输入,裁剪然后映射到多个输出。例如,对于两个瓷砖:

ffmpeg -i in.avi -filter_complex \
"[0:v]crop=1024:1024:0:0[out1];[0:v]crop=1024:1024:1023:0[out2]" \
-map [out1] -map 0:a out1.mp4 \
-map [out2] -map 0:a out2.mp4

我没有音频,所以稍微修改了一下: ffmpeg -i x264In.avi -filter_complex "[0:v]crop=1024:1024:0:0[out1];[0:v]crop=1024:1024:1023:0[out2]" -map [out1] -map 0 out1.mp4 -map [out2] -map 0 out2.mp4 (我将其作为.bat脚本执行,并且不得不删除所有斜杠)Windows预览向我显示了裁剪后的视频作为out.mp4预览,但是当我播放out.mp4文件时,它们包含完整的视频。我错过了什么? - jlarsch
1
你弄错了:-map 0:a 是输入 0 中的音频(a)流(或流),如果你使用 -map 0,则映射输入 0 中的所有流。只需省略 -map 0:a 即可。 - aergistal
没关系,我对ffmpeg非常陌生,不知道自己在做什么。去掉音频的正确方法是: ffmpeg -i x264In.avi -filter_complex "[0:v]crop=1024:1024:0:0[out1];[0:v]crop=1024:1024:1023:0[out2]" -map [out1] out1.mp4 -map [out2] out2.mp4 现在可以正常工作了! - jlarsch
2
这对我有用,当我在map命令中添加[out1]和[out2]的引号后。-map "[out1]" -map 0:a out1.mp4 - Waylon Flinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接