subtitulos - Use ffmpeg para agregar subtítulos de texto
como poner subtitulos a una pelicula online (9)
Ejemplo simple:
videoSource=test.mp4
videoEncoded=test2.mp4
videoSubtitle=test.srt
videoFontSize=24
ffmpeg -i "$videoSource" -vf subtitles="$videoSubtitle":force_style=''Fontsize="$videoFontSize"'' "$videoEncoded"
Reemplazar solo las variables de linux
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:
Un 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
Correlaciona correctamente las transmisiones, pero da un error:
Codificador (id. De códec 94210) no encontrado para la secuencia de salida # 0.2
Cuando lanzo
ffmpeg -codecs
Puedo ver que el códec de Srt es compatible como decodificador y codificador, sin embargo, no estoy seguro de qué se utiliza para la codificación de subpuntos mp4 y mkv, y si necesito activarlo o compilarlo por separado.
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. De modo que puede copiar códecs de video de entrada a video de salida con contenedor MKV con subtítulos. Primero debes convertir SRT a formato de subtítulos ASS
ffmpeg -i input.srt input.ass
e incrustar subtítulos ASS en video
ffmpeg -i input.mp4 -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv
También trabajó con el archivo VMW.
ffmpeg -i input.wmv -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv
ver la página wiki Comparación de formatos de contenedores
Está intentando cambiar los 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 códec de audio y video, o simplemente copiar secuencia si solo desea agregar subtítulos.
MP4:
ffmpeg -i input.mp4 -f srt -i input.srt /
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy /
-c:s mov_text output.mp4
MKV:
ffmpeg -i input.mp4 -f srt -i input.srt /
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy /
-c:s srt output.mkv
Esta es la razón por la que mkv es un contenedor tan bueno, especialmente ahora que está maduro:
mkvmerge -o output.mkv video.mp4 subtitle.srt
Intenté usar MP4Box para esta tarea, pero no podía manejar el M4V con el que estaba lidiando. Tuve éxito incrustando 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
Al igual que usted, tuve que usar un archivo de salida MKV; no pude crear un archivo M4V.
Proporcionaré una respuesta simple y general que funcione con cualquier número 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 es otro tipo de AFAIK) y los convertirá en pistas; no podrás mirar pero estarán allí (puedes demultiplicarlos). Ah, y si el mkv tiene capítulos el mp4 también.
ffmpeg -i <mkv-input> -c copy -map 0 -c:s mov_text <mp4-output>
Como puede ver, todo se trata del -map 0
, que le dice a FFmpeg que agregue todas las pistas, que incluyen metadatos, capítulos, archivos adjuntos, etc. Si hay una "pista" no reconocida ( mkv permite adjuntar cualquier tipo de archivo) , terminará con un error.
Puede 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 el control de errores, un nombre de salida diferente, etc., pongo a entender el punto.
@ffmpeg -i %1 -c copy -map 0 -c:s mov_text "%~n1.mp4"
Ahora puedes simplemente correr
mkv2mp4 "Video with subtitles etc.mkv"
Y creará "Video con subtítulos, etc.mp4" con el máximo de información incluida.
Utilice la biblioteca libass
(asegúrese de que su instalación ffmpeg tenga la biblioteca en la configuración --enable-libass
).
Primero convierta los subtítulos a formato .ass
:
ffmpeg -i subtitles.srt subtitles.ass
Luego agrégalos usando un filtro de video:
ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4
ffmpeg admite el codificador de subtítulos mov_text
que es el único soportado en un contenedor MP4 y reproducible por 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
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4
-vf subtitles=infile.srt
no funcionará con la -c copy
El orden de -c copy -c:s mov_text
es importante. Usted le está diciendo a FFmpeg:
- Video: copia, Audio: copia, Subtítulo: copia
- Subtítulo: mov_text
Si los invierte, le está diciendo a FFmpeg:
- Subtítulo: mov_text
- Video: copia, Audio: copia, Subtítulo: copia
Alternativamente, puede usar -c:v copy -c:a copy -c:s mov_text
en cualquier orden.