我正在尝试测量电影的“快速”程度(屏幕中的动作更多,快速的场景机会)。我不希望电影只有一个值,而是要看电影中的值以查看动作在其中的变化情况。规范化电影的帧速率(10 fps)后,我的想法是将每个帧与前一帧进行比较。如果场景发生变化,我不仅对此感兴趣,而且如果没有切割,那么我有多少动作。不仅人/物体运动,而且相机运动。总结一下场景中的节奏(我认为是这个术语)。
我的想法是使用ffmpeg中的scene
函数作为指标。但是看document和examples online我认为我只能使用场景变化检测的值作为返回帧信息的阈值,但我不能让ffmpeg返回值。是对的吗?有什么方法可以让它返回值?
答案 0 :(得分:5)
使用
ffmpeg -i in.mp4 -vf select='gte(scene,0)',metadata=print:file=scenescores.txt -an -f null -
创建的文本文件将具有如下输出:
...
frame:1440 pts:737280 pts_time:48
lavfi.scene_score=0.003069
frame:1441 pts:737792 pts_time:48.0333
lavfi.scene_score=0.001593
frame:1442 pts:738304 pts_time:48.0667
lavfi.scene_score=0.000077
frame:1443 pts:738816 pts_time:48.1
lavfi.scene_score=0.002219
...
答案 1 :(得分:1)
我发现很难解析ffmpeg输出,因此我创建了a wrapper in Python:
pip3 install scenecut_extractor
默认情况下,它将基于阈值提取场景剪辑,因此将为您提供参数上方的所有内容:
$ scenecut_extractor /path/to/file.mp4
默认情况下将输出JSON:
[
{
"frame": 114,
"pts": 114.0,
"pts_time": 3.8,
"score": 0.445904
},
{
"frame": 159,
"pts": 159.0,
"pts_time": 5.3,
"score": 0.440126
}
]
您可以设置-t 0
提取所有内容。检查-h
了解更多选项。