Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video FFMPEG:获取所有帧的场景变化检测值_Video_Ffmpeg - Fatal编程技术网

Video FFMPEG:获取所有帧的场景变化检测值

Video FFMPEG:获取所有帧的场景变化检测值,video,ffmpeg,Video,Ffmpeg,我试图衡量一部电影有多“快”(在屏幕上有更多的动作和快速的场景机会)。我不希望电影只有一个值,而是希望电影中的值能够看到动作在其中的变化。在标准化电影的帧速率(10fps)后,我的想法是将每一帧与前一帧进行比较。我不仅对场景是否发生了变化感兴趣,而且,如果没有剪辑,还有多少动作。不仅是人/物体的运动,还有摄像机的运动。总而言之,场景的节奏(我认为是术语) 我的想法是使用ffmpeg中的场景函数作为度量。但是看看这个,我想我只能用场景变化检测的值作为一个阈值来返回帧信息,但是我不能让ffmpeg来

我试图衡量一部电影有多“快”(在屏幕上有更多的动作和快速的场景机会)。我不希望电影只有一个值,而是希望电影中的值能够看到动作在其中的变化。在标准化电影的帧速率(10fps)后,我的想法是将每一帧与前一帧进行比较。我不仅对场景是否发生了变化感兴趣,而且,如果没有剪辑,还有多少动作。不仅是人/物体的运动,还有摄像机的运动。总而言之,场景的节奏(我认为是术语)

我的想法是使用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
  }
]