You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用FFmpeg实现两个视频不同起始帧的帧对比?

如何使用FFmpeg实现两个视频不同起始帧的帧对比?

当然可以实现啦!你之前用select滤镜没达到预期,问题出在这个滤镜只是筛选保留符合条件的帧,但没调整帧的时间戳——video2的第5帧还是带着原视频里的时间戳,FFmpeg会自动对齐两个视频的时间戳,导致video1的前5帧因为没有对应时间的video2帧被丢弃,最终看起来像是俩视频都从第5帧开始对比了。

要实现「video1从第0帧开始,video2从第5帧开始,逐帧错位对比」的需求,咱们用trim+setpts组合滤镜就能搞定,这方法既不会损失质量,效率也高,完全不用生成单帧图片或者重新编码。

给你正确的命令:

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[1:v]trim=start_frame=5,setpts=PTS-STARTPTS[v2]; [0:v][v2]blend=difference,blackframe=1:10" -f null -

我给你拆解下每个部分的作用:

  • [1:v]trim=start_frame=5:直接从video2的第5帧开始截取视频流,跳过前面的帧
  • setpts=PTS-STARTPTS:把截取后的video2流的时间戳重置为从0开始,这样它的第一帧(原第5帧)就会和video1的第0帧时间完全对齐
  • 最后把处理后的video2(标记为[v2])和原video1的视频流做blend=difference对比,再用blackframe检测全黑帧,逻辑和你原来的命令一致,只是解决了帧对齐的问题

这样运行后,就会实现你要的效果:video1的第0帧对比video2的第5帧,video1的第1帧对比video2的第6帧,以此类推,完美实现错位帧对比~

备注:内容来源于stack exchange,提问作者hell

火山引擎 最新活动