Transcodifique HLS m3u8 a MP4 e incluya una pista de texto

2

¿Es posible con FFMPEG convertir un m3u8 a un MP4 y mantener la pista de los subtítulos (texto)?

Al mirar la transmisión de Apple, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 veo que la transmisión de video menciona los subtítulos, pero parece que no puedo encontrar Una forma de extraerlos.

Stream # 0: 0: Video: h264 (Principal) ([27] [0] [0] [0] / 0x001B), yuv420p (tv, smpte1
70m / smpte170m / bt709), 400x300, subtítulos , 29.92 fps, 29.92 tbr, 90k tbn, 1
80k tbc

Los múltiples intentos que he hecho transcodifican a mp4 pero deja caer los subtítulos.

He usado VLC en el manifiesto y tiene "subtítulos", pero después de transcodificar el mp4 no.

Usó el comando: ffmpeg -i https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 -c copy -bsf:a aac_adtstoasc out.mp4

Justin
fuente

Respuestas:

2

Me las arreglé para reunir suficientes piezas de información para completar esto. Es una combinación de 3 comandos.

Usando ffmpeg versión 2.8.4

Primero, los segmentos de la lista de reproducción deben fusionarse en un solo archivo MPEG-TS:

ffmpeg -i [playlist_url].m3u8 -c copy [filename].ts

A continuación, necesitamos extraer los subtítulos del archivo:

ffmpeg -f lavfi -i "movie=[filename_from_last_step].ts[out0+subcc]" [filename].srt

Nota: Solo podría hacer que funcione si el archivo ts y la ruta actual del cmd coinciden.

Por último, combina el archivo ts y srt y transcodifica a MP4:

ffmpeg -i [filename_from_first_step].ts -i [captions].srt -c:v copy -bsf:a aac_adtstoasc -c:s mov_text [out_file_name].mp4

Esto le dará un MP4 con los subtítulos incrustados, así como un archivo srt independiente si su reproductor no admite subtítulos incrustados.

Justin
fuente
1

Si Closed Captions significa un flujo CEA-608 o 708, entonces estos están extrañamente empaquetados, es decir, incrustados dentro del flujo de video, y ffmpeg no puede copiarlos ni codificarlos.

Puede intentar usar CCextractor para extraerlos. Si no funciona en la secuencia. Descargue los segmentos individuales, conéctelos e intente con eso.

Una vez extraído, puede codificarlos usando -c:s mov_texten el MP4.

Gyan
fuente
Los puntos 1 y 3 están listos, pero el punto 2 se puede hacer ffmpegya que finalmente encontré un error con la solución.
Justin