Como manter o último quadro ao usar ffmpeg

9

Estou cortando / convertendo alguns vídeos com ffmpeg. O que eu realmente gostaria é que a saída mantenha o último quadro por alguns segundos (com silêncio para áudio). É possível uma coisa dessas? Ou terei de alguma forma obter o último quadro e fazer um novo vídeo com isso?

xorsyst
fonte

Respostas:

11

Um método é usar o overlayfiltro de vídeo . Supondo que seu vídeo tenha 640 x 480, duração de 30 segundos e taxa de 25 quadros:

ffmpeg -f lavfi -i nullsrc=s=640x480:d=35:r=25 -i video.mp4 -i audio.wav -filter_complex \
"[0:v][1:v]overlay[video]" -map "[video]" -map 2:a -codec:a copy -shortest output.mkv
  • Defino a duração do nullsrcfiltro de origem como 5 segundos a mais input.mkv.

  • O comportamento padrão da sobreposição é repetir o último quadro da fonte sobreposta. Veja a eof_actionopção para outros comportamentos.

  • O áudio neste exemplo está sendo copiado em fluxo (re-mixado) em vez de ser recodificado.

  • A desvantagem é que esses exemplos exigem recodificação desde que um filtro esteja sendo usado, mas pode ser mais simples que outros métodos, pois é apenas um comando.

llogan
fonte
Parece ótimo - mas posso fazê-lo se também estiver substituindo o fluxo de áudio por um arquivo wav? Além disso, preciso saber o tamanho do vídeo de origem?
Xorsyst # 30/14
11
@xorsyst Sim, você pode substituir o áudio. Eu atualizei o exemplo. Sim, esse método exige que você saiba o tamanho, a duração e a taxa de quadros do vídeo de origem, mas todas essas variáveis ​​podem ser scripts. Consulte Dicas do FFprobe .
Llogan
0

Eu acredito que a resposta para sua pergunta é "sim". Não estou familiarizado com o FFMPEG, mas a maneira mais fácil de alcançar seu objetivo é extrair primeiro o último quadro de uma imagem, gravar um vídeo de alguns segundos e depois executar uma codificação que concatene o vídeo principal e o seu vídeo. vídeo recém-criado em uma passagem.

AJ Henderson
fonte