Agregue fotogramas clave a la mitad del video sin volver a codificar el video completo

Agregue fotogramas clave a la mitad del video sin volver a codificar el video completo

Necesito agregar fotogramas I en el medio de los mp4 en las pausas publicitarias para poder segmentar a HLS y tener fotogramas I cuando el video vuelva a aparecer. Sé cómo hacer esto mientras recodifica todo el video y fuerzo fotogramas clave en particular. puntos, pero prefiero recortar el lugar (tal vez 1 segundo de video) donde se necesita el fotograma clave, agregar el fotograma clave y luego volver a unir el video. Esto debería reducir en gran medida el tiempo de codificación, ya que puedo copiar principalmente códecs, excepto el segundo de video en el que se agrega el I-frame.

El único problema es que el perfil de video y la configuración cambian cuando agrego el I-frame y no obtengo una puntada limpia al volver a armarlo todo. Entiendo que puedo volver a codificar con concat, pero estoy tratando de evitar ese tiempo de procesamiento.

Algunos ejemplos simples de lo que intento hacer con ffmpeg:

ffmpeg -i input.mp4 -ss 30 -t 1 -c:a copy -y -copyts clipped2.mp4

ffmpeg -i input.mp4 -t 30 -c copy -y -copyts clipped1.mp4

ffmpeg -i "concat:clipped1.mp4|clipped2.mp4" -c copy -y newOutput.mp4

Es posible que tenga que usar ffprobey especificar la velocidad de bits, el perfil y otras configuraciones para el clip de 1 segundo para que no tenga por defecto algunas cosas aleatorias, pero todavía no puedo hacer que esto funcione correctamente.

¿Alguien ha logrado esto? Esto se hace específicamente para la inserción de anuncios en el lado del servidor.

Respuesta1

estoy copiandoesta respuesta:

Puede usar ffmpeg para insertar fotogramas clave donde desee usando la -force_key_framesopción.

p.ej:

./ffmpeg -i input.mp4 -c:a copy -c:v copy -force_key_frames 0:05:00,0:10:00 out.mp4

pondrá un fotograma clave lo más cerca posible de la marca de 5 y 10. Los valores de tiempo pueden estar en formato hh:mm:ss o solo segundos (valores únicos, sin dos puntos).

Puede verificar si hay marcos insertados donde los desea usando:

./ffprobe -select_streams v:0 -skip_frame nokey -show_entries frame=pkt_pts_time out.mp4

información relacionada