Estou tentando extrair quadros-chave de um videoclipe. Eu tentei o seguinte comando, mas extrai todos os quadros.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Estou tentando extrair quadros-chave de um videoclipe. Eu tentei o seguinte comando, mas extrai todos os quadros.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Respostas:
Você pode simplificar o uso -skip_frame
sem a necessidade de select
filtro de vídeo:
ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg
-threads 1
, em comparação com o padrão, -threads auto
ele cria um cropdetect
gráfico de filtro ( ffmpeg -threads 1 -skip_frame nokey -i input.mkv -filter:v select='not(mod(n\,20))',cropdetect -an -f null /dev/null
) 2x mais rápido no meu sistema (60s a 30s)!
-threads 1
é que, caso contrário, a sequência dos quadros-chave de saída pode ser emitida fora de ordem. Se você tiver algum tipo de maneira post-hoc de lidar com esse problema, poderá reter vários threads. Além disso, parece que ainda é possível obter quadros-chave fora de ordem, mesmo durante o uso -threads 1
, mas agora neste caso todas essas ocorrências parecem ser acompanhadas / sinalizadas por um erro do decodificador h264 illegal short term buffer state detected
.
Exemplo usando os filtros select
e scale
:
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg
Algumas dicas:
Os filtros não devem vir antes da -i
opção, pois são uma opção de saída. Não sei de onde exatamente você obteve o comando, mas PICT_TYPE_I
não existe - deveria estar I
.
No scale
filtro, você pode substituir 73
ou fazer 41
com que o filtro calcule automaticamente a largura ou a altura para preservar a proporção: como scale=73:-1
ou scale=-1:41
. Isso evita o alongamento ou o esmagamento que podem resultar do dimensionamento "forçado".
A qualidade da saída pode ser controlada com -qscale:v
(ou o alias -q:v
). O alcance efetivo é uma escala linear de 2 a 31 e um valor mais baixo é uma qualidade mais alta.
Que você ffmpeg
permita um filtro antes que a entrada me diga que pode estar desatualizado. Faça o download de uma compilação estática recente para o seu sistema operacional ou crie você mesmo de acordo com os guias de compilação, se o acima não funcionar.
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I)" -vsync vfr frame-%02d.png
se este erro:
A opção vf (definir filtros de vídeo) não pode ser aplicada à URL de entrada 1508.mp4 - você está tentando aplicar uma opção de entrada a um arquivo de saída ou vice-versa. Mova esta opção antes do arquivo ao qual pertence. Erro ao analisar as opções do arquivo de entrada 1508.mp4. Erro ao abrir arquivos de entrada: argumento inválido
você consegue fazer isso:
ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I) -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg
== --------------------------------------------
Parâmetros "-i" antecipadamente