@jjlmoya/utils-audiovisual 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +198 -0
  3. package/src/category/i18n/id.ts +198 -0
  4. package/src/category/i18n/it.ts +198 -0
  5. package/src/category/i18n/ja.ts +198 -0
  6. package/src/category/i18n/ko.ts +198 -0
  7. package/src/category/i18n/nl.ts +198 -0
  8. package/src/category/i18n/pl.ts +198 -0
  9. package/src/category/i18n/pt.ts +198 -0
  10. package/src/category/i18n/ru.ts +198 -0
  11. package/src/category/i18n/sv.ts +198 -0
  12. package/src/category/i18n/tr.ts +198 -0
  13. package/src/category/i18n/zh.ts +198 -0
  14. package/src/category/index.ts +31 -3
  15. package/src/tests/i18n_coverage.test.ts +36 -0
  16. package/src/tests/slug_uniqueness.test.ts +81 -0
  17. package/src/tool/chromaticLens/i18n/de.ts +246 -0
  18. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  19. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  21. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  22. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  23. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  28. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  29. package/src/tool/chromaticLens/index.ts +15 -7
  30. package/src/tool/collageMaker/i18n/de.ts +233 -0
  31. package/src/tool/collageMaker/i18n/id.ts +233 -0
  32. package/src/tool/collageMaker/i18n/it.ts +233 -0
  33. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  34. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  35. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  36. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  37. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  38. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  39. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  40. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  41. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  42. package/src/tool/collageMaker/index.ts +15 -6
  43. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  44. package/src/tool/exifCleaner/i18n/fr.ts +1 -1
  45. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  46. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  47. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  48. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  49. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  50. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  51. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  53. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  54. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  55. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  56. package/src/tool/exifCleaner/index.ts +16 -8
  57. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  58. package/src/tool/imageCompressor/i18n/en.ts +1 -1
  59. package/src/tool/imageCompressor/i18n/es.ts +1 -1
  60. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  61. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  62. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  63. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  64. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  65. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  66. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  67. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  69. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  70. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  71. package/src/tool/imageCompressor/index.ts +15 -7
  72. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  73. package/src/tool/printQualityCalculator/i18n/fr.ts +1 -1
  74. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  75. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  76. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  77. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  78. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  79. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  80. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  81. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  82. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  84. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  85. package/src/tool/printQualityCalculator/index.ts +15 -7
  86. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  87. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  88. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  89. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  90. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  91. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  92. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  93. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  94. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  95. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  96. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  97. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  98. package/src/tool/privacyBlur/index.ts +15 -7
  99. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  100. package/src/tool/subtitleSync/i18n/fr.ts +5 -5
  101. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  102. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  103. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  104. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  105. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  106. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  107. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  108. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  109. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  110. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  111. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  112. package/src/tool/subtitleSync/index.ts +15 -7
  113. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  114. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  115. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  116. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  117. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  118. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  119. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  120. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  121. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  122. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  123. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  124. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  125. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  126. package/src/tool/timelapseCalculator/index.ts +16 -8
  127. package/src/tool/tvDistance/i18n/de.ts +223 -0
  128. package/src/tool/tvDistance/i18n/id.ts +223 -0
  129. package/src/tool/tvDistance/i18n/it.ts +223 -0
  130. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  131. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  132. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  133. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  134. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  135. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  136. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  137. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  138. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  139. package/src/tool/tvDistance/index.ts +15 -7
  140. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  141. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  142. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  143. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  144. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  145. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  146. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  147. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  148. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  149. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  150. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  151. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  152. package/src/tool/videoFrameExtractor/index.ts +16 -8
@@ -0,0 +1,241 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { SubtitleSyncUI, SubtitleSyncLocaleContent } from '../index';
3
+
4
+ const slug = 'synchonizacja-napisow-srt-online-regulacja-czasu-za-darmo';
5
+ const title = 'Synchronizacja napisów SRT online: Reguluj czas za darmo';
6
+ const description = 'Narzędzie online do przyspieszania lub opóźniania napisów SRT. Łatwo koryguj przesunięcie czasowe i natychmiast pobierz zsynchronizowany plik.';
7
+
8
+ const ui: SubtitleSyncUI = {
9
+ dropTitle: "Przeciągnij plik .SRT tutaj",
10
+ dropSubtitle: "lub kliknij, aby przeglądać",
11
+ adjustTitle: "Adjust Time",
12
+ offsetLabel: "Przesunięcie (sekundy)",
13
+ offsetHelp: "Użyj wartości ujemnych, aby przyspieszyć (np. -1.5) i dodatnich, aby opóźnić.",
14
+ linesStat: "Linie",
15
+ firstStat: "Pierwszy napis",
16
+ lastStat: "Ostatni napis",
17
+ originalLabel: "ORYGINAŁ",
18
+ resultLabel: "WYNIK",
19
+ downloadButton: "Pobierz poprawione",
20
+ previewBadge: "PODGLĄD",
21
+ unitSeconds: "sek"
22
+ };
23
+
24
+ const faq: SubtitleSyncLocaleContent['faq'] = [
25
+ {
26
+ question: "Jak mogę zsynchronizować napisy, jeśli dźwięk jest wcześniej?",
27
+ answer: "Jeśli dźwięk pojawia się przed tekstem, musisz opóźnić napisy. Wprowadź wartość dodatnią w kalkulatorze (np. 2.0, aby opóźnić je o 2 sekundy).",
28
+ },
29
+ {
30
+ question: "Jakie formaty plików akceptuje to narzędzie?",
31
+ answer: "Obecnie narzędzie jest zoptymalizowane pod kątem plików .SRT (SubRip), który jest najczęstszym standardem w odtwarzaczach wideo i platformach streamingowych.",
32
+ },
33
+ {
34
+ question: "Czy przesyłanie moich plików z napisami jest bezpieczne?",
35
+ answer: "Tak, ponieważ przetwarzanie odbywa się w 100% lokalnie na Twoim urządzeniu. Twoje pliki nie są wysyłane na żaden serwer; synchronizacja odbywa się bezpośrednio w przeglądarce.",
36
+ },
37
+ {
38
+ question: "Czy mogę zsynchronizować tylko część pliku?",
39
+ answer: "Nie, to narzędzie stosuje stałe przesunięcie do całego pliku. Jeśli przesunięcie jest progresywne, możesz potrzebować bardziej zaawansowanej edycji.",
40
+ },
41
+ ];
42
+
43
+ const howTo: SubtitleSyncLocaleContent['howTo'] = [
44
+ {
45
+ name: "Prześlij plik SRT",
46
+ text: "Przeciągnij plik napisów, który chcesz poprawić, do obszaru przesyłania.",
47
+ },
48
+ {
49
+ name: "Zidentyfikuj przesunięcie",
50
+ text: "Zmierz, jak duże opóźnienie lub przyspieszenie mają napisy względem dźwięku w Twoim odtwarzaczu.",
51
+ },
52
+ {
53
+ name: "Dostosuj przesunięcie",
54
+ text: "Wprowadź dodatnie (opóźnienie) lub ujemne (przyspieszenie) sekundy w panelu sterowania.",
55
+ },
56
+ {
57
+ name: "Pobierz plik",
58
+ text: "Sprawdź w podglądzie, czy czasy są poprawne i kliknij Pobierz, aby otrzymać nowy plik SRT.",
59
+ },
60
+ ];
61
+
62
+ const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
63
+ {
64
+ name: "Specyfikacja formatu SubRip (SRT)",
65
+ url: "https://matroska.org/technical/subtitles.html#srt-subtitles",
66
+ },
67
+ {
68
+ name: "MDN Web Docs - FileReader API",
69
+ url: "https://developer.mozilla.org/en-US/docs/Web/API/FileReader",
70
+ },
71
+ ];
72
+
73
+ const seo: SubtitleSyncLocaleContent['seo'] = [
74
+ {
75
+ type: 'summary',
76
+ title: 'Profesjonalna synchronizacja napisów',
77
+ items: [
78
+ 'Natychmiastowa korekta przesunięć dźwięk-napisy',
79
+ 'Obsługa standardowych plików SRT (SubRip)',
80
+ 'Przetwarzanie w 100% lokalne - maksymalna prywatność',
81
+ 'Bez instalacji, bez subskrypcji, całkowicie za darmo'
82
+ ]
83
+ },
84
+ { type: 'title', text: 'Perfekcyjna synchronizacja napisów SRT', level: 2 },
85
+ { type: 'paragraph', html: 'Nie ma nic bardziej frustrującego dla widza niż oglądanie dialogów, które nie pasują do głosów. Przesunięcie napisów występuje zazwyczaj z powodu różnic między wersjami wideo: zmian w liczbie klatek na sekundę, cięć reklamowych, intro produkcyjnych lub zmian w kompresji. Dzięki temu narzędziu naprawisz problem w kilka sekund.' },
86
+
87
+ { type: 'stats', items: [
88
+ { value: '100%', label: 'Przetwarzanie lokalne', icon: 'mdi:shield' },
89
+ { value: 'Milisekundy', label: 'Precyzja', icon: 'mdi:clock-outline' },
90
+ { value: 'Dowolny', label: 'BRAK limitu pliku', icon: 'mdi:file-document' }
91
+ ], columns: 3 },
92
+
93
+ { type: 'title', text: 'Przyspieszenie vs Opóźnienie: Praktyczny przewodnik', level: 3 },
94
+ { type: 'paragraph', html: 'Pierwszym krokiem jest poprawne zidentyfikowanie typu przesunięcia. Oto logika:' },
95
+ { type: 'list', items: [
96
+ '<strong>Opóźnienie (Wartość dodatnia):</strong> Gdy widzisz tekst pojawiający się PRZED dźwiękiem. Napisy są za wcześnie. Przykład: +2.0 sekundy.',
97
+ '<strong>Przyspieszenie (Wartość ujemna):</strong> Gdy widzisz tekst pojawiający się PO dźwięku. Napisy są spóźnione. Przykład: -2.0 sekundy.',
98
+ '<strong>Przetestuj i dostosuj:</strong> Zacznij od małych skoków (0.5s) i użyj podglądu do weryfikacji.'
99
+ ], icon: 'mdi:arrow-right' },
100
+
101
+ { type: 'card', title: 'Prywatność na profesjonalnym poziomie', html: 'Przetwarzając plik za pomocą JavaScript po stronie klienta, gwarantujemy, że treść Twoich napisów nigdy nie opuści Twojego komputera. Niezbędne dla tłumaczy i profesjonalistów obsługujących materiały poufne lub objęte umową NDA.' },
102
+
103
+ { type: 'title', text: 'Typowe przypadki użycia', level: 3 },
104
+ { type: 'comparative', items: [
105
+ {
106
+ title: 'Tłumacze i twórcy napisów',
107
+ description: 'Synchronizuj tłumaczenia po pracy z wieloma wersjami wideo',
108
+ icon: 'mdi:translate',
109
+ points: [
110
+ 'Pliki SRT z różnych źródeł',
111
+ 'Wersjonowanie treści (kinowa vs streamingowa)',
112
+ 'Szybka dostawa bez zmiany narzędzi'
113
+ ]
114
+ },
115
+ {
116
+ title: 'Twórcy treści',
117
+ description: 'Odzyskaj napisy, gdy wideo zostało przetworzone z inną liczbą klatek na sekundę',
118
+ icon: 'mdi:video',
119
+ points: [
120
+ 'Ponowne użycie istniejących napisów',
121
+ 'Zmiany formatu (720p na 1080p)',
122
+ 'Unikaj ręcznego dostosowywania czasu dla ponad 1000 linii'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: 'Użytkownicy domowi',
128
+ description: 'Popraw pobrane napisy, które nie pasują idealnie',
129
+ icon: 'mdi:account',
130
+ points: [
131
+ 'Ogólne niesynchronizowane napisy',
132
+ 'Filmy z różnych regionów (PAL vs NTSC)',
133
+ 'Streaming z edytowanymi wersjami'
134
+ ]
135
+ }
136
+ ], columns: 3 },
137
+
138
+ { type: 'title', text: 'Dlaczego napisy tracą synchronizację', level: 3 },
139
+ { type: 'table', headers: ['Częsta przyczyna', 'Opis techniczny', 'Rozwiązanie'], rows: [
140
+ ['Różnica w Framerate', '23.976 fps vs 25 fps - skumulowana różnica', 'Regulacja pojedynczego przesunięcia (to narzędzie)'],
141
+ ['Edycja', 'Cięcia reklamowe lub usunięta/dodana treść', 'Ręczne obliczenia + synchronizacja'],
142
+ ['Wersja regionalna', 'PAL (25 fps Europa) vs NTSC (29.97 fps USA)', 'Proste matematyczne przesunięcie'],
143
+ ['Zmiana rozdzielczości', 'Ponowne kodowanie z inna prędkością przetwarzania', 'Ponowne przeliczenie oryginalnego pliku']
144
+ ] },
145
+
146
+ { type: 'diagnostic', variant: 'info', title: 'Ograniczenia techniczne do rozważenia', icon: 'mdi:information', badge: 'Ważne', html: 'To narzędzie stosuje <strong>stałe</strong> przesunięcie do całego pliku. Jeśli przesunięcie jest <strong>progresywne</strong> (zaczyna się dobrze, ale stopniowo traci synchronizację), wskazuje to na trwałą różnicę w liczbie klatek na sekundę. W takim przypadku plik oryginalny wymaga ponownego przetworzenia w profesjonalnym oprogramowaniu do edycji.' },
147
+
148
+ { type: 'proscons', items: [
149
+ {
150
+ pro: 'Ekstremalna szybkość - przetwarza duże pliki w milisekundach',
151
+ con: 'Reguluje tylko stałe przesunięcie, a nie progresywne'
152
+ },
153
+ {
154
+ pro: 'Całkowita prywatność - treść nigdy nie opuszcza przeglądarki',
155
+ con: 'Wymaga nowoczesnej przeglądarki z włączonym JavaScriptem'
156
+ },
157
+ {
158
+ pro: 'Uniwersalny format - działa z każdym standardowym SRT',
159
+ con: 'Nie obsługuje innych formatów (ASS, VTT, SCC itp.)'
160
+ },
161
+ {
162
+ pro: 'Całkowicie za darmo, bez reklam, bez śledzenia',
163
+ con: 'Brak historii zmian lub wersjonowania'
164
+ }
165
+ ], proTitle: 'Zalety', conTitle: 'Ograniczenia' },
166
+
167
+ { type: 'glossary', items: [
168
+ {
169
+ term: 'SRT (SubRip)',
170
+ definition: 'Najbardziej uniwersalny format napisów: plik tekstowy z numerami sekwencji, czasami (gg:mm:ss,mmm) i tekstem. Standard de facto w odtwarzaczach i platformach.'
171
+ },
172
+ {
173
+ term: 'Przesunięcie (Offset)',
174
+ definition: 'Stała ilość czasu dodawana lub odejmowana od wszystkich czasów w pliku. Mogą to być sekundy dodatnie (opóźnienie) lub ujemne (przyspieszenie).'
175
+ },
176
+ {
177
+ term: 'Framerate (fps)',
178
+ definition: 'Klatki na sekundę. 24p (kino), 25p (PAL/Europa), 29.97p (NTSC/USA), 60p (płynne wideo). Różnice powodują skumulowane przesunięcia.'
179
+ },
180
+ {
181
+ term: 'NTSC vs PAL',
182
+ definition: 'Regionalne standardy telewizyjne: PAL (25 kl./s) w Europie; NTSC (29.97 kl./s) w USA. Ok. 4% różnicy w prędkości.'
183
+ },
184
+ {
185
+ term: 'Przesunięcie progresywne',
186
+ definition: 'Gdy synchronizacja zaczyna się poprawnie, ale stopniowo kończy się brakiem synchronizacji. Wskazuje na różnicę w framerate, wymaga ponownego przetwarzania.'
187
+ }
188
+ ] },
189
+
190
+ { type: 'message', title: 'Profesjonalna edycja z pełną kontrolą', ariaLabel: 'Informacje techniczne o synchronizacji', html: 'Nasze podejście jest proste, ale potężne: pojedyncze przesunięcie, stosowane natychmiast, przetwarzane w 100% w Twojej przeglądarce. Bez chmury, bez przechowywania, bez śledzenia. Po prostu prześlij, dostosuj, pobierz. Pełna kontrola nad Twoimi treściami.' },
191
+
192
+ { type: 'title', text: 'Podsumowanie: Filmy bez zakłóceń', level: 3 },
193
+ { type: 'paragraph', html: 'Idealna synchronizacja napisów jest kluczowa dla wysokiej jakości wrażeń audiowizualnych. Dzięki temu narzędziu przekształcisz frustrujące doświadczenie w idealny wieczór filmowy, bez potrzeby korzystania z drogiego lub skomplikowanego oprogramowania.' }
194
+ ];
195
+
196
+ const faqSchema: WithContext<FAQPage> = {
197
+ '@context': 'https://schema.org',
198
+ '@type': 'FAQPage',
199
+ mainEntity: faq.map((item) => ({
200
+ '@type': 'Question',
201
+ name: item.question,
202
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
203
+ })),
204
+ };
205
+
206
+ const howToSchema: WithContext<HowTo> = {
207
+ '@context': 'https://schema.org',
208
+ '@type': 'HowTo',
209
+ name: title,
210
+ description,
211
+ step: howTo.map((step) => ({
212
+ '@type': 'HowToStep',
213
+ name: step.name,
214
+ text: step.text,
215
+ })),
216
+ };
217
+
218
+ const appSchema: WithContext<SoftwareApplication> = {
219
+ '@context': 'https://schema.org',
220
+ '@type': 'SoftwareApplication',
221
+ name: title,
222
+ description,
223
+ applicationCategory: 'UtilitiesApplication',
224
+ operatingSystem: 'Web',
225
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
226
+ inLanguage: 'pl',
227
+ };
228
+
229
+ export const content: SubtitleSyncLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ faqTitle: 'Często zadawane pytania dotyczące synchronizacji napisów',
237
+ bibliography,
238
+ bibliographyTitle: 'Zasoby techniczne dotyczące formatów napisów',
239
+ howTo,
240
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
241
+ };
@@ -0,0 +1,241 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { SubtitleSyncUI, SubtitleSyncLocaleContent } from '../index';
3
+
4
+ const slug = 'sincronizar-legendas-srt-online-ajustar-tempo-gratis';
5
+ const title = 'Sincronizar Legendas SRT Online: Ajustar Tempo Gratuitamente';
6
+ const description = 'Ferramenta online para adiantar ou atrasar legendas SRT. Corrija facilmente o desfasamento temporal e descarregue o ficheiro sincronizado instantaneamente.';
7
+
8
+ const ui: SubtitleSyncUI = {
9
+ dropTitle: "Arraste o seu ficheiro .SRT aqui",
10
+ dropSubtitle: "ou clique para procurar",
11
+ adjustTitle: "Ajustar Tempo",
12
+ offsetLabel: "Desfasamento (segundos)",
13
+ offsetHelp: "Use valores negativos para adiantar (ex: -1.5) e valores positivos para atrasar.",
14
+ linesStat: "Linhas",
15
+ firstStat: "Primeira Legenda",
16
+ lastStat: "Última Legenda",
17
+ originalLabel: "ORIGINAL",
18
+ resultLabel: "RESULTADO",
19
+ downloadButton: "Descarregar Corrigido",
20
+ previewBadge: "PRÉ-VISUALIZAÇÃO",
21
+ unitSeconds: "seg"
22
+ };
23
+
24
+ const faq: SubtitleSyncLocaleContent['faq'] = [
25
+ {
26
+ question: "Como posso sincronizar as minhas legendas se o áudio estiver adiantado?",
27
+ answer: "Se o áudio aparecer antes do texto, deve atrasar as legendas. Introduza um valor positivo na calculadora (ex: 2.0 para atrasá-las em 2 segundos).",
28
+ },
29
+ {
30
+ question: "Que formatos de ficheiro esta ferramenta aceita?",
31
+ answer: "Atualmente, a ferramenta está otimizada para ficheiros .SRT (SubRip), que é o padrão mais comum em reprodutores de vídeo e plataformas de streaming.",
32
+ },
33
+ {
34
+ question: "É seguro carregar os meus ficheiros de legendas?",
35
+ answer: "Sim, porque o processamento é 100% local no seu dispositivo. Os seus ficheiros não são enviados para nenhum servidor; a sincronização acontece diretamente no seu navegador.",
36
+ },
37
+ {
38
+ question: "Posso sincronizar apenas parte do ficheiro?",
39
+ answer: "Não, esta ferramenta aplica um desfasamento constante a todo o ficheiro. Se o desfasamento for progressivo, poderá necessitar de uma edição mais avançada.",
40
+ },
41
+ ];
42
+
43
+ const howTo: SubtitleSyncLocaleContent['howTo'] = [
44
+ {
45
+ name: "Carregue o seu ficheiro SRT",
46
+ text: "Arraste o ficheiro de legendas que deseja corrigir para a área de carregamento.",
47
+ },
48
+ {
49
+ name: "Identifique o desfasamento",
50
+ text: "Meça quanto atraso ou adiantamento as legendas têm em relação ao áudio no seu reprodutor.",
51
+ },
52
+ {
53
+ name: "Ajuste o desfasamento",
54
+ text: "Introduza os segundos positivos (atraso) ou negativos (adiantamento) no painel de controlo.",
55
+ },
56
+ {
57
+ name: "Descarregue o ficheiro",
58
+ text: "Verifique na pré visualização se os tempos estão corretos e clique em descarregar para obter o seu novo SRT.",
59
+ },
60
+ ];
61
+
62
+ const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
63
+ {
64
+ name: "Especificação do formato SubRip (SRT)",
65
+ url: "https://matroska.org/technical/subtitles.html#srt-subtitles",
66
+ },
67
+ {
68
+ name: "MDN Web Docs - FileReader API",
69
+ url: "https://developer.mozilla.org/en-US/docs/Web/API/FileReader",
70
+ },
71
+ ];
72
+
73
+ const seo: SubtitleSyncLocaleContent['seo'] = [
74
+ {
75
+ type: 'summary',
76
+ title: 'Sincronização Profissional de Legendas',
77
+ items: [
78
+ 'Correção instantânea de desfasamentos áudio-legenda',
79
+ 'Suporta ficheiros SRT (SubRip) padrão',
80
+ 'Processamento 100% local - máxima privacidade',
81
+ 'Sem instalação, sem subscrição, completamente gratuito'
82
+ ]
83
+ },
84
+ { type: 'title', text: 'Sincronização Perfeita de Legendas SRT', level: 2 },
85
+ { type: 'paragraph', html: 'Não há nada mais frustrante para um espectador do que ver diálogos que não correspondem às vozes. O desfasamento de legendas ocorre geralmente devido a diferenças entre versões de vídeo: variações na taxa de fotogramas, cortes publicitários, intros de produção ou alterações na compressão. Com esta ferramenta, resolve o problema em segundos.' },
86
+
87
+ { type: 'stats', items: [
88
+ { value: '100%', label: 'Processamento Local', icon: 'mdi:shield' },
89
+ { value: 'Milissegundos', label: 'Precisão', icon: 'mdi:clock-outline' },
90
+ { value: 'Qualquer', label: 'SEM limite de ficheiro', icon: 'mdi:file-document' }
91
+ ], columns: 3 },
92
+
93
+ { type: 'title', text: 'Adiantar vs Atrasar: Guia Prático', level: 3 },
94
+ { type: 'paragraph', html: 'O primeiro passo é identificar corretamente o tipo de desfasamento. Aqui está a lógica:' },
95
+ { type: 'list', items: [
96
+ '<strong>Atrasar (Valor Positivo):</strong> Quando vê o texto aparecer ANTES do som. As legendas estão adiantadas. Exemplo: +2.0 segundos.',
97
+ '<strong>Adiantar (Valor Negativo):</strong> Quando vê o texto aparecer DEPOIS do som. As legendas estão atrasadas. Exemplo: -2.0 segundos.',
98
+ '<strong>Teste e Ajuste:</strong> Comece com pequenos incrementos (0.5s) e use a pré-visualização para validar.'
99
+ ], icon: 'mdi:arrow-right' },
100
+
101
+ { type: 'card', title: 'Privacidade de Nível Profissional', html: 'Ao processar o ficheiro via JavaScript no lado do cliente, garantimos que o conteúdo das suas legendas nunca sai do seu computador. Essencial para tradutores e profissionais que lidam com material confidencial ou sob NDA.' },
102
+
103
+ { type: 'title', text: 'Casos de Uso Comuns', level: 3 },
104
+ { type: 'comparative', items: [
105
+ {
106
+ title: 'Tradutores e Legendadores',
107
+ description: 'Sincronize traduções após trabalhar com múltiplas versões de vídeo',
108
+ icon: 'mdi:translate',
109
+ points: [
110
+ 'Ficheiros SRT de diferentes fontes',
111
+ 'Versionamento de conteúdo (cinema vs streaming)',
112
+ 'Entrega rápida sem mudar de ferramentas'
113
+ ]
114
+ },
115
+ {
116
+ title: 'Criadores de Conteúdo',
117
+ description: 'Recupere legendas quando o vídeo foi processado com uma taxa de fotogramas diferente',
118
+ icon: 'mdi:video',
119
+ points: [
120
+ 'Reutilize legendas existentes',
121
+ 'Alterações de formato (720p para 1080p)',
122
+ 'Evite o re-ajuste manual de mais de 1000 linhas'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: 'Utilizadores Casuais',
128
+ description: 'Corrija legendas descarregadas que não se ajustam perfeitamente',
129
+ icon: 'mdi:account',
130
+ points: [
131
+ 'Legendas genéricas fora de sincronia',
132
+ 'Filmes de diferentes regiões (PAL vs NTSC)',
133
+ 'Streaming com versões editadas'
134
+ ]
135
+ }
136
+ ], columns: 3 },
137
+
138
+ { type: 'title', text: 'Por que as Legendas Ficam Fora de Sincronia', level: 3 },
139
+ { type: 'table', headers: ['Causa Comum', 'Descrição Técnica', 'Solução'], rows: [
140
+ ['Diferença de Framerate', '23.976 fps vs 25 fps - diferença acumulada', 'Ajuste de desfasamento único (esta ferramenta)'],
141
+ ['Editorialização', 'Cortes de anúncios ou conteúdo adicional removido', 'Cálculo manual + sincronização'],
142
+ ['Versão Regional', 'PAL (25 fps Europa) vs NTSC (29.97 fps USA)', 'Desfasamento matemático simples'],
143
+ ['Alteração de Resolução', 'Re-codificação com diferente velocidade de processamento', 'Recálculo do ficheiro original']
144
+ ] },
145
+
146
+ { type: 'diagnostic', variant: 'info', title: 'Limitações Técnicas a Considerar', icon: 'mdi:information', badge: 'Importante', html: 'Esta ferramenta aplica um desfasamento <strong>constante</strong> a todo o ficheiro. Se o desfasamento for <strong>progressivo</strong> (começa bem mas fica gradualmente fora de sincronia), isso indica uma diferença persistente na taxa de fotogramas. Nesse caso, o ficheiro original necessita de reprocessamento em software de edição profissional.' },
147
+
148
+ { type: 'proscons', items: [
149
+ {
150
+ pro: 'Velocidade extrema - processa ficheiros grandes em milissegundos',
151
+ con: 'Ajusta apenas desfasamento fixo, não progressivos'
152
+ },
153
+ {
154
+ pro: 'Privacidade total - o conteúdo nunca sai do seu navegador',
155
+ con: 'Requer navegador moderno com JavaScript ativado'
156
+ },
157
+ {
158
+ pro: 'Formato de ficheiro universal - funciona com qualquer SRT padrão',
159
+ con: 'Não suporta outros formatos (ASS, VTT, SCC, etc.)'
160
+ },
161
+ {
162
+ pro: 'Completamente gratuito, sem publicidade, sem rasteio',
163
+ con: 'Sem histórico de alterações ou versionamento'
164
+ }
165
+ ], proTitle: 'Vantagens', conTitle: 'Limitações' },
166
+
167
+ { type: 'glossary', items: [
168
+ {
169
+ term: 'SRT (SubRip)',
170
+ definition: 'O formato de legenda mais universal: ficheiro de texto com números de sequência, tempos (hh:mm:ss,mmm) e texto. Padrão de facto em reprodutores e plataformas.'
171
+ },
172
+ {
173
+ term: 'Desfasamento (Offset)',
174
+ definition: 'Quantidade fixa de tempo adicionada ou subtraída a todos os tempos no ficheiro. Pode ser segundos positivos (atraso) ou negativos (adiantamento).'
175
+ },
176
+ {
177
+ term: 'Taxa de Fotogramas (fps)',
178
+ definition: 'Fotogrammi al secondo. 24p (cinema), 25p (PAL/Europa), 29.97p (NTSC/EUA), 60p (vídeo fluido). Diferenças causam desfasamentos cumulativos.'
179
+ },
180
+ {
181
+ term: 'NTSC vs PAL',
182
+ definition: 'Padrões de televisão regionais: PAL (25 fps) na Europa; NTSC (29.97 fps) nos EUA. Diferença de velocidade de cerca de 4%.'
183
+ },
184
+ {
185
+ term: 'Desfasamento Progressivo',
186
+ definition: 'Quando a sincronização começa correta mas acaba gradualmente fora de sincronia. Indica diferença de framerate, requer reprocessamento.'
187
+ }
188
+ ] },
189
+
190
+ { type: 'message', title: 'Edição Profissional com Controlo Total', ariaLabel: 'Informação técnica sobre sincronização', html: 'A nossa abordagem é simples mas poderosa: um único desfasamento, aplicado instantaneamente, processado 100% no seu navegador. Sem nuvem, sem armazenamento, sem rasteio. Simplesmente carregue, ajuste, descarregue. Controlo total sobre o seu conteúdo.' },
191
+
192
+ { type: 'title', text: 'Conclusão: Filmes Sem Interrupções', level: 3 },
193
+ { type: 'paragraph', html: 'A sincronização perfeita de legendas é essencial para uma experiência audiovisual de qualidade. Com esta ferramenta, transforma uma experiência frustrante numa noite de cinema perfeita, sem a necessidade de software caro ou complicado.' }
194
+ ];
195
+
196
+ const faqSchema: WithContext<FAQPage> = {
197
+ '@context': 'https://schema.org',
198
+ '@type': 'FAQPage',
199
+ mainEntity: faq.map((item) => ({
200
+ '@type': 'Question',
201
+ name: item.question,
202
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
203
+ })),
204
+ };
205
+
206
+ const howToSchema: WithContext<HowTo> = {
207
+ '@context': 'https://schema.org',
208
+ '@type': 'HowTo',
209
+ name: title,
210
+ description,
211
+ step: howTo.map((step) => ({
212
+ '@type': 'HowToStep',
213
+ name: step.name,
214
+ text: step.text,
215
+ })),
216
+ };
217
+
218
+ const appSchema: WithContext<SoftwareApplication> = {
219
+ '@context': 'https://schema.org',
220
+ '@type': 'SoftwareApplication',
221
+ name: title,
222
+ description,
223
+ applicationCategory: 'UtilitiesApplication',
224
+ operatingSystem: 'Web',
225
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
226
+ inLanguage: 'pt',
227
+ };
228
+
229
+ export const content: SubtitleSyncLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ faqTitle: 'Perguntas Frequentes sobre Sincronização de Legendas',
237
+ bibliography,
238
+ bibliographyTitle: 'Recursos Técnicos sobre Formatos de Legendas',
239
+ howTo,
240
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
241
+ };