ffmpeg video-streaming keyframe segment hls

cómo cambiar el intervalo de fotogramas clave en ffmpeg



video-streaming keyframe (2)

Quería establecer el intervalo de fotogramas clave de un video de entrada en 5 segundos. Solo así podré lograr una segmentación HLS constante de 5 segundos con FFmpeg. ¿Cómo configurar el intervalo de fotogramas clave en 5 segundos con FFmpeg? (Se aprecia el código de línea de solicitud de FFmpeg)


Suspiro.

La información errónea con respecto a la opción de no-scenecut ha estado ocurriendo durante más tiempo del que puedo recordar. Nunca ingrese un valor para no-scenecut .

Un enlace a la documentación se puede encontrar here .

Para FFmpeg necesitas usar los siguientes dos interruptores:

-g 120 definirá un GOP de 120 cuadros para crear un GOP de cinco segundos para contenido de 23.976 fps. Esto funciona en conjunto con la opción no-scenecut .

-x264opts no-scenecut forzará la creación de fotogramas clave según el valor de GOP que utiliza FFmpeg. El valor predeterminado para libx264 es crear un fotograma clave cuando detecta un cambio de escena. Si inspecciona un archivo de salida usando MediInfo sin esa opción, verá scenecut=40 . Cuando se hace correctamente, será scenecut=0 . Si no se usa esta opción, los fotogramas clave se desalinearán para el contenido ABR y los tamaños de los segmentos serán impredecibles.

No confíe en mi palabra, ejecute lo siguiente en un shell bash donde $ inputfile es el nombre del archivo que desea analizar. Si usa los dos interruptores que se muestran arriba, verá una cadencia muy uniforme de los fotogramas clave volcados en el símbolo del sistema.

ffprobe -select_streams v -show_frames -show_entries / frame=pict_type -of csv $inputfile | grep -n I | cut -d '':'' -f 1

También puede hacer referencia a un artículo que escribí sobre cómo crear here contenido alineado con el marco ABR adecuado.


Tendrá que volver a codificar. Establezca el parámetro keyint de x264 en 5 * fps y desactive scenecut. Si tu fps es 24 por ejemplo:

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

Obviamente, esto no es óptimo para la calidad, pero coincidirá con su demanda.

Editado para cambiar no-scenecut a scenecut=0 , según la no-scenecut de scenecut=0 -boy.