FFMPEG HLS: cree solo una lista de reproducción o prediga los tiempos de los segmentos antes de codificar

FFMPEG HLS: cree solo una lista de reproducción o prediga los tiempos de los segmentos antes de codificar

Estoy usando ffmpeg para crear un sistema de transcodificación de video bajo demanda que sirve a los medios a través del formato HLS.

En este momento puedo transcodificar el video y publicarlo tal como está codificado, pero no puedo usar la función de búsqueda de mis reproductores porque la lista de reproducción (.m3u8) solo se genera a medida que se codifican los fragmentos. Intenté usar las -gopciones, configurándolas en 90 con longitudes de fragmentos de 3 segundos y 30 fps (29,7 fps para ser precisos). Pero la longitud real de los trozos fluctúa ligeramente. También intenté configurar el indicador HLS round_durations, pero el reproductor no funciona con él activado.

¿Los tamaños de los fragmentos dependen de las escenas que se están transcodificando, o es posible, al sondear el archivo, determinar rápidamente su patrón y generar un .m3u8 virtual completo al principio? ¿O hay alguna opción para hacer que ffmpeg genere la lista de reproducción sin codificar los archivos?

Este es el comando que estoy usando ahora mismo: (varias líneas para mayor claridad)

ffmpeg.exe -i input.mkv -c:v libx264 -c:a aac -crf 22 -preset faster
-format hls -sn -hls_time 3 -hls_base_url http://localhost/media/
-hls_list_size 0 -hls_flags split_by_time -hls_playlist_type event -g 90 -r 30 index.m3u8

Respuesta1

A menos que estés forzando manualmente una cadencia de fotogramas clave de alguna manera, la ubicación de los fotogramas clave de salida no se puede adivinar sin pasar los fotogramas por el codificador.

Puede forzar una ubicación de fotogramas clave más precisa soltando -gy agregando-force_key_frames expr:gte(t,n_forced*3)

información relacionada