¿Cómo pasar de subtítulos .srt y un video .ts a un video .ts con dvb_subtitles?

Nov 27 2020

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 ffmpegpara 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

Abilogos Dec 17 2020 at 22:27

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

.srtel formato se basa en texto y el .supformato 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 Fontsizeopción.

pero si tiene supy desea grabar en video, puede usar esto:

ffmpeg -i ./sample_1280x720.ts -i ./sample.sup  -filter_complex "[0:v][1:s]overlay" ./out.ts
Twenkid Dec 17 2020 at 02:16

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:

  1. 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

  1. 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í: