ffmpeg extract subtitle srt

¿Es posible extraer los subtítulos SubRip(SRT) de un video MP4 con ffmpeg?



extract subtitle (3)

Enventualmente descubrí por qué no tuve éxito:

La línea de comando especificada hubiera estado perfectamente bien si los subtítulos del video original estuvieran codificados en una representación basada en texto. Sin embargo, como se puede ver en el resultado de la línea de comando ffmpeg -i , los subtítulos están codificados en el formato "dvd_subtitle".

El formato dvd_subtitle almacena mapas de bits para cada subtítulo en el video. Por lo tanto, no hay forma de que ffmpeg sea capaz de traducir los mapas de bits en texto.

Para esta tarea, uno tiene que recurrir a un software basado en OCR que ayuda al usuario con la tarea de identificar cada subtítulo como texto de su representación de mapa de bits.

(Hay un subtítulo secundario basado en texto en el video fuente, pero no sé de dónde viene y no es visto por la mayoría de los jugadores populares. Para todos los efectos, este subtítulo "mov_text" parece ser un marcador de posición de stub , probablemente un artefacto de la conversión del DVD original)

Revisé la documentación de FFMpeg y muchos foros y descubrí que la línea de comandos correcta para extraer los subtítulos de un video .MP4 debería tener el siguiente aspecto:

ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt

Sin embargo, me sale el siguiente error, lo que me lleva a cuestionar si esto es factible:

Error al abrir el codificador para la corriente de salida # 0: 0 - tal vez parámetros incorrectos tales como bit_rate, rate, width o height

Utilizando ffmpeg -codecs , puedo confirmar que ffmpeg debería poder codificar los subtítulos subrip.

Usando ffmpeg -i video.mp4 , puedo ver que hay dos pistas de subtítulos incrustadas en el video:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ''video.mp4'': ... Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 720x572 [SAR 64:45 DAR 256:143], 1341 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s Stream #0:2(fra): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s Stream #0:3(eng): Subtitle: dvd_subtitle (mp4s / 0x7334706D) Stream #0:4(und): Subtitle: mov_text (text / 0x74786574)

EDITAR

He probado con la línea de comandos simplificada que se muestra en los comentarios, pero sigo recibiendo el mismo error. Aquí hay un enlace a la salida detallada detallado de ejecutar el comando. También intenté desactivar por completo los metadatos y los capítulos en la salida resultante, pero eso aún produce el mismo error.


Solo FYI, (No se pueden hacer comentarios debido a la reputación aún), pero extraer SRT de un MP4 dará como resultado un archivo formateado como MOV_Text no como el SRT regular. Todavía se agregará y funcionará, pero es como cambiar mp4 a m4v. Mientras que generalmente funciona, las cosas no funcionan igual en el código. Mov_text es horrible para ajustar manualmente la fuente / tamaño, etc. La mejor apuesta es descargar y probar una SRT de la web.

Esto funcionará, pero dará como resultado el archivo srt mov_text codificado:

ffmpeg -i in.mp4 out.srt


Intenta usar la opción de mapa ... si hay demasiadas secuencias en los archivos de entrada ....

La sintaxis sería:

ffmpeg -i video.mp4 -map 0: 4 out.srt

Dado que hay dos secuencias de subtítulos en su video, primero en 0: 3, que es dvdsubtitle, no se puede convertir a srt, por lo que convertiremos el segundo subtítulo en secuencia 0: 4 que es mov_text y es una copia de subtítulo para que se pueda convertir fácilmente. ...