Cómo mantener el último cuadro cuando se usa ffmpeg

9

Estoy cortando / convirtiendo algunos videos con ffmpeg. Lo que realmente me gustaría es que la salida mantenga el último fotograma durante unos segundos (con silencio para el audio). ¿Es posible tal cosa? ¿O tendré que obtener de alguna manera el último fotograma y hacer un nuevo video a partir de eso?

xorsyst
fuente

Respuestas:

11

Un método es usar el overlayfiltro de video . Asumiendo que su video es 640x480, 30 segundos de duración, 25 cuadros por segundo:

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
  • Configuré la duración del nullsrcfiltro de origen en 5 segundos más que input.mkv.

  • El comportamiento predeterminado de la superposición es repetir el último fotograma de la fuente superpuesta. Vea la eof_actionopción para otros comportamientos.

  • El audio en este ejemplo se está copiando (volviendo a mezclar) en lugar de volver a codificar.

  • La desventaja es que este ejemplo requiere una nueva codificación ya que se está utilizando un filtro, pero puede ser más simple que otros métodos, ya que es solo un comando.

lema
fuente
Eso suena genial, pero ¿puedo hacerlo si también estoy reemplazando la transmisión de audio con un archivo wav? Además, ¿necesito saber el tamaño del video fuente?
xorsyst
1
@xorsyst Sí, puede reemplazar el audio. Actualicé el ejemplo. Sí, este método requiere que conozca el tamaño de cuadro, la duración y la velocidad de cuadro del video fuente, pero todas estas variables pueden ser programadas. Ver FFprobe Tips .
llogan
0

Creo que la respuesta a su pregunta es "sí". No estoy muy familiarizado con FFMPEG, pero la forma más fácil que puedo ver para lograr su objetivo es primero extraer el último cuadro a una imagen, hacer un video de unos segundos y luego ejecutar una codificación que concatena el video principal y su video recién creado en una sola pasada.

AJ Henderson
fuente