Estoy generando contenido hls en vivo de velocidad de bits única de la transmisión rtsp en vivo. Estoy usando el siguiente comando
ffmpeg -v verbose -i rtsp://127.0.0.1:8080/test.sdp \
-vcodec libx264 -acodec aac -ac 1 -strict -2 -crf 18 -profile:v baseline \
-maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header \
-hls_time 10 -hls_list_size 3 -hls_wrap 4 -hls_flags delete_segments \
-start_number 1 /usr/local/apache-tomcat-7.0.53/webapps/ROOT/hls/index1.m3u8
¿Cómo puedo modificar el comando ffmpg anterior para generar contenido de salida de velocidad de bits múltiple? Por favor, ayúdame.
El concepto que necesita para generar múltiples salidas desde una sola entrada con ffmpeg se demuestra muy claramente (al menos para mí lo fue) en https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs
Básicamente,
ffmpeg -i someinput [output_options] someoutput1 [output2_options] someoutput2
es el patrón. Parece que ya sabes cómo usar el rtsp como entrada y sabes cómo generar una única salida con una tasa de bits determinada. También debe repetir todo el bloque de salida (todo después de su cadena de entrada rtsp), y cada vez cambiar su resolución-s
y su tasa de bits (está usando -crf, por lo que querrá disminuirlo para obtener una resolución más alta / mayor calidad y aumentar para baja resolución, menor calidad).Personalmente, usaría crf para las representaciones de HLS y con libx265, la regla que uso es
frame_width * frame_height * frame_rate * 0.1
obtener la tasa de bits "ideal" para un tamaño de cuadro dado. Tendrá que cambiar la ecuación si desea seleccionar bitrates para apuntar, luego averiguar el tamaño de fotograma a partir de eso. El valor ".1" puede ir más alto, pero no verá muchos beneficios en general (el contenido más complejo utilizará mejor un valor más alto) y rara vez voy por debajo de 0.07.fuente