Video FFMPEG:获取所有帧的场景变化检测值
我试图衡量一部电影有多“快”(在屏幕上有更多的动作和快速的场景机会)。我不希望电影只有一个值,而是希望电影中的值能够看到动作在其中的变化。在标准化电影的帧速率(10fps)后,我的想法是将每一帧与前一帧进行比较。我不仅对场景是否发生了变化感兴趣,而且,如果没有剪辑,还有多少动作。不仅是人/物体的运动,还有摄像机的运动。总而言之,场景的节奏(我认为是术语) 我的想法是使用ffmpeg中的Video FFMPEG:获取所有帧的场景变化检测值,video,ffmpeg,Video,Ffmpeg,我试图衡量一部电影有多“快”(在屏幕上有更多的动作和快速的场景机会)。我不希望电影只有一个值,而是希望电影中的值能够看到动作在其中的变化。在标准化电影的帧速率(10fps)后,我的想法是将每一帧与前一帧进行比较。我不仅对场景是否发生了变化感兴趣,而且,如果没有剪辑,还有多少动作。不仅是人/物体的运动,还有摄像机的运动。总而言之,场景的节奏(我认为是术语) 我的想法是使用ffmpeg中的场景函数作为度量。但是看看这个,我想我只能用场景变化检测的值作为一个阈值来返回帧信息,但是我不能让ffmpeg来
场景
函数作为度量。但是看看这个,我想我只能用场景变化检测的值作为一个阈值来返回帧信息,但是我不能让ffmpeg来返回这个值。是这样吗?有没有办法让它返回值?使用
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
...
我发现很难解析ffmpeg输出,因此我创建了: 默认情况下,它将基于阈值提取场景剪切,因此它将提供高于参数的所有内容:
$ 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
}
]
您可以设置
-t0
来提取所有内容。检查-h
以获得更多选项。它返回[AVFilterGraph@0x12856e0]没有这样的过滤器:“元数据”
和打开过滤器时出错代码>。知道为什么吗?过滤器是在2016年2月添加的。你需要一个新版本的二进制文件。谢谢,它可以工作。只是让其他人知道。我使用apt-get
安装了ffmpeg。以获取我所遵循的最新版本
[
{
"frame": 114,
"pts": 114.0,
"pts_time": 3.8,
"score": 0.445904
},
{
"frame": 159,
"pts": 159.0,
"pts_time": 5.3,
"score": 0.440126
}
]