Comment passer des sous-titres .srt et une vidéo .ts à une vidéo .ts avec dvb_subtitles?

Nov 27 2020

J'essaie d'obtenir à partir d'un fichier de sous-titres .srt + un fichier vidéo .ts => un fichier vidéo .ts avec un dvb_subtitle.

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

Mes .ts: sample_1920x1080.ts de https://filesamples.com/formats/ts

SubtitleEdit commande: .\SubtitleEdit.exe /convert 'test_subtitles.srt' Blu-raysup /resolution:1920x1080 /overwrite. Cela crée un fichier test_subtitles.sup comme prévu.

J'utilise ensuite ffmpegpour inclure les sous - titres .sup, comme ceci: .\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'. Cela fonctionne, mais les résultats ne sont parfois pas très lisibles. Voici une capture d'écran:

Ai-je d'autres options ici? Ou des options dans subtitleedit / ffmpeg à f.ex. agrandir les sous-titres?

(J'ai également publié ceci dans le référentiel SubtitleEdit Github: https://github.com/SubtitleEdit/subtitleedit/issues/4539.)

METTRE À JOUR:

J'ai appris de l'auteur de SubtitleEdit qu'il est en effet possible d'augmenter la taille de la police en utilisant l'interface utilisateur graphique de SubtitleEdit (voir ici . Cependant, je souhaite le faire en utilisant un outil de ligne de commande.

Réponses

Abilogos Dec 17 2020 at 22:27

Malheureusement, cela a dû être fait avec ffmpeg comme ceci:

ffmpeg -i ./sample_1280x720.ts -i ./sample.srt -map 0 -map 1 -c copy -c:s dvd_subtitle ./out.ts

mais ffmpeg ne l'acceptera pas avec cette erreur:

L'encodage des sous-titres n'est actuellement possible que du texte au texte ou du bitmap au bitmap

.srtle format est basé sur du texte et le .supformat est basé sur l'image.

donc tant que ffmpeg refuse d'encoder les sous-titres en vidéo.

nous pouvons utiliser -vf(filtre vidéo), sous-titre de codage en dur (srt) en vidéo:

ffmpeg -i ./sample_1280x720.ts -vf subtitles=sample.srt:force_style='Fontsize=24' ./out.ts

Nous pouvons définir la taille de la police avec Fontsizeoption.

mais si vous avez le supet que vous voulez graver en vidéo, vous pouvez utiliser ceci:

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

MODIFIER 19.12.2020:

L'idée de mon dernier commentaire - un script Python qui remplace la taille de la police dans Settings.xml de SubtitleEdit, à appeler avant vos scripts:

https://github.com/Twenkid/Python-Various/blob/main/Exercise/SubtitleEdit/sub.py

python sub.py C:\SE3518\Settings.xml 44

etc.

...

Avez-vous essayé de mettre à l'échelle la piste dvb? Ce fil suggère que c'est possible: mise à l'échelle des sous-titres ffmpeg et dvb

Cette partie de Maknol ( je ne l'ai pas essayé cependant ):

-filter_complex "[0: s: 0] scale = -1: 2400 [sub], [0: v] [sub] overlay = x = 150: y = -80"

où:

échelle - taille du sous-titre

superposition x = - verticale

superposition y = - horizontale

EDIT: J'ai réussi à mettre à l'échelle les sous-titres .sup avec ffmpeg, mais jusqu'à présent, cela a fonctionné en deux passes, voir ci-dessous.

Ma séquence était:

  1. Votre commande, produisant un flux avec les sous-titres:

ffmpeg -i sample_1920x1080.ts -fix_sub_duration -i test_subtitles.sup -map 0: v -map 1: s -vcodec copie -acodec copie -scodec dvbsub -copyts -muxdelay 0 -max_delay 0 outputA.ts

  1. Mettez à l'échelle les sous-titres et ajustez leur position (cependant, cela nécessite un réencodage en raison du 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: une copie output_Scaled.ts

Dimension initiale:

Mes sous-titres initiaux étaient plus grands (taille de police 25) et le coefficient de mise à l'échelle ici est petit = 1400/1080

Escaladé:

...

Si j'essayais de le faire en un seul passage, ma syntaxe rendait la taille par défaut + superposait celles mises à l'échelle (et n'affiche qu'un seul élément, pas tous).

C'est la tentative d'un seul passage:

#Une fois les superpose ... 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 [sous], [0: v] [sous] superposition = x = -250: y = -300 "-c: v libx264 -crf 20 -préréglé très rapide -aspect 16: 9 -c: a aac -strict expérimental -b: une sortie 192kSTACK_SUP.ts

Cela produit quelque chose comme ça: