适用情况:
1、算是一个没有现成对齐算法比较取巧的方法,针对关键帧基本未变的情况,应该基本不会大变
2、原理为将关键帧提取出来,然后按照关键帧的帧数,定位具体位置进行视频切割
3、我们用于测试直播时测试视频类专项的前处理

提取关键帧信息 (需要分别提取两个文件的关键帧信息)

  1. 将文件关键帧存储成文件
ffmpeg -i source.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 1920*1080 -f image2 img_key/core-%02d.jpeg
  1. 输出关键帧对应的帧数位置
ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv sources.mp4 | grep -n I | cut -d ':' -f 1 > img_key/frame_indices.txt

按照关键帧精确时间点

【其中有个错误的尝试,直接使用帧数范围剪切,测试了下好像没法切掉开始的视频段

ffmpeg -i source.mp4 -vf trim=start_frame=501:end_frame=6212 -an source_key_cut.mp4

比如提取到文件 1 关键帧范围 a1,b1(指的第几帧),文件 2 关键帧范围 a2,b2
fps 可以从 ffprobe 命令中获取

ffmpeg -i source.mp4 -ss [a1/fps] -t [(b1-a1)/fps] -vcodec copy cut_source.mp4
ffmpeg -i 480.mp4 -ss [b2/fps] -t [(b2-a2)/fps] -vcodec copy cut_480.mp4

-ss 是起始时间点 -t 是持续时间

后续

1、还是得写算法对齐视频,或者配合图像识别算法自动对齐,手动不是长久之计


↙↙↙阅读原文可查看相关链接,并与作者交流