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.