Wie gehe ich von .srt-Untertiteln und einem .ts-Video zu einem .ts-Video mit dvb_subtitles?
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
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
.srt
Format ist textbasiert und .sup
Format 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 Fontsize
Option definieren.

aber wenn Sie das haben sup
und 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
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:
- 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
- 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:
