Jak przejść z napisów .srt i wideo .ts do wideo .ts z dvb_subtitles?
Próbuję uzyskać z pliku napisów .srt + plik wideo .ts => plik wideo .ts z dvb_subtitle.
Mój .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.
My .ts: sample_1920x1080.ts from https://filesamples.com/formats/ts
SubtitleEdit polecenie: .\SubtitleEdit.exe /convert 'test_subtitles.srt' Blu-raysup /resolution:1920x1080 /overwrite
. Spowoduje to utworzenie pliku test_subtitles.sup zgodnie z oczekiwaniami.
Następnie używać ffmpeg
do włączenia .sup napisy, na przykład: .\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'
. To działa, ale wyniki są czasami niezbyt czytelne. Oto zrzut ekranu:

Czy mam tu jakieś inne opcje? Lub opcje w ramach subtitleedit / ffmpeg do f.ex. zwiększyć rozmiar napisów?
(Wysłałem to również do repozytorium SubtitleEdit Github: https://github.com/SubtitleEdit/subtitleedit/issues/4539.)
AKTUALIZACJA:
Dowiedziałem się od autora SubtitleEdit, że rzeczywiście można zwiększyć rozmiar czcionki, używając graficznego interfejsu użytkownika SubtitleEdit (patrz tutaj . Jednak chciałbym to zrobić za pomocą narzędzia wiersza poleceń.
Odpowiedzi
Niestety trzeba było to zrobić z ffmpeg w ten sposób:
ffmpeg -i ./sample_1280x720.ts -i ./sample.srt -map 0 -map 1 -c copy -c:s dvd_subtitle ./out.ts
ale ffmpeg nie zaakceptuje tego z tym błędem:
Kodowanie napisów jest obecnie możliwe tylko z tekstu na tekst lub bitmapy na bitmapę
.srt
format jest oparty na tekście, a .sup
format jest oparty na obrazie.
tak długo, jak ffmpeg odmawia zakodowania napisów w wideo.
możemy użyć -vf
(filtr wideo), Hardcoding (srt) napisów do filmu:
ffmpeg -i ./sample_1280x720.ts -vf subtitles=sample.srt:force_style='Fontsize=24' ./out.ts
Możemy zdefiniować rozmiar czcionki za pomocą Fontsize
opcji.

ale jeśli masz sup
i chcesz wypalić na wideo, możesz użyć tego:
ffmpeg -i ./sample_1280x720.ts -i ./sample.sup -filter_complex "[0:v][1:s]overlay" ./out.ts
EDYCJA 19.12.2020:
Pomysł z mojego ostatniego komentarza - skrypt Pythona, który zastępuje rozmiar czcionki w Settings.xml SubtitleEdit, do wywołania przed twoimi skryptami:
https://github.com/Twenkid/Python-Various/blob/main/Exercise/SubtitleEdit/sub.py
python sub.py C:\SE3518\Settings.xml 44
itp.
...
Czy próbowałeś skalować ścieżkę dvb? Ten wątek sugeruje, że jest to możliwe: skalowanie napisów ffmpeg i dvb
Ta część autorstwa Maknola (chociaż
tego nie próbowałem
):
-filter_complex "[0: s: 0] scale = -1: 2400 [sub], [0: v] [sub] overlay = x = 150: y = -80"
gdzie:
skala - rozmiar podtytułu
nakładka x = - w pionie
nakładka y = - pozioma
EDYCJA: Udało mi się skalować napisy .sup za pomocą ffmpeg, ale do tej pory działało to w dwóch przebiegach, patrz poniżej.
Moja sekwencja była następująca:
- Twoje polecenie, tworząc strumień z napisami:
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 wyjścieA.ts
- Skaluj napisy i dostosuj ich położenie (jednak wymaga to ponownego kodowania ze względu na filter_complex)
ffmpeg -i outputA.ts -metadata title = "Skala" -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: kopia output_Scaled.ts
Początkowy rozmiar:

Moje początkowe napisy były większe (rozmiar czcionki 25), a współczynnik skalowania tutaj jest mały = 1400/1080
Łuskowaty:

...
Jeśli próbowałem to zrobić w jednym przebiegu, moja składnia renderowała domyślny rozmiar + nakładała skalowane (i wyświetla tylko jeden element, nie wszystkie).
Oto próba jednego podania:
# Za jednym razem nakłada je ... 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 Experimental -b: a 192k outputSTACK_SUP.ts
Tworzy coś takiego:
