Detecção incorreta de mudança de cena com avconv

1

De acordo com este artigo Eu usei com sucesso o comando

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

Eu tentei o segundo comando:

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

mas terminou com erro:

Undefined constant or missing '(' in 'scene'

Porque

$ 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

Eu tentei usar avconv . Ele executa os dois comandos com sucesso, mas em ambos os casos gera resultados incorretos (muitos quadros, aparentemente ignorando a expressão do filtro de vídeo).

Como posso corrigir meu ffmpeg ou avconv para fornecer os resultados corretos?

    
por xralf 05.02.2017 / 23:27

1 resposta

1

Primeiro de tudo, -vf precisa ser especificado após a entrada para afetá-lo, e parece ser a única razão pela qual o avconv trabalhou para o segundo comando: ele deve ter descartado seu filtro sem nem analisá-lo. Se você mover o argumento depois de -i , isso resultará no mesmo erro que ffmpeg deu a você. Versões mais recentes de ffmpeg realmente tratam isso como um erro.

Agora, o motivo pelo qual nenhum dos comandos está funcionando é simples: nenhuma das versões que você está usando suporta o filtro scene . Além disso, o filtro scene ainda parece estar ausente na ramificação principal de avconv a partir de agora Portanto, avconv simplesmente não suporta isso. Quanto ao ffmpeg , o filtro foi introduzido em r7286814 que não foi incluído na sua versão.

Por isso, você precisa de obter uma versão atualizada se quiser usar o filtro.

Uma vez instalado, mova -vf após -i e execute seu comando para obter seus resultados.

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