Command-Line
使用 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
。它成功地執行了這兩個命令,但在這兩種情況下它都會產生不正確的結果(幀太多,所以似乎忽略了影片過濾器表達式)。我怎樣才能糾正我的
ffmpeg
或avconv
給出正確的結果?
首先,
-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