Command-Line

使用 avconv 檢測不正確的場景變化

  • February 27, 2017

根據這篇文章 ,我成功使用了命令

$ 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給出正確的結果?

首先, -vf需要在輸入之後指定才能影響它,這似乎是 avconv 為第二個命令工作的唯一原因:它一定已經丟棄了你的過濾器,甚至沒有解析它。如果將參數移到 之後,將導致與給您-i相同的錯誤。ffmpeg較新的版本ffmpeg實際上將其視為錯誤。

現在兩個命令都不起作用的原因很簡單:您使用的版本都不支持scene過濾器。更重要的是,截至目前,master 分支scene似乎仍然缺少過濾器,因此根本不支持它。至於,過濾器是在r7286814中引入的,它沒有進入你的建構。avconv``avconv``ffmpeg

因此,如果要使用過濾器,需要獲取最新版本。

安裝-vf後,移動-i,然後執行您的命令以獲取結果。

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

引用自:https://unix.stackexchange.com/questions/342751