Como adicionar quadros-chave adicionais ao vídeo usando o ffmpeg?

0

Eu quero adicionar quadros-chave na base de um intervalo específico (20 quadros) ao meu vídeo.

Por isso, usei o seguinte comando em ffmpeg :

ffmpeg -i <input> -vcodec libx264 -x264-params keyint=20:scenecut=0 -acodec copy out.mp4

A saída é que recebo quadros principais a cada 20 quadros.

Mas o vídeo original tinha um quadro chave, por ex. em frame 1, 12, 89....

Agora tenho frames principais no frame 1, 21, 41....

Eu não quero substituir os quadros-chave que já estavam lá. Eu quero adicionar quadros-chave adicionais, então parece com isso:

frame 1, 12, 21, 41, 89....

Como posso fazer isso?

    
por jjulianf 10.09.2018 / 14:19

2 respostas

2

Resposta curta: você não pode

Resposta longa: Ao usar o FFMpeg com reencoding (ou seja, qualquer outro codec que não seja copy ), cada imagem no fluxo de entrada será descompactada e disponível como um bitmap completo. Isso implica que, neste ponto do pipeline, os quadros 1, 12 e 89 não são mais "especiais" - são imagens como qualquer outra.

Agora, ao compactar via libx264 , você cria um vídeo que possui quadros-chave - eles serão colocados nos locais que você configurar, no caso de cada 20 quadros.

    
por 10.09.2018 / 14:28
1

force_key_frames tem uma opção para espelhar a cadência do quadro-chave do fluxo de origem (ainda não documentado - no meu todo), no entanto, isso não pode ser combinado com outras expressões em f_k_f.

No entanto, o que você pode usar é

-force_key_frames source -x264-params keyint=20:scenecut=0

Isso definirá um quadro-chave se o quadro de origem for um quadro-chave. No entanto, keyint é sempre medido a partir do último conjunto de quadros-chave, portanto, se sua origem tiver KFs em n=0,34,55,64 , o resultado terá KFs em n=0,20,34,54,55,64,84 - observe a falta de KFs em 40,60,80 . Observe também os KFs consecutivos em 54,55 , portanto é melhor ignorar os KFs de origem e deixar o scenecut funcionar.

    
por 11.09.2018 / 08:32