Estoy tratando de agregar subtítulos de texto a un contenedor .mp4 usando ffmpeg:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4
Cuando intento ejecutar esta línea, me da un error:
El número de mapas de flujo debe coincidir con el número de flujos de salida.
Si trato de cambiar el mp4 a mkv (aunque mp4 admite subtítulos de texto), así:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv
Mapea correctamente las transmisiones, pero da un error:
Codificador (codec id 94210) no encontrado para el flujo de salida # 0.2
Cuando lance
ffmpeg -codecs
Puedo ver que el códec srt es compatible como decodificador y codificador, sin embargo, no estoy seguro de qué se usa para la codificación de subsistemas mp4 y mkv, y si necesito encenderlo o compilarlo por separado.
-c:s copy
no con-c:s mov_text
.NOTA: Esta solución "graba los subtítulos" en el video, de modo que todos los espectadores del video se verán obligados a verlos.
Use la
libass
biblioteca (asegúrese de que su instalación de ffmpeg tenga la biblioteca en la configuración--enable-libass
).Primero convierta los subtítulos a
.ass
formato:Luego agréguelos usando un filtro de video:
fuente
libass
extensiones si faltan en los sistemas Debian con 'apt update && apt install libass-dev ".Estás intentando mux subtítulos como una secuencia de subtítulos. Es fácil pero se usa una sintaxis diferente para MP4 (o M4V) y MKV. En ambos casos, debe especificar el códec de audio y video, o simplemente copiar la transmisión si solo desea agregar subtítulos.
MP4:
MKV:
fuente
El contenedor MKV admite códecs de audio y video Prácticamente cualquier cosa y también admite subtítulos y menús de DVD. Por lo tanto, puede copiar códecs del video de entrada al video de salida con el contenedor MKV con subtítulos. Primero debes convertir SRT al formato de subtítulos ASS
e incrustar subtítulos ASS en video
También trabajó con el archivo VMW.
ver la página wiki Comparación de formatos de contenedor
fuente
ffmpeg admite el
mov_text
codificador de subtítulos, que es casi el único compatible con un contenedor MP4 y se puede reproducir en iTunes, Quicktime, iOS, etc.Tu línea leería:
ffmpeg -i input.mp4 -i input.srt -map 0:0 -map 0:1 -map 1:0 -c:s mov_text output.mp4
fuente
Intenté usar MP4Box para esta tarea, pero no podía manejar el M4V con el que estaba tratando. Tuve éxito al incrustar el SRT como subtítulos suaves con ffmpeg con la siguiente línea de comando:
ffmpeg -i input.m4v -i input.srt -vcodec copy -acodec copy -scodec copy -map 0:0 -map 0:1 -map 1:0 -y output.mkv
Como usted, tuve que usar un archivo de salida MKV; no pude crear un archivo M4V.
fuente
Proporcionaré una respuesta simple y general que funcione con cualquier cantidad de audios y subtítulos srt y respete los metadatos que pueden incluir el contenedor mkv . Por lo tanto, incluso agregará las imágenes que el matroska puede incluir como archivos adjuntos (aunque no otros tipos AFAIK) y las convertirá en pistas; no podrá verlos, pero estarán allí (puede quitarlos). Ah, y si el mkv también tiene capítulos, el mp4 también.
Como puede ver, se trata de lo
-map 0
que le dice a FFmpeg que agregue todas las pistas, lo que incluye metadatos, capítulos, archivos adjuntos, etc. Si hay una "pista" no reconocida ( mkv permite adjuntar cualquier tipo de archivo), terminar con un errorPuede crear un lote simple
mkv2mp4.bat
, si generalmente hace esto, para crear un mp4 con el mismo nombre que el mkv . Sería mejor con control de errores, un nombre de salida diferente, etc., pero entiendes el punto.Ahora puedes simplemente correr
Y creará "Video con subtítulos, etc.mp4" con el máximo de información incluida.
fuente
Ejemplo simple:
Solo reemplace las variables de Linux
fuente
Esta es la razón por la cual mkv es un buen contenedor, especialmente ahora que está maduro:
fuente