¿Cómo pasar de subtítulos .srt y un video .ts a un video .ts con dvb_subtitles?
Estoy tratando de obtener de un archivo de subtítulos .srt + un archivo de video .ts => un archivo de video .ts con un subtítulo dvb.
Mi .srt:
1
00:00:00,000 --> 00:00:05,000
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel hendrerit massa.
2
00:00:05,000 --> 00:00:10,000
Aliquam dolor sapien, molestie ac sagittis eu, tempus nec est.
3
00:00:10,000 --> 00:00:28,000
Morbi id sem eu sapien consectetur imperdiet. Morbi sed purus et sapien interdum placerat vitae quis orci.
Mi .ts: sample_1920x1080.ts de https://filesamples.com/formats/ts
SubtitleEdit comando: .\SubtitleEdit.exe /convert 'test_subtitles.srt' Blu-raysup /resolution:1920x1080 /overwrite
. Esto crea un archivo test_subtitles.sup como se esperaba.
Luego utilizo ffmpeg
para incluir los subtítulos .SUP, como esto: .\ffmpeg.exe -y -i 'sample_1920x1080.ts' -fix_sub_duration -i 'test_subtitles.sup' -map 0:v -map 1:s -vcodec copy -acodec copy -scodec dvbsub -copyts -muxdelay 0 -max_delay 0 'output.ts'
. Esto funciona, pero los resultados a veces no son muy legibles. Aquí hay una captura de pantalla:

¿Tengo otras opciones aquí? O las opciones dentro de subtitleedit / ffmpeg a f.ex. hacer que los subtítulos sean más grandes?
(También publiqué esto en el repositorio SubtitleEdit Github: https://github.com/SubtitleEdit/subtitleedit/issues/4539.)
ACTUALIZAR:
Aprendí del autor de SubtitleEdit que de hecho es posible aumentar el tamaño de fuente si se usa la interfaz gráfica de usuario de SubtitleEdit (ver aquí . Sin embargo, deseo hacer esto usando una herramienta de línea de comandos.
Respuestas
Desafortunadamente, tuvo que hacerse con ffmpeg así:
ffmpeg -i ./sample_1280x720.ts -i ./sample.srt -map 0 -map 1 -c copy -c:s dvd_subtitle ./out.ts
pero ffmpeg no lo aceptará con este error:
Actualmente, la codificación de subtítulos solo es posible de texto a texto o de mapa de bits a mapa de bits
.srt
el formato se basa en texto y el .sup
formato se basa en imágenes.
siempre y cuando ffmpeg se niegue a codificar subtítulos en video.
podemos usar -vf
(filtro de video), codificación rígida (srt) de subtítulos en video:
ffmpeg -i ./sample_1280x720.ts -vf subtitles=sample.srt:force_style='Fontsize=24' ./out.ts
Podemos definir el tamaño de fuente con la Fontsize
opción.

pero si tiene sup
y desea grabar en video, puede usar esto:
ffmpeg -i ./sample_1280x720.ts -i ./sample.sup -filter_complex "[0:v][1:s]overlay" ./out.ts
EDITAR 19.12.2020:
La idea de mi último comentario: una secuencia de comandos de Python que reemplaza el tamaño de fuente en Settings.xml de SubtitleEdit, que se llamará antes de sus secuencias de comandos:
https://github.com/Twenkid/Python-Various/blob/main/Exercise/SubtitleEdit/sub.py
python sub.py C:\SE3518\Settings.xml 44
etc.
...
¿Has intentado escalar la pista de dvb? Ese hilo sugiere que es posible: escalado de subtítulos ffmpeg y dvb
Esa parte de Maknol (
aunque no la he probado
):
-filter_complex "[0: s: 0] scale = -1: 2400 [sub], [0: v] [sub] overlay = x = 150: y = -80"
dónde:
escala - tamaño del subtítulo
superposición x = - vertical
superposición y = - horizontal
EDITAR: Logré escalar los subtítulos .sup con ffmpeg, pero hasta ahora funcionó en dos pasadas, ver a continuación.
Mi secuencia fue:
- Tu comando, produciendo una secuencia con los subtítulos:
ffmpeg -i sample_1920x1080.ts -fix_sub_duration -i test_subtitles.sup -map 0: v -map 1: s -vcodec copy -acodec copy -scodec dvbsub -copyts -muxdelay 0 -max_delay 0 outputA.ts
- Escale los subtítulos y ajuste su posición (sin embargo, es necesario volver a codificar debido al filter_complex)
ffmpeg -i outputA.ts -metadata title = "Scale" -filter_complex "[0: s: 0] scale = -1: 1400 [sub], [0: v] [sub] overlay = x = -250: y = -300 "-c: v libx264 -b: v 5M -preset fast -aspect 16: 9 -c: una copia output_Scaled.ts
Tamaño inicial:

Mis subtítulos iniciales eran más grandes (tamaño de fuente 25) y el coeficiente de escala aquí es pequeño = 1400/1080
Escamoso:

...
Si intenté hacerlo de una vez, mi sintaxis representaba el tamaño predeterminado + superpuso los escalados (y muestra solo un elemento, no todos).
Ese es el intento de una pasada:
#Al mismo tiempo los superpone ... ffmpeg -i sample_1920x1080.ts -fix_sub_duration -i test_subtitles.sup -scodec dvbsub -map 0: v -map 1: s -metadata title = "Scale" -filter_complex "[1: s] scale = -1: 1400 [sub], [0: v] [sub] superposición = x = -250: y = -300 "-c: v libx264 -crf 20 -preset veryfast -aspect 16: 9 -c: a aac -estricto experimental -b: una salida de 192kSTACK_SUP.ts
Produce algo así:
