¿Cómo extraer subtítulos de video usando ffmpeg?

34

Estoy tratando de extraer subtítulos de video como .srtarchivo, utilicé el siguiente comando:

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

Pero recibí un error como opción no reconocida. codec:s:0:1 Entonces, ¿puede decirme el comando exacto y cómo extraer un subtítulo como .srtarchivo en video?

vijay
fuente
umair: ¿deberías decirme en el símbolo del sistema?
vijay
Tengo el mismo problema. ¿Conseguiste que esto finalmente funcionara?
Maxime Labelle

Respuestas:

51

Simple:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL / ruta del archivo de entrada.
  • -map : Designa una o más secuencias de entrada como fuente para el archivo de salida.
  • s: 0 : selecciona la secuencia de subtítulos.
jm3
fuente
2
Esto funcionó para mí con un archivo MP4 con subtítulos incrustados.
Rubens Mariuzzo
11
Esto descargaría la primera pista de subtítulos. Si hay varios, use 0:s:1para descargar el segundo, 0:s:2para descargar el tercero, y así sucesivamente.
Fabien Snauwaert
55
@ jm3 ¿Sabrías alguna forma de extraer automáticamente todas las secuencias de subtítulos de un archivo, nombrándolas después de su identificador de idioma (por ejemplo, eng, fre, dut, etc.)?
p.
¿Por qué es tan lento cuando se extrae del gran contenedor MKV (~ 4 gb)?
usuario25
Para extraer más subtítulos a la vez, debe duplicar los -mapparámetros para cada archivo. También incluye -c copyde forma que solo extrae el archivo sin tratar de procesarlo: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. De todos modos, llevará mucho tiempo porque ffmpeg debe leer todo el archivo de video para encontrar todas las partes de las transmisiones de subtítulos.
Radek Pech
8

-codec:s:0:1Es incorrecto. Si lo usa -codec:s:0, ffmpeg usará el códec indicado para la primera secuencia de subtítulos que se pasa a la salida, si lo usa -codec:s:1, lo usará para la segunda secuencia de subtítulos, etc.

También puede usar -codec:spara seleccionar todas las secuencias de subtítulos de salida, o -codec:2para seleccionar la tercera secuencia de salida, independientemente de lo que sea.

Probablemente esté confundido porque la -mapopción se comporta de una manera diferente; allí, debe seleccionar de qué entrada proviene la secuencia seleccionada. (por lo tanto, -map 0:s:0tomaría la primera secuencia de subtítulos de la primera entrada y la enviaría a la salida). Sin embargo, -mapes para seleccionar qué secuencias desea tomar de las entradas; mientras que la mayoría de las otras opciones que usan la asignación de flujo son para usar en los flujos después de haber sido seleccionados (por lo que no es necesario especificar de qué archivo de entrada provienen), ya que se pasan a la salida.

maldad
fuente
evilsoup: usaría el siguiente comando E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ rutina.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, parece un error i no se pudo encontrar un formato de salida adecuado para 'srt', ¿puede decirme el comando para extraer un subtítulo en video ...
vijay
2
Prueba: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg debería detectar que quieres subtítulos srt del nombre del archivo de salida)
evilsoup
Solía: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srteso debería copiar todos los subtítulos en el archivo srt.
Stuart
@Stuart no extrae todos los subtítulos
usuario25
1
@evilsoup -codec:ses igual a, -codec:s:0por lo que no selecciona todos los subtítulos ... extraerá la primera pista de texto
usuario25