Wie gehe ich von .srt-Untertiteln und einem .ts-Video zu einem .ts-Video mit dvb_subtitles?

Nov 27 2020

Ich versuche, aus einer .srt-Untertiteldatei + einer .ts-Videodatei => einer .ts-Videodatei mit einem dvb_subtitle zu gelangen.

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

Meine .ts: sample_1920x1080.ts von https://filesamples.com/formats/ts

Befehl SubtitleEdit : .\SubtitleEdit.exe /convert 'test_subtitles.srt' Blu-raysup /resolution:1920x1080 /overwrite. Dadurch wird erwartungsgemäß eine Datei test_subtitles.sup erstellt.

Ich benutze dann ffmpeg, um die Untertitel .sup wie folgt einzuschließen : .\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'. Dies funktioniert, aber die Ergebnisse sind manchmal nicht sehr gut lesbar. Hier ist ein Screenshot:

Habe ich hier noch andere Möglichkeiten? Oder Optionen innerhalb von subtitleedit / ffmpeg bis f.ex. die Untertitel größer machen?

(Ich habe dies auch im SubtitleEdit Github-Repository veröffentlicht: https://github.com/SubtitleEdit/subtitleedit/issues/4539.)

AKTUALISIEREN:

Ich habe vom Autor von SubtitleEdit erfahren, dass es tatsächlich möglich ist, die Schriftgröße zu erhöhen, wenn die grafische Benutzeroberfläche von SubtitleEdit verwendet wird (siehe hier . Ich möchte dies jedoch mit einem Befehlszeilentool tun.

Antworten

Abilogos Dec 17 2020 at 22:27

Leider musste es mit ffmpeg so gemacht werden:

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

aber ffmpeg akzeptiert es nicht mit diesem Fehler:

Die Untertitelcodierung ist derzeit nur von Text zu Text oder von Bitmap zu Bitmap möglich

.srtFormat ist textbasiert und .supFormat ist bildbasiert.

solange ffmpeg sich weigert , Untertitel in Video zu kodieren.

Wir können -vf(Videofilter), Hardcoding (srt) Untertitel in Video verwenden:

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

Wir können die Schriftgröße mit FontsizeOption definieren.

aber wenn Sie das haben supund in Video brennen möchten, können Sie dies verwenden:

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

EDIT 19.12.2020:

Die Idee aus meinem letzten Kommentar - ein Python-Skript, das die Schriftgröße in Settings.xml von SubtitleEdit ersetzt und vor Ihren Skripten aufgerufen werden soll:

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

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

usw.

...

Haben Sie versucht, die DVD-Spur zu skalieren? Dieser Thread legt nahe, dass dies möglich ist: Skalierung der Untertitel ffmpeg und dvb

Dieser Teil von Maknol ( ich habe es aber nicht ausprobiert ):

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

wo:

Skala - Größe des Untertitels

Überlagerung x = - vertikal

Überlagerung y = - horizontal

EDIT: Ich habe es geschafft, die Untertitel von .sup mit ffmpeg zu skalieren, aber bisher hat es in zwei Durchgängen funktioniert, siehe unten.

Meine Sequenz war:

  1. Ihr Befehl, einen Stream mit den Untertiteln zu erzeugen:

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. Skalieren Sie die Untertitel und passen Sie ihre Position an (aufgrund des filter_complex ist jedoch eine Neucodierung erforderlich).

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: eine Kopie output_Scaled.ts

Ursprüngliche Größe:

Meine anfänglichen Untertitel waren größer (Schriftgröße 25) und der Skalierungskoeffizient hier ist klein = 1400/1080

Skaliert:

...

Wenn ich es in einem Durchgang versucht habe, hat meine Syntax die Standardgröße gerendert + die skalierten überlagert (und nur ein Element angezeigt, nicht alle).

Das ist der Versuch für einen Durchgang:

# Überlagert sie einmal ... 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] overlay = x = -250: y = -300 "-c: v libx264 -crf 20 -preset veryfast -aspect 16: 9 -c: a aac -strict experimentell -b: ein 192k outputSTACK_SUP.ts

Es produziert so etwas: