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
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 umcropdetect
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 h264illegal short term buffer state detected
.Exemplo usando os filtros
select
escale
: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, masPICT_TYPE_I
não existe - deveria estarI
.No
scale
filtro, você pode substituir73
ou fazer41
com que o filtro calcule automaticamente a largura ou a altura para preservar a proporção: comoscale=73:-1
ouscale=-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.fonte
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:
== --------------------------------------------
Parâmetros "-i" antecipadamente
fonte