avconv 的场景变化检测不正确

avconv 的场景变化检测不正确

根据本文 我成功使用了命令

$ ffmpeg -vf "select='eq(pict_type,I)'" -i somevideo.mp4 -vsync 0 -f image2 /tmp/thumbnails-%02d.jpg

我尝试了第二个命令:

$ ffmpeg -vf "select='gt(scene\,0.9)'" -i somevideo.mp4 -vsync 0 -f image2 /tmp/thumbnails-%02d.jpg

但以错误结束:

Undefined constant or missing '(' in 'scene'

因为

$ ffmpeg -version
ffmpeg version 0.8.17-4:0.8.17-0ubuntu0.12.04.1, Copyright (c) 2000-2014 the Libav developers
  built on Mar 16 2015 13:28:23 with gcc 4.6.3
The ffmpeg program is only provided for script compatibility and will be removed
in a future release. It has been deprecated in the Libav project to allow for
incompatible command line syntax improvements in its replacement called avconv
(see Changelog for details). Please use avconv instead.
ffmpeg 0.8.17-4:0.8.17-0ubuntu0.12.04.1
libavutil    51. 22. 3 / 51. 22. 3
libavcodec   53. 35. 0 / 53. 35. 0
libavformat  53. 21. 1 / 53. 21. 1
libavdevice  53.  2. 0 / 53.  2. 0
libavfilter   2. 15. 0 /  2. 15. 0
libswscale    2.  1. 0 /  2.  1. 0
libpostproc  52.  0. 0 / 52.  0. 0

我尝试使用avconv.它成功运行这两个命令,但在这两种情况下都会生成不正确的结果(帧太多,因此似乎忽略了视频过滤器表达式)。

我怎样才能纠正我的错误ffmpegavconv给出正确的结果?

答案1

首先, -vf需要在输入后指定才能影响它,这似乎是 avconv 对第二个命令起作用的唯一原因:它必须丢弃您的过滤器,甚至没有解析它。如果您将参数移到 后面-i,则会导致与ffmpeg给您的错误相同的错误。新版本ffmpeg实际上将其视为错误。

现在,这两个命令都不起作用的原因很简单:您使用的两个版本都不支持过滤scene器。更重要的是,scene过滤器似乎仍然缺失主分支因此 avconv,到目前为止,avconv根本不支持它。至于ffmpeg,过滤器是在r7286814这没有进入你的构建。

因此,你需要获得如果您想使用过滤器,请使用最新版本。

安装后,移动-vf到 后-i,然后运行命令来获取结果。

$ ffmpeg -i somevideo.mp4  -vf "select='gt(scene,0.9)'" -vsync 0 -f image2 /tmp/thumbnails-%02d.jpg

相关内容