Extracción de subtítulos de QuickTime mov_text con ffmpeg

Extracción de subtítulos de QuickTime mov_text con ffmpeg

Tengo un .movarchivo que tiene mov_textpistas de subtítulos formateadas que se crearon utilizando la antigua (ahora obsoleta) función "Pista de texto" de QuickTime 7 Pro. Esto es lo que ffmpeg -i myfile.movme habla de ellos:

  Stream #0:4(eng): Subtitle: mov_text (text / 0x74786574), 640x116, 0 kb/s (default)
    Metadata:
      rotate          : 0
      creation_time   : 2021-11-20T03:08:45.000000Z
      handler_name    : Apple Text Media Handler

Actualmente todavía tengo acceso a QuickTime 7 Pro, donde puedo extraer los subtítulos para luego convertirlos a SubRip o algún otro formato que otros programas puedan leer. Sin embargo, necesito actualizar mi sistema y QuickTime 7 Pro no se ejecuta en macOS Catalina y superiores, por lo que estoy buscando una manera de poder seguir accediendo a esos subtítulos en sistemas más nuevos. Parece ffmpegque es el camino a seguir pero todavía estoy estancado.

Esto es lo que he probado:

ffmpeg -i test.mov -map 0:s:0 -c copy -f data QT-subtitles.txt

me da el texto plano de los subtítulos pero sin marcas de tiempo, por lo que es bastante inútil para convertir los subtítulos a un formato diferente.

ffmpeg -i test.mov -map 0:s:0 QT-subtitles.srt

convierte correctamente los subtítulos a SubRip, incluidas las marcas de tiempo. Pero elimina los saltos de línea y otros formatos.
También me da los siguientes mensajes de error de datos no válidos encontrados:

Stream mapping:
  Stream #0:4 -> #0:0 (mov_text (native) -> subrip (srt))
Press [q] to stop, [?] for help
[mov_text @ 0x7fa492823200] invalid UTF-8 byte in subtitle
[mov_text @ 0x7fa492823200] Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option
Error while decoding stream #0:4: Invalid data found when processing input
[mov_text @ 0x7fa492823200] invalid UTF-8 byte in subtitle
[mov_text @ 0x7fa492823200] Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option
Error while decoding stream #0:4: Invalid data found when processing input
size=       6kB time=00:02:04.30 bitrate=   0.4kbits/s speed=3.32e+04x    
video:0kB audio:0kB subtitle:3kB other streams:0kB global headers:0kB muxing overhead: 82.697044%

Sugerencias de los comentarios a continuación para especificar -c texto -sub_charenctodas me dan los mismos resultados.

Por lo tanto, espero encontrar una manera de extraer el subtítulo a un archivo de texto simple que todavía tenga formato QTText (ver más abajo) o que de alguna otra manera conserve los saltos de línea y otros formatos. Así es como se ve el QuickTime Text Track original como archivo de texto cuando lo extraigo y lo exporto a través de QuickTime 7 Pro (ver especificacionesaquí).

{QTtext}{font:Verdana}{plain}{size:36}{textColor: 65535, 65535, 65535}{backColor: 0, 0, 0}{justify:default}{timeScale:30}{width:640}{height:116}{timeStamps:absolute}{language:0}{textEncoding:0}
[00:00:00.00]
Text here {bold} bold word {plain} text here 
[00:00:01.12]
Text here text here text here 
    Next line here (respects spaces)
[00:00:02.14]

Luego podría simplemente escribir un script para convertir las etiquetas de formato, como {bold}etc., en etiquetas html, que creo que SubRip entiende.

¿Hay alguna forma de especificar el formato de salida ffmpegademás de adivinar lo que necesito de la extensión del archivo, como srto txt? (Estoy pensando en particular que si pudiera especificar mov_textcomo salida podría darme un archivo con formato QTText como el de arriba... pero ¿cómo haría eso?)

Si ffmpegno puedo hacer el trabajo, estaré encantado de probar otras herramientas.

Respuesta1

Si está dispuesto a transcodificar los subtítulos de mov_text a otra cosa (por ejemplo, archivos Subrip SRT), puede intentar lo siguiente:

ffmpeg -i test.mov -map 0:s:0 -c:s srt subtitles.srt

información relacionada