Pegar subtítulos a un video en Linux con un solo comando 29

Muchas veces necesitamos pegar subtítulos a un video, y a pesar de que existen muchas opciones, muchas requieren bastantes pasos para poder hacerlo, o espera de horas para poder obtener el video con los subtítulos incrustados.

De entre todas las maneras que probé, la más simple y rápida (pega subtítulos a una película en sólo 15 minutos en mi PC, en comparación de otros métodos que tardaron más de 2 horas) es utilizando mencoder, un codificador de video libre.

Para esto debemos, en primer lugar, tener instalado el mencoder. Eso depende de la distribución que uses. En Ubuntu puede hacerse con:

sudo apt-get install mencoder

Luego, debemos usar este comando, modificando los nombres de los archivos para acomodarse al caso particular:

mencoder archivo_original -sub archivo_subtitulo -oac copy -ovc xvid -xvidencopts pass=1 -o videonuevo -subcp utf-8 -font ruta_a_la_fuente -subfont-text-scale 3.8

Y con este simple comando, ya tenemos los subtítulos pegados a un archivo. Pueden jugar con el número que sigue a -subfont-text-scale para cambiar el tamaño de la letra. También pueden cambiar lo que sigue a -ovc si quieren que el video final quede con un codec diferente.

Si quieren aprender más les aconsejo ver el manual del comando (man mencoder). La cantidad de opciones que nos ofrece es mucho más grande que la que se muestra en la “plantilla” de comando que puse en este post.

Por último, dejo como ejemplo el video ganador del concurso “We’re Linux” organizado por la Linux Fundation, “What does it mean to be free?”, al que le pegué los subtítulos que armó Gonzalo Delgado, miembro del LUG Tucumán (y ya que hablo del LUG no se olviden de asistir al FLISOL):

29 thoughts on “Pegar subtítulos a un video en Linux con un solo comando

  1. Reply malev Abr 16,2009 12:46 pm

    y donde está el video?

  2. Reply Marcelo Guzmán Abr 16,2009 1:20 pm

    @malev: Lo mismo me pregunto. Sin embargo, podés verlo en mi blog :mrgreen: :

    http://losojosdetux.com.ar/2009/04/¿que-significa-ser-libre/

    El último post de Marcelo Guzmán publicado en su blog [site] ..¿Qué significa ser libre?

  3. Reply Sergio Abr 16,2009 3:53 pm

    @malev: Ya está el video, me había olvidado de ponerlo. Es que era tarde y estaba haciendo un práctico que tenía que entregar hoy.

    @Marcelo Guzmán: Eso es spam.

  4. Reply fer Abr 26,2009 11:13 am

    Sencillo y practico, pero tengo una duda, fijate que me cree un mi sh, a partir del comando que nos distes, lo termina de hacer bien y todo excelente, pero cuando lo quiero ver, esta todo mal la pelicula, no logro verlo. me faltara algun codec? es una pelicula en avi por supuesto y los subs en srt.

    saludos desde Guatemala

  5. Reply Sergio Abr 27,2009 3:15 am

    @fer: No podría determinar exactamente cuál es la causa. Es posible que sea un tema de codecs.

    ¿La película original podías verla sin problema? ¿Tenés otra PC para ver si el video resultante en las demás se ve bien? ¿Escuchás el sonido? ¿Sin usar el script, o sea ingresando sólo el comando en la consola, funciona?

    Sería útil también que publicaras el script así podemos analizar un poco más el tema.

    Si el video original se ve bien creo que no debería haber problema con el video resultante, ya que con -ovc copy estás diciendo que use el mismo codec que ya tenía el video.

    Espero más detalles y que puedas resolver el problema.

  6. Reply mochon Abr 29,2009 2:17 am

    mmm… algo estoy pasando por alto porque me crea un video nuevo pero sin subtitular (las rutas están bien puestas.

    mencoder House3.avi -sub House3.srt -oac copy -ovc copy -o House-03_sub.avi -subcp utf-8 -font /usr/share/fonts/truetype/freefont/FreeSansBold.ttf -subfont-text-scale 3.8

    el resultado en terminal tira un debug del tipo:

    SUB: error recoding line.
    SUB: error recoding line.
    SUB: error recoding line.
    SUB: error recoding line.
    SUB: error recoding line.
    SUB: error recoding line.
    SUB: Read 816 subtitles.
    videocodec: framecopy (624×352 24bpp fourcc=44495658)
    audiocodec: framecopy (format=55 chans=2 rate=48000 bits=16 B/s=16000 sample-0)
    Writing header…
    ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
    Writing header…
    ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
    Writing index…14f (100%) 3595.35fps Trem: 0min 344mb A-V:0.026 [980:137]
    Writing header…
    ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.

    Video stream: 980.841 kbit/s (122605 B/s) size: 318140815 bytes 2594.842 secs 62214 frames

    Audio stream: 137.202 kbit/s (17150 B/s) size: 44502336 bytes 2594.856 secs

    A lo que he de suponer que el error esta específicamente donde dice:

    SUB: error recoding line.

  7. Reply mochon Abr 29,2009 2:31 am

    otra consulta.. que fuente utilizaste para subtitular el video?

  8. Reply Sergio Abr 30,2009 12:45 am

    @mochon: No encontré nada de información sobre ese error. Te aconsejaría probar con otro video, o con el mismo pero con otro archivo de subtítulos a ver que pasa.

    La fuente es Aquabase, una fuente de Apple.

    Si querés instalarla, acá tenés un tutorial: http://tulinux.org/tag/instalar-fuentes-apple-ubuntu

  9. Reply Rodrigo May 23,2009 12:35 pm

    yo sé cual es el problema, tu archivo .str no esta en utf-8, sino en ISO , asi que lo unico que tienes que hacer es abrirlo con el gedit y guardarlo denuevo pero como utf-8 y santo remedio XD

  10. Reply sushisan Jun 21,2009 1:19 pm

    si pondes -ovc copy no incrusta el sub. Lo tenes que recodificar. Usa algo asi como -ovc xvid -xvidencopts pass=1

  11. Reply Sergio Jun 26,2009 2:26 am

    @sushisan: A mí me funcionó perfectamente tal y como lo publiqué. De todas formas te agradezco el aporte y lo voy a tener en cuenta en caso de tener problemas con -ovc copy,

    Estaría bueno que los que tenían el problema comentaran si les sirvió el aporte.

  12. Reply mochon Jul 2,2009 11:02 pm

    Aca estoy otra vez para comentar 2 cosas:

    a) Tiene razon Rodrigo cambiando a utf-8 los subtitulos desaparecio el error… pero sigue sin insertar los subs al video.

    b) cambiando la opcion como describe sushisan si logro que incruste los subs al video, pero no logro controlar el tamaño de las fuentes que supongo que se logra cambiando el (-subfont-text-scale 3.8) por un valor menor como ¿2 o 2.5?…

    PD: perdon por la demora es que no me habia suscripto a las notificaciones via e-mail… ya lo voy a hacer con este comment.

  13. Reply Sergio Jul 7,2009 5:03 am

    @mochon: Teóricamente el -subfont-text-scale sirve para controlar el tamaño de las fuentes y en mi caso puedo usarlo sin problemas.

    Realmente desconozco porque no a todos nos funciona de la misma manera.

  14. Reply mochon Jul 7,2009 2:59 pm

    La verdad que yo tampoco… a ver con el la opcion “-ovc copy” no pude incrustar los subs y sinceramente no entiendo como a vos si te funciona, dado que sin recodificar el vídeo es imposible agregarle un logo o marca de agua y los subs funcionan de igual manera.

    Por otra parte, desconozco el porque pero ahora SI me deja modificar el tamaño de los subs… cuando no me dejaba hacerlo me di cuenta que aun cambiando la fuente seguía codificando siempre con la misma. Así que supuse que era un problema de ruta de la fuente en si, se la cambie varias veces sin lograr nunca un resultado hasta que reescribí el comando cambiando de lugar la secuencia de ordenes y ahora le puedo cambiar sin problemas el tamaño y el tipo de letra.

    Para finalizar y dejar una especie de TIP, utilice “-ovc lavc” para que me incruste los subs y todo BIEN… pero con esta opción se crean los videos con FMP4 (esto no lo sabia) y bue me grabe un DVD con 12 caps recodificados como para verlos en el DVD con el tele (y no los reconocia… jaajajaj).
    Así que la opción a usar para evitar este problemita es “-ovc xvid -xvidencopts pass=1”. (Ahora tengo el tema de que no puedo controlar el bitrate… ya veré como se hace). Un salu2 y perdón por convertirte los coments en un foro ajajaj.

  15. Reply Sergio Jul 10,2009 2:10 am

    @mochon: Muchas gracias por compartir el tip. Voy a modificar el comando que está publicado con los datos que comentás para que otros no tengan el mismo problema.

    Y no pidas perdón que me encanta que los comentarios sean tan activos.

  16. Reply Gorefest Sep 8,2009 6:03 pm

    Muchas gracias amigo ahe provado de todo, pero esto resulto gracias…

  17. Reply jorechp Mar 24,2010 3:16 pm

    una consulta, yo he tratado de hacer lo del pegado del subtitulo y ademas reducirle la escala a modo que el archivo pese menos utilzando esto:

    mencoder chuck.0311.hdtv-lol.avi -sub chuck.0311.hdtv-lol.srt -oac copy -vf scale=640:480 -ovc xvid -xvidencopts pass=1 -o chuck.0311.sub.avi -subcp utf-8 -font /usr/share/fonts/truetype/freefont/FreeSansBold.ttf -subfont-text-scale 3.6

    pero no reduce mucho el tamaño del archivo, me lo deja como en 290mb y ando buscando uno tamaño de 200..

    alguna sugerencia de que deberia de cambiar para lograr que ande por este tamaño.

  18. Reply Sergio Abr 22,2010 7:41 pm

    @jorechp: Realmente desconozco cuál puede ser el problema. Más allá de lo que comento en el post no sé de mencoder. Espero que hayas resuelto el problema

  19. Pingback: Tip: Pegar subtítulos a un vídeo AVI « Fedoreando

  20. Pingback: [HOW TO] Añadir subtítulos a un avi para verlo en Xbox 360 « La Azotea del Androide

  21. Reply Dannycp May 23,2011 11:19 pm

    Muchas gracias, es la forma mas fácil y rápida de hacerla de todas las que encontré en la red.

    Si no fuera por la bendita consola que haríamos.

    Saludos y mil gracias.

  22. Reply Marcos Sep 22,2012 6:29 am

    Y algunos años más tarde… jaja comento porque siempre viene uno atrás que le sirve…

    Yo estoy usando linux mint 13 64bits en una i5-2310 con 4gb de ram.

    Use el comando tal cual lo tiraste vos, y quedó así: mencoder /home/marc/Escritorio/debate1.avi -sub /home/marc/Escritorio/debate1.srt -oac copy -ovc xvid -xvidencopts pass=1 -o videonuevo -subcp utf-8 -font /usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Bold.ttf -subfont-text-scale 3.8

    (no tenía idea, donde estaban las fuentes jaja, así que leí los comentarios y las vi)

    A mi me funcionó a pleno, super rápido, genial.

    Puede que la falla mencionada antes es por el formato del video, yo use un avi (mpeg2).

    Es todo, saludos y gracias por esta info

  23. Reply Marcos Sep 22,2012 6:50 am

    Corrijo, se pegó bien, pero me desincronizó el audio y el video… así que lo pegué con avidemux no más porque era un fragmento, el problema es para el que quiere subtitular toda una película… en ese caso el avidemux tarda como 2 hs… pero bueno…

  24. Reply Pacheta Sep 26,2012 10:22 pm

    mencoder archivo_original -sub archivo_subtitulo -oac copy -ovc xvid -xvidencopts pass=1 -o videonuevo -subcp utf-8 -font ruta_a_la_fuente -subfont-text-scale 3.8 ???????

    Perdonar, pero soy retrasado y necio y no sé qué es font ruta-a-la-fuente ni nada de eso…..
    ¿Podríais explicarme (para tontos) como hacerlo por favor? Es que no lo consigo, pongo:

    mencoder /media/74A5-F72E/Attack The Block-2011.SBT/Attack The Block (2011).avi -/media/74A5-F72E/Attack The Block-2011.SBT/Attack The Block (2011).srt -oac copy -ovc xvid -xvidencopts pass=1 -o videonuevo -subcp utf-8 -font ruta_a_la_fuente -subfont-text-scale 3.8^C
    …¿Qué más me falta?

    Muchas gracias por su comprensión.

  25. Reply Marcos Sep 26,2012 11:36 pm

    Hola Pacheta, font es la fuente y ruta a la fuente es los directorios donde está guardada la misma.

    Por ejemplo, si quiero usar la “free serif” en negrita (bold) tengo que poner su ruta, la cual es: /usr/share/fonts/truetype/freefont/FreeSerifBold.ttf

    Tené en cuenta que yo uso linux mint, por lo que en ubuntu deben estar en la misma ruta, y si tenés otra distro o no las encontrás googlea su ubicacion, algo como “distro ubicacion fuentes” hasta dar con ellas.

    Hay una aplicación que te dice donde tenes las fuentes instaladas pero ni se cual es.

  26. Reply Marvin Jun 24,2015 11:20 pm

    Saludos y gracias por todos los comandos que recomiendas para unir video con el texto. Lo que no logro hacer es crear un video final con el tamano igual o inferior al original. Tengo el video original que pesa 1.7 GB y al final termino teniendo un video de mas de 3.7 GB. El comando que utilizo es el siguiente:

    mencoder VIDEOORIGINAL.mp4 -sub TEXTO.srt -oac pcm -ovc xvid -xvidencopts pass=1 -o VIDEOFINAL.mp4 -subcp utf-8 -font /usr/share/fonts/truetype/msttcorefonts/Arial.ttf -subfont-text-scale 3.8

    Que tengo que instalar o utilizar para poder tener un archivo del mismo peso del original (1.7 GB)???

    • Reply Sergio Oct 21,2015 9:29 am

      Hola Marvin, tenía problemas con las notificaciones de los comentarios, y como a este blog no puedo mantenerlo muy activo recién veo tu respuesta.

      Desconozco la respuesta exacta a tu problema, pero seguramente puedas reducir el tamaño del archivo final jugando con los parámetros del códec usado. Te dejo un enlace con varias alternativas para que pruebes: ArchLinux Wiki: MEncoder

      Si encontraste ya la solución, te agradecería que la compartas.

      Saludos

  27. Reply un_TRUÑO Nov 16,2015 3:46 pm

    Me parece que la solucion referida aki desde el principio estuvo mal explicada.

    Yo propongo algo infalible. Los AVI tienen el problema de que no todos los codec funcionan en todas las TV, pero hay un “basico” de codec que toda tv tienen.

    Este comando y sus instrucciones nunca me fallan. OjO Tanto el video.avi como el texto.srt a fusionar deben tener el mismo nombre: video.avi video.srt ; deben estar en la misma carpeta. Colocate sobre carpeta que contiene los archivos, con lado derecho raton…abrir en un terminal y se aplica el cmd:

    mencoder -sub video.srt -subcp iso-8857-9 -ovc xvid -xvidencopts bitrate=687 -oac copy -o video_final_sub.avi video_original.avi

    otra forma: (si quieres aprende mas ve al manual mencoder)

    mencoder video.avi -oac copy -ovc lavc -sub video.srt -subcp latin1 -subfont-text-scale 3 -o video_final.avi

  28. Reply Cabezadura Dic 3,2015 11:56 am

    Hola, voy a probar este comando, pero te consulto no sabes si funciona tambien con subtirulos .ASS ya que estos tienen datos de color de letras y rebordes, como para que se aprecien con cualquier color de fondeo de pantalla.
    gracias

Leave a Reply

Connect with Facebook