@jjlmoya/utils-audiovisual 1.6.0 → 1.8.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 (175) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +198 -0
  3. package/src/category/i18n/fr.ts +1 -1
  4. package/src/category/i18n/id.ts +198 -0
  5. package/src/category/i18n/it.ts +198 -0
  6. package/src/category/i18n/ja.ts +198 -0
  7. package/src/category/i18n/ko.ts +198 -0
  8. package/src/category/i18n/nl.ts +198 -0
  9. package/src/category/i18n/pl.ts +198 -0
  10. package/src/category/i18n/pt.ts +198 -0
  11. package/src/category/i18n/ru.ts +198 -0
  12. package/src/category/i18n/sv.ts +198 -0
  13. package/src/category/i18n/tr.ts +198 -0
  14. package/src/category/i18n/zh.ts +198 -0
  15. package/src/category/index.ts +31 -3
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/schemas_fulfillment.test.ts +23 -0
  18. package/src/tests/title_quality.test.ts +55 -0
  19. package/src/tool/chromaticLens/i18n/de.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/en.ts +1 -1
  21. package/src/tool/chromaticLens/i18n/es.ts +1 -1
  22. package/src/tool/chromaticLens/i18n/fr.ts +1 -1
  23. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  28. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  29. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  30. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  31. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  32. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  33. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  34. package/src/tool/chromaticLens/index.ts +15 -7
  35. package/src/tool/collageMaker/i18n/de.ts +233 -0
  36. package/src/tool/collageMaker/i18n/en.ts +1 -1
  37. package/src/tool/collageMaker/i18n/es.ts +1 -1
  38. package/src/tool/collageMaker/i18n/fr.ts +1 -1
  39. package/src/tool/collageMaker/i18n/id.ts +233 -0
  40. package/src/tool/collageMaker/i18n/it.ts +233 -0
  41. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  42. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  43. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  44. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  45. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  46. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  47. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  48. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  49. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  50. package/src/tool/collageMaker/index.ts +15 -6
  51. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/en.ts +2 -2
  53. package/src/tool/exifCleaner/i18n/es.ts +2 -2
  54. package/src/tool/exifCleaner/i18n/fr.ts +4 -4
  55. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  56. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  57. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  58. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  59. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  60. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  61. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  62. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  63. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  64. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  65. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  66. package/src/tool/exifCleaner/index.ts +16 -8
  67. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/en.ts +2 -2
  69. package/src/tool/imageCompressor/i18n/es.ts +2 -2
  70. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  71. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  72. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  73. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  74. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  75. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  76. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  77. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  78. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  79. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  80. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  81. package/src/tool/imageCompressor/index.ts +15 -7
  82. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/en.ts +2 -2
  84. package/src/tool/printQualityCalculator/i18n/es.ts +3 -3
  85. package/src/tool/printQualityCalculator/i18n/fr.ts +3 -3
  86. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  87. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  88. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  89. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  90. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  91. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  92. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  93. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  94. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  95. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  96. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  97. package/src/tool/printQualityCalculator/index.ts +15 -7
  98. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  99. package/src/tool/privacyBlur/i18n/en.ts +1 -1
  100. package/src/tool/privacyBlur/i18n/es.ts +1 -1
  101. package/src/tool/privacyBlur/i18n/fr.ts +1 -1
  102. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  103. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  104. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  105. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  106. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  107. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  108. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  109. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  110. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  111. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  112. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  113. package/src/tool/privacyBlur/index.ts +15 -7
  114. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  115. package/src/tool/subtitleSync/i18n/en.ts +1 -1
  116. package/src/tool/subtitleSync/i18n/es.ts +1 -1
  117. package/src/tool/subtitleSync/i18n/fr.ts +8 -8
  118. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  119. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  120. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  121. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  122. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  123. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  124. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  125. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  126. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  127. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  128. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  129. package/src/tool/subtitleSync/index.ts +15 -7
  130. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  131. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  132. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  133. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  134. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  135. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  136. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  137. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  138. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  139. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  140. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  141. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  142. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  143. package/src/tool/timelapseCalculator/index.ts +16 -8
  144. package/src/tool/tvDistance/i18n/de.ts +223 -0
  145. package/src/tool/tvDistance/i18n/en.ts +1 -1
  146. package/src/tool/tvDistance/i18n/es.ts +1 -1
  147. package/src/tool/tvDistance/i18n/fr.ts +1 -1
  148. package/src/tool/tvDistance/i18n/id.ts +223 -0
  149. package/src/tool/tvDistance/i18n/it.ts +223 -0
  150. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  151. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  152. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  153. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  154. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  155. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  156. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  157. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  158. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  159. package/src/tool/tvDistance/index.ts +15 -7
  160. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  161. package/src/tool/videoFrameExtractor/i18n/en.ts +1 -1
  162. package/src/tool/videoFrameExtractor/i18n/es.ts +1 -1
  163. package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -1
  164. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  165. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  166. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  167. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  168. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  169. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  170. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  171. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  172. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  173. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  174. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  175. 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 = 'srt-ondertitels-online-synchroniseren-timing-aanpassen-gratis';
5
+ const title = 'SRT Ondertitels Online Synchroniseren: Timing Gratis Aanpassen';
6
+ const description = 'Online tool voor het vervroegen of vertragen van SRT ondertitels. Corrigeer eenvoudig de tijdsafwijking en download het gesynchroniseerde bestand direct.';
7
+
8
+ const ui: SubtitleSyncUI = {
9
+ dropTitle: "Sleep je .SRT bestand hierheen",
10
+ dropSubtitle: "of klik om te bladeren",
11
+ adjustTitle: "Tijd Aanpassen",
12
+ offsetLabel: "Verschuiving (seconden)",
13
+ offsetHelp: "Gebruik negatieve waarden om te vervroegen (bijv. -1.5) and positieve waarden om te vertragen.",
14
+ linesStat: "Regels",
15
+ firstStat: "Eerste Ondertitel",
16
+ lastStat: "Laatste Ondertitel",
17
+ originalLabel: "ORIGINEEL",
18
+ resultLabel: "RESULTAAT",
19
+ downloadButton: "Gecorrigeerde Versie Downloaden",
20
+ previewBadge: "PREVIEW",
21
+ unitSeconds: "sec"
22
+ };
23
+
24
+ const faq: SubtitleSyncLocaleContent['faq'] = [
25
+ {
26
+ question: "Hoe kan ik mijn ondertitels synchroniseren als de audio voorloopt?",
27
+ answer: "Als de audio voor de tekst verschijnt, moet je de ondertitels vertragen. Voer een positieve waarde in in de calculator (bijv. 2.0 om ze 2 seconden te vertragen).",
28
+ },
29
+ {
30
+ question: "Welke bestandsformaten accepteert deze tool?",
31
+ answer: "Momenteel is de tool geoptimaliseerd voor .SRT (SubRip) bestanden, de meest voorkomende standaard in videospelers en streamingplatforms.",
32
+ },
33
+ {
34
+ question: "Is het veilig om mijn ondertitelbestanden te uploaden?",
35
+ answer: "Ja, omdat de verwerking 100% lokaal op je apparaat gebeurt. Je bestanden worden niet naar een server verzonden; de synchronisatie vindt direct in je browser plaats.",
36
+ },
37
+ {
38
+ question: "Kan ik slechts een deel van het bestand synchroniseren?",
39
+ answer: "Nee, deze tool past een constante verschuiving toe op het hele bestand. Als de afwijking progressief is, heb je mogelijk geavanceerdere bewerking nodig.",
40
+ },
41
+ ];
42
+
43
+ const howTo: SubtitleSyncLocaleContent['howTo'] = [
44
+ {
45
+ name: "Upload je SRT bestand",
46
+ text: "Sleep het ondertitelbestand dat je wilt corrigeren naar het uploadgebied.",
47
+ },
48
+ {
49
+ name: "Identificeer de afwijking",
50
+ text: "Meet in je speler hoeveel de ondertitels achterlopen of voorlopen ten opzichte van de audio.",
51
+ },
52
+ {
53
+ name: "Pas de verschuiving aan",
54
+ text: "Voer positieve (vertraging) of negatieve (vervroeging) seconden in het bedieningspaneel in.",
55
+ },
56
+ {
57
+ name: "Download het bestand",
58
+ text: "Controleer in de preview of de tijden correct zijn en klik op downloaden om je nieuwe SRT te krijgen.",
59
+ },
60
+ ];
61
+
62
+ const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
63
+ {
64
+ name: "SubRip (SRT) formaatspecificatie",
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: 'Professionele Ondertitelsynchronisatie',
77
+ items: [
78
+ 'Directe correctie van audio-ondertitel afwijkingen',
79
+ 'Ondersteunt standaard SRT (SubRip) bestanden',
80
+ '100% lokale verwerking - maximale privacy',
81
+ 'Geen installatie, geen abonnement, volledig gratis'
82
+ ]
83
+ },
84
+ { type: 'title', text: 'Perfecte SRT Ondertitelsynchronisatie', level: 2 },
85
+ { type: 'paragraph', html: 'Er is niets frustrerender voor een kijker dan dialogen te zien die niet overeenkomen met de stemmen. Ondertitelafwijkingen ontstaan meestal door verschillen tussen videoversies: variaties in framerate, reclamefragmenten, productie-intro\'s of wijzigingen in compressie. Met deze tool los je het probleem in seconden op.' },
86
+
87
+ { type: 'stats', items: [
88
+ { value: '100%', label: 'Lokale Verwerking', icon: 'mdi:shield' },
89
+ { value: 'Milliseconden', label: 'Precisie', icon: 'mdi:clock-outline' },
90
+ { value: 'Elke Grootte', label: 'GEEN Bestandslimiet', icon: 'mdi:file-document' }
91
+ ], columns: 3 },
92
+
93
+ { type: 'title', text: 'Vervroegen vs Vertragen: Praktische Gids', level: 3 },
94
+ { type: 'paragraph', html: 'De eerste stap is het correct identificeren van het type afwijking. Dit is de logica:' },
95
+ { type: 'list', items: [
96
+ '<strong>Vertragen (Positieve Waarde):</strong> Wanneer je de tekst ziet verschijnen VOORDAT je het geluid hoort. De ondertitels zijn te vroeg. Voorbeeld: +2.0 seconden.',
97
+ '<strong>Vervroegen (Negatieve Waarde):</strong> Wanneer je de tekst ziet verschijnen NADAT je het geluid hoorde. De ondertitels zijn te laat. Voorbeeld: -2.0 seconden.',
98
+ '<strong>Testen en Aanpassen:</strong> Begin met kleine stapjes (0.5s) and gebruik de preview om te valideren.'
99
+ ], icon: 'mdi:arrow-right' },
100
+
101
+ { type: 'card', title: 'Privacy op Professioneel Niveau', html: 'Door het bestand te verwerken via client-side JavaScript, garanderen we dat de inhoud van je ondertitels nooit je computer verlaat. Essentieel voor vertalers en professionals die met vertrouwelijk materiaal werken of onder een NDA vallen.' },
102
+
103
+ { type: 'title', text: 'Veelvoorkomende Use Cases', level: 3 },
104
+ { type: 'comparative', items: [
105
+ {
106
+ title: 'Vertalers en Ondertitelaars',
107
+ description: 'Synchroniseer vertalingen na het werken met meerdere videoversies',
108
+ icon: 'mdi:translate',
109
+ points: [
110
+ 'SRT bestanden uit verschillende bronnen',
111
+ 'Content versioning (bioscoop vs streaming)',
112
+ 'Snelle levering zonder van tool te wisselen'
113
+ ]
114
+ },
115
+ {
116
+ title: 'Content Creators',
117
+ description: 'Herstel ondertitels wanneer de video is verwerkt met een andere framerate',
118
+ icon: 'mdi:video',
119
+ points: [
120
+ 'Hergebruik bestaande ondertitels',
121
+ 'Formaatwijzigingen (720p naar 1080p)',
122
+ 'Voorkom handmatig retimen van meer dan 1000 regels'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: 'Incidentele Gebruikers',
128
+ description: 'Corrigeer gedownloade ondertitels die niet perfect passen',
129
+ icon: 'mdi:account',
130
+ points: [
131
+ 'Generieke niet-synchrone ondertitels',
132
+ 'Films uit verschillende regio\'s (PAL vs NTSC)',
133
+ 'Streaming met bewerkte versies'
134
+ ]
135
+ }
136
+ ], columns: 3 },
137
+
138
+ { type: 'title', text: 'Waarom Ondertitels uit Synchronisatie Lopen', level: 3 },
139
+ { type: 'table', headers: ['Veelvoorkomende Oorzaak', 'Technische Beschrijving', 'Oplossing'], rows: [
140
+ ['Verschil in Framerate', '23.976 fps vs 25 fps - geaccumuleerd verschil', 'Correctie via één verschuiving (deze tool)'],
141
+ ['Editoriale Wijzigingen', 'Reclameblokken of verwijderde/toegevoegde content', 'Handmatige berekening + synchronisatie'],
142
+ ['Regionale Versie', 'PAL (25 fps Europa) vs NTSC (29.97 fps USA)', 'Eenvoudige wiskundige verschuiving'],
143
+ ['Verandering van Resolutie', 'Re-encoding met verschillende verwerkingssnelheid', 'Herberekening van origineel bestand']
144
+ ] },
145
+
146
+ { type: 'diagnostic', variant: 'info', title: 'Technische Beperkingen om Rekening mee te Houden', icon: 'mdi:information', badge: 'Belangrijk', html: 'Deze tool past een <strong>constante</strong> verschuiving toe op het hele bestand. Als de afwijking <strong>progressief</strong> is (begint goed maar loopt geleidelijk uit de pas), wijst dit op een aanhoudend verschil in framerate. In dat geval moet het originele bestand opnieuw worden verwerkt in professionele montagesoftware.' },
147
+
148
+ { type: 'proscons', items: [
149
+ {
150
+ pro: 'Extreme snelheid - verwerkt grote bestanden in milliseconden',
151
+ con: 'Past alleen een vaste verschuiving aan, geen progressieve'
152
+ },
153
+ {
154
+ pro: 'Totale privacy - inhoud verlaat nooit je browser',
155
+ con: 'Vereist een moderne browser met JavaScript ingeschakeld'
156
+ },
157
+ {
158
+ pro: 'Universeel formaat - werkt met elke standaard SRT',
159
+ con: 'Ondersteunt geen andere formaten (ASS, VTT, SCC, etc.)'
160
+ },
161
+ {
162
+ pro: 'Volledig gratis, geen advertenties, geen tracking',
163
+ con: 'Geen wijzigingshistorie of versioning'
164
+ }
165
+ ], proTitle: 'Voordelen', conTitle: 'Beperkingen' },
166
+
167
+ { type: 'glossary', items: [
168
+ {
169
+ term: 'SRT (SubRip)',
170
+ definition: 'Meest universele ondertitelformaat: tekstbestand met volgnummers, tijden (hh:mm:ss,mmm) en tekst. De facto standaard in spelers en platforms.'
171
+ },
172
+ {
173
+ term: 'Verschuiving (Offset)',
174
+ definition: 'Vaste hoeveelheid tijd die wordt opgeteld bij of afgetrokken van alle tijden in het bestand. Kan positief zijn (vertraging) of negatief (vervroeging).'
175
+ },
176
+ {
177
+ term: 'Framerate (fps)',
178
+ definition: 'Frames per seconde. 24p (cinema), 25p (PAL/Europa), 29.97p (NTSC/USA), 60p (vloeiende video). Verschillen veroorzaken cumulatieve afwijkingen.'
179
+ },
180
+ {
181
+ term: 'NTSC vs PAL',
182
+ definition: 'Regionale televisiestandaarden: PAL (25 fps) in Europa; NTSC (29.97 fps) in de VS. ~4% snelheidsverschil.'
183
+ },
184
+ {
185
+ term: 'Progressieve Afwijking',
186
+ definition: 'Wanneer de synchronisatie correct begint maar geleidelijk uit de pas loopt. Wijst op een framerateverschil, vereist herverwerking.'
187
+ }
188
+ ] },
189
+
190
+ { type: 'message', title: 'Professionele Bewerking met Volledige Controle', ariaLabel: 'Technische informatie over synchronisatie', html: 'Onze aanpak is eenvoudig maar krachtig: één enkele verschuiving, direct toegepast, 100% verwerkt in je browser. Geen cloud, geen opslag, geen tracking. Simpelweg uploaden, aanpassen, downloaden. Volledige controle over je content.' },
191
+
192
+ { type: 'title', text: 'Conclusie: Films Zonder Onderbrekingen', level: 3 },
193
+ { type: 'paragraph', html: 'Perfecte ondertitelsynchronisatie is essentieel voor een hoogwaardige audiovisuele ervaring. Met deze tool transformeer je een frustrerende ervaring in een perfecte filmavond, zonder de noodzaak van dure of ingewikkelde software.' }
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: 'nl',
227
+ };
228
+
229
+ export const content: SubtitleSyncLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ faqTitle: 'Veelgestelde Vragen over Ondertitelsynchronisatie',
237
+ bibliography,
238
+ bibliographyTitle: 'Technische Bronnen over Ondertitelformaten',
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 = '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
+ };