@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 = 'synkronisera-srt-undertexter-online-justera-timing-gratis';
5
+ const title = 'Synkronisera SRT undertexter online: Justera timing gratis';
6
+ const description = 'Onlineverktyg för att tidigarelägga eller fördröja SRT-undertexter. Korrigera tidsförskjutning enkelt och ladda ner den synkroniserade filen direkt.';
7
+
8
+ const ui: SubtitleSyncUI = {
9
+ dropTitle: "Dra din .SRT-fil hit",
10
+ dropSubtitle: "eller klicka för att bläddra",
11
+ adjustTitle: "Justera tid",
12
+ offsetLabel: "Offset (sekunder)",
13
+ offsetHelp: "Använd negativa värden för att tidigarelägga (t.ex. -1.5) och positiva värden för att fördröja.",
14
+ linesStat: "Rader",
15
+ firstStat: "Första undertexten",
16
+ lastStat: "Sista undertexten",
17
+ originalLabel: "ORIGINAL",
18
+ resultLabel: "RESULTAT",
19
+ downloadButton: "Ladda ner korrigerad",
20
+ previewBadge: "FÖRHANDSGRANSKNING",
21
+ unitSeconds: "sek"
22
+ };
23
+
24
+ const faq: SubtitleSyncLocaleContent['faq'] = [
25
+ {
26
+ question: "Hur kan jag synkronisera mina undertexter om ljudet ligger före?",
27
+ answer: "Om ljudet hörs före texten måste du fördröja undertexterna. Ange ett positivt värde i kalkylatorn (t.ex. 2.0 för att fördröja dem med 2 sekunder).",
28
+ },
29
+ {
30
+ question: "Vilka filformat accepterar det här verktyget?",
31
+ answer: "För närvarande är verktyget optimerat för .SRT-filer (SubRip), vilket är den vanligaste standarden i videospelare och streamingplattformar.",
32
+ },
33
+ {
34
+ question: "Är det säkert att ladda upp mina undertextfiler?",
35
+ answer: "Ja, eftersom bearbetningen sker 100 % lokalt på din enhet. Dina filer skickas inte till någon server; synkroniseringen sker direkt i din webbläsare.",
36
+ },
37
+ {
38
+ question: "Kan jag synkronisera bara en del av filen?",
39
+ answer: "Nej, det här verktyget tillämpar en konstant tidsförskjutning (offset) på hela filen. Om förskjutningen är progressiv kan du behöva mer avancerad redigering.",
40
+ },
41
+ ];
42
+
43
+ const howTo: SubtitleSyncLocaleContent['howTo'] = [
44
+ {
45
+ name: "Ladda upp din SRT-fil",
46
+ text: "Dra undertextfilen du vill korrigera till uppladdningsområdet.",
47
+ },
48
+ {
49
+ name: "Identifiera förskjutningen",
50
+ text: "Mät hur mycket fördröjning eller försprång undertexterna har i förhållande till ljudet i din spelare.",
51
+ },
52
+ {
53
+ name: "Justera offset",
54
+ text: "Ange positiva (fördröjning) eller negativa (tidigareläggning) sekunder i kontrollpanelen.",
55
+ },
56
+ {
57
+ name: "Ladda ner filen",
58
+ text: "Kontrollera i förhandsgranskningen att tiderna är korrekta och klicka på ladda ner för att få din nya SRT.",
59
+ },
60
+ ];
61
+
62
+ const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
63
+ {
64
+ name: "SubRip (SRT) formatspecifikation",
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: 'Professionell synkronisering av undertexter',
77
+ items: [
78
+ 'Omedelbar korrigering av osynk mellan ljud och undertext',
79
+ 'Stöd för SRT-standardfiler (SubRip)',
80
+ '100 % lokal bearbetning – maximal integritet',
81
+ 'Ingen installation, inget abonnemang, helt gratis'
82
+ ]
83
+ },
84
+ { type: 'title', text: 'Perfekt SRT undertextsynkronisering', level: 2 },
85
+ { type: 'paragraph', html: 'Det finns inget mer frustrerande för en tittare än att se dialoger som inte matchar rösterna. Undertextförskjutning beror vanligtvis på skillnader mellan videoversioner: variationer i bildhastighet (framerate), reklamavbrott, produktionsintron eller ändringar i komprimering. Med det här verktyget löser du problemet på några sekunder.' },
86
+
87
+ { type: 'stats', items: [
88
+ { value: '100 %', label: 'Lokal bearbetning', icon: 'mdi:shield' },
89
+ { value: 'Millisekunder', label: 'Precision', icon: 'mdi:clock-outline' },
90
+ { value: 'Alla storlekar', label: 'INGEN filgräns', icon: 'mdi:file-document' }
91
+ ], columns: 3 },
92
+
93
+ { type: 'title', text: 'Tidigareläggning vs Fördröjning: Praktisk guide', level: 3 },
94
+ { type: 'paragraph', html: 'Det första steget är att korrekt identifiera typen av förskjutning. Här är logiken:' },
95
+ { type: 'list', items: [
96
+ '<strong>Fördröjning (positivt värde):</strong> När du ser texten dyka upp FÖRE ljudet. Undertexterna ligger före. Exempel: +2.0 sekunder.',
97
+ '<strong>Tidigareläggning (negativt värde):</strong> När du ser texten dyka upp EFTER ljudet. Undertexterna ligger efter. Exempel: -2.0 sekunder.',
98
+ '<strong>Testa och justera:</strong> Börja med små ökningar (0,5 s) och använd förhandsgranskningen för att validera.'
99
+ ], icon: 'mdi:arrow-right' },
100
+
101
+ { type: 'card', title: 'Integritet på professionell nivå', html: 'Genom att bearbeta filen via JavaScript på klientsidan garanterar vi att ditt undertextinnehåll aldrig lämnar din dator. Viktigt för översättare och yrkesverksamma som hanterar konfidentiellt material eller material under sekretessavtal (NDA).' },
102
+
103
+ { type: 'title', text: 'Vanliga användningsfall', level: 3 },
104
+ { type: 'comparative', items: [
105
+ {
106
+ title: 'Översättare och textare',
107
+ description: 'Synkronisera översättningar efter att ha arbetat med flera videoversioner',
108
+ icon: 'mdi:translate',
109
+ points: [
110
+ 'SRT-filer från olika källor',
111
+ 'Versionshantering (bio vs streaming)',
112
+ 'Snabb leverans utan verktygsbyte'
113
+ ]
114
+ },
115
+ {
116
+ title: 'Innehållsskapare',
117
+ description: 'Återställ undertexter när videon har bearbetats med en annan bildhastighet',
118
+ icon: 'mdi:video',
119
+ points: [
120
+ 'Återanvänd befintliga undertexter',
121
+ 'Formatändringar (720p till 1080p)',
122
+ 'Undvik manuell omtidning av 1000-tals rader'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: 'Hobbyanvändare',
128
+ description: 'Korrigera nedladdade undertexter som inte passar perfekt',
129
+ icon: 'mdi:account',
130
+ points: [
131
+ 'Generella osynkade undertexter',
132
+ 'Filmer från olika regioner (PAL vs NTSC)',
133
+ 'Streaming med redigerade versioner'
134
+ ]
135
+ }
136
+ ], columns: 3 },
137
+
138
+ { type: 'title', text: 'Varför undertexter hamnar i osynk', level: 3 },
139
+ { type: 'table', headers: ['Vanlig orsak', 'Teknisk beskrivning', 'Lösning'], rows: [
140
+ ['Skillnad i bildhastighet', '23.976 fps vs 25 fps - ackumulerad skillnad', 'Enstaka offsetjustering (det här verktyget)'],
141
+ ['Redigering', 'Reklamavbrott eller borttaget/tillagt innehåll', 'Manuell beräkning + synkronisering'],
142
+ ['Regional version', 'PAL (25 fps Europa) vs NTSC (29.97 fps USA)', 'Enkel matematisk förskjutning'],
143
+ ['Ändrad upplösning', 'Omkodning med annan bearbetningshastighet', 'Omberäkning av originalfilen']
144
+ ] },
145
+
146
+ { type: 'diagnostic', variant: 'info', title: 'Tekniska begränsningar att tänka på', icon: 'mdi:information', badge: 'Viktigt', html: 'Det här verktyget tillämpar en <strong>konstant</strong> offset på hela filen. Om osynken är <strong>progressiv</strong> (startar bra men hamnar gradvis mer ur synk) tyder det på en bestående skillnad i bildhastighet. I så fall krävs ombearbetning av originalfilen i professionell redigeringsmjukvara.' },
147
+
148
+ { type: 'proscons', items: [
149
+ {
150
+ pro: 'Extrem hastighet – bearbetar stora filer på millisekunder',
151
+ con: 'Justerar endast fast förskjutning, inte progressiva'
152
+ },
153
+ {
154
+ pro: 'Total integritet – innehållet lämnar aldrig webbläsaren',
155
+ con: 'Kräver modern webbläsare med JavaScript aktiverat'
156
+ },
157
+ {
158
+ pro: 'Universellt format – fungerar med alla standard SRT',
159
+ con: 'Stöder inte andra format (ASS, VTT, SCC, etc.)'
160
+ },
161
+ {
162
+ pro: 'Helt gratis, ingen reklam, ingen spårning',
163
+ con: 'Ingen ändringshistorik eller versionshantering'
164
+ }
165
+ ], proTitle: 'Fördelar', conTitle: 'Begränsningar' },
166
+
167
+ { type: 'glossary', items: [
168
+ {
169
+ term: 'SRT (SubRip)',
170
+ definition: 'Det mest universella undertextformatet: textfil med sekvensnummer, tider (hh:mm:ss,mmm) och text. De facto-standard i spelare och plattformar.'
171
+ },
172
+ {
173
+ term: 'Offset',
174
+ definition: 'Fast mängd tid som läggs till eller dras ifrån alla tider i filen. Kan vara positiva sekunder (fördröjning) eller negativa (tidigareläggning).'
175
+ },
176
+ {
177
+ term: 'Bildhastighet (fps)',
178
+ definition: 'Bilder per sekund. 24p (film), 25p (PAL/Europa), 29.97p (NTSC/USA), 60p (flytande video). Skillnader orsakar ackumulerad osynk.'
179
+ },
180
+ {
181
+ term: 'NTSC vs PAL',
182
+ definition: 'Regionala tv-standarder: PAL (25 fps) i Europa; NTSC (29.97 fps) i USA. Ca 4 % hastighetsskillnad.'
183
+ },
184
+ {
185
+ term: 'Progressiv osynk',
186
+ definition: 'När synkroniseringen börjar korrekt men gradvis hamnar fel. Tyder på skillnad i bildhastighet, kräver ombearbetning.'
187
+ }
188
+ ] },
189
+
190
+ { type: 'message', title: 'Professionell redigering med full kontroll', ariaLabel: 'Teknisk information om synkronisering', html: 'Vår metod är enkel men kraftfull: en enda förskjutning, tillämpad omedelbart, bearbetad 100 % i din webbläsare. Inget moln, ingen lagring, ingen spårning. Ladda bara upp, justera, ladda ner. Full kontroll över ditt innehåll.' },
191
+
192
+ { type: 'title', text: 'Slutsats: Filmer utan avbrott', level: 3 },
193
+ { type: 'paragraph', html: 'Perfekt synkronisering av undertexter är avgörande för en audiovisuell upplevelse av hög kvalitet. Med det här verktyget förvandlar du en frustrerende upplevelse till en perfekt filmkväll, utan behov av dyr eller komplicerad mjukvara.' }
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: 'sv',
227
+ };
228
+
229
+ export const content: SubtitleSyncLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ faqTitle: 'Vanliga frågor om synkronisering av undertexter',
237
+ bibliography,
238
+ bibliographyTitle: 'Tekniska resurser för undertextformat',
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 = 'srt-altyazi-senkronize-et-online-zamanlamayi-ayarla-ucretsiz';
5
+ const title = 'SRT Altyazı Senkronize Et Online: Zamanlamayı Ücretsiz Ayarla';
6
+ const description = 'SRT altyazılarını ileri almak veya geciktirmek için çevrimiçi araç. Zaman farkını kolayca düzeltin ve senkronize edilmiş dosyayı anında indirin.';
7
+
8
+ const ui: SubtitleSyncUI = {
9
+ dropTitle: ".SRT dosyanızı buraya sürükleyin",
10
+ dropSubtitle: "veya göz atmak için tıklayın",
11
+ adjustTitle: "Zamanı Ayarla",
12
+ offsetLabel: "Kayma (saniye)",
13
+ offsetHelp: "İleri almak için negatif (örn. -1.5), geciktirmek için pozitif değerler kullanın.",
14
+ linesStat: "Satır",
15
+ firstStat: "İlk Altyazı",
16
+ lastStat: "Son Altyazı",
17
+ originalLabel: "ORİJİNAL",
18
+ resultLabel: "SONUÇ",
19
+ downloadButton: "Düzeltilmiş Olanı İndir",
20
+ previewBadge: "ÖNİZLEME",
21
+ unitSeconds: "sn"
22
+ };
23
+
24
+ const faq: SubtitleSyncLocaleContent['faq'] = [
25
+ {
26
+ question: "Ses altyazıdan öndeyse altyazılarımı nasıl senkronize edebilirim?",
27
+ answer: "Ses metinden önce geliyorsa, altyazıları geciktirmelisiniz. Hesaplayıcıya pozitif bir değer girin (örneğin, 2 saniye geciktirmek için 2.0).",
28
+ },
29
+ {
30
+ question: "Bu araç hangi dosya formatlarını kabul ediyor?",
31
+ answer: "Şu anda araç, video oynatıcılarda ve akış platformlarında en yaygın standart olan .SRT (SubRip) dosyaları için optimize edilmiştir.",
32
+ },
33
+ {
34
+ question: "Altyazı dosyalarımı yüklemek güvenli mi?",
35
+ answer: "Evet, çünkü işleme cihazınızda %100 yerel olarak gerçekleşir. Dosyalarınız herhangi bir sunucuya gönderilmez; senkronizasyon doğrudan tarayıcınızda yapılır.",
36
+ },
37
+ {
38
+ question: "Dosyanın sadece bir kısmını senkronize edebilir miyim?",
39
+ answer: "Hayır, bu araç tüm dosyaya sabit bir kayma uygular. Kayma aşamalıysa (zamanla artıyorsa), daha gelişmiş bir düzenleme gerekebilir.",
40
+ },
41
+ ];
42
+
43
+ const howTo: SubtitleSyncLocaleContent['howTo'] = [
44
+ {
45
+ name: "SRT dosyanızı yükleyin",
46
+ text: "Düzeltmek istediğiniz altyazı dosyasını yükleme alanına sürükleyin.",
47
+ },
48
+ {
49
+ name: "Kaymayı belirleyin",
50
+ text: "Altyazıların oynatıcınızdaki sese göre ne kadar gecikme veya ilerleme gösterdiğini ölçün.",
51
+ },
52
+ {
53
+ name: "Kaymayı ayarlayın",
54
+ text: "Kontrol paneline pozitif (gecikme) veya negatif (ilerleme) saniye girin.",
55
+ },
56
+ {
57
+ name: "Dosyayı indirin",
58
+ text: "Önizlemede zamanların doğru olduğunu doğrulayın ve yeni SRT'nizi almak için indire tıklayın.",
59
+ },
60
+ ];
61
+
62
+ const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
63
+ {
64
+ name: "SubRip (SRT) formatı özellikleri",
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: 'Profesyonel Altyazı Senkronizasyonu',
77
+ items: [
78
+ 'Ses-altyazı kaymalarının anında düzeltilmesi',
79
+ 'Standart SRT (SubRip) dosyalarını destekler',
80
+ '%100 yerel işleme - maksimum gizlilik',
81
+ 'Kurulum yok, abonelik yok, tamamen ücretsiz'
82
+ ]
83
+ },
84
+ { type: 'title', text: 'Mükemmel SRT Altyazı Senkronizasyonu', level: 2 },
85
+ { type: 'paragraph', html: 'Bir izleyici için seslerle uyuşmayan diyalogları görmekten daha sinir bozucu bir şey yoktur. Altyazı kayması genellikle video sürümleri arasındaki farklardan (kare hızı varyasyonları, reklam kesintileri, yapım introları veya sıkıştırmadaki değişiklikler) kaynaklanır. Bu araçla sorunu saniyeler içinde çözersiniz.' },
86
+
87
+ { type: 'stats', items: [
88
+ { value: '%100', label: 'Yerel İşleme', icon: 'mdi:shield' },
89
+ { value: 'Milisaniye', label: 'Hassasiyet', icon: 'mdi:clock-outline' },
90
+ { value: 'Sınırsız', label: 'Dosya Sınırı YOK', icon: 'mdi:file-document' }
91
+ ], columns: 3 },
92
+
93
+ { type: 'title', text: 'İleri Alma vs Geciktirme: Pratik Kılavuz', level: 3 },
94
+ { type: 'paragraph', html: 'İlk adım, kayma türünü doğru şekilde belirlemektir. Mantık şöyledir:' },
95
+ { type: 'list', items: [
96
+ '<strong>Geciktirme (Pozitif Değer):</strong> Metnin sesten ÖNCE göründüğünü gördüğünüzde. Altyazılar ileridedir. Örnek: +2.0 saniye.',
97
+ '<strong>İleri Alma (Negatif Değer):</strong> Metnin sesten SONRA göründüğünü gördüğünüzde. Altyazılar geridedir. Örnek: -2.0 saniye.',
98
+ '<strong>Test Et ve Ayarla:</strong> Küçük artışlarla (0,5 sn) başlayın ve doğrulamak için önizlemeyi kullanın.'
99
+ ], icon: 'mdi:arrow-right' },
100
+
101
+ { type: 'card', title: 'Profesyonel Seviye Gizlilik', html: 'Dosyayı istemci tarafı JavaScript aracılığıyla işleyerek altyazı içeriğinizin bilgisayarınızdan asla ayrılmamasını garanti ediyoruz. Gizli materyallerle veya NDA (Gizlilik Sözleşmesi) altında çalışan çevirmenler ve profesyoneller için temel bir gerekliliktir.' },
102
+
103
+ { type: 'title', text: 'Yaygın Kullanım Durumları', level: 3 },
104
+ { type: 'comparative', items: [
105
+ {
106
+ title: 'Çevirmenler ve Altyazı Hazırlayanlar',
107
+ description: 'Birden fazla video sürümüyle çalıştıktan sonra çevirileri senkronize edin',
108
+ icon: 'mdi:translate',
109
+ points: [
110
+ 'Farklı kaynaklardan gelen SRT dosyaları',
111
+ 'İçerik versiyonlama (sinema vs akış)',
112
+ 'Araç değiştirmeden hızlı teslimat'
113
+ ]
114
+ },
115
+ {
116
+ title: 'İçerik Üreticileri',
117
+ description: 'Video farklı kare hızıyla işlendiğinde altyazıları kurtarın',
118
+ icon: 'mdi:video',
119
+ points: [
120
+ 'Mevcut altyazıları yeniden kullanın',
121
+ 'Format değişiklikleri (720p\'den 1080p\'ye)',
122
+ '1000\'den fazla satırın manuel zamanlamasını yapmaktan kaçının'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: 'Bireysel Kullanıcılar',
128
+ description: 'Tam olarak uymayan indirilmiş altyazıları düzeltin',
129
+ icon: 'mdi:account',
130
+ points: [
131
+ 'Genel senkronizasyon dışı altyazılar',
132
+ 'Farklı bölgelerdeki filmler (PAL vs NTSC)',
133
+ 'Düzenlenmiş sürümlerle akış'
134
+ ]
135
+ }
136
+ ], columns: 3 },
137
+
138
+ { type: 'title', text: 'Altyazılar Neden Senkorizasyondan Çıkar', level: 3 },
139
+ { type: 'table', headers: ['Yaygın Sebep', 'Teknik Açıklama', 'Çözüm'], rows: [
140
+ ['Kare Hızı Farkı', '23.976 fps vs 25 fps - birikmiş fark', 'Tek seferlik kayma ayarı (bu araç)'],
141
+ ['Editoryal Değişiklikler', 'Reklam kesintileri veya çıkarılan/eklenen içerik', 'Manuel hesaplama + senkronizasyon'],
142
+ ['Bölgesel Sürüm', 'PAL (25 fps Avrupa) vs NTSC (29.97 fps ABD)', 'Basit matematiksel kayma'],
143
+ ['Çözünürlük Değişimi', 'Farklı işlem hızıyla yeniden kodlama', 'Orijinal dosyanın yeniden hesaplanması']
144
+ ] },
145
+
146
+ { type: 'diagnostic', variant: 'info', title: 'Dikkate Alınması Gereken Teknik Sınırlamalar', icon: 'mdi:information', badge: 'Önemli', html: 'Bu araç tüm dosyaya <strong>sabit</strong> bir kayma uygular. Kayma <strong>aşamalıysa</strong> (iyi başlar ancak yavaş yavaş senkronizasyondan çıkar), bu kalıcı bir kare hızı farkını gösterir. Bu durumda, orijinal dosyanın profesyonel düzenleme yazılımında yeniden işlenmesi gerekir.' },
147
+
148
+ { type: 'proscons', items: [
149
+ {
150
+ pro: 'Ekstrem hız - büyük dosyaları milisaniyeler içinde işler',
151
+ con: 'Sadece sabit kaymayı ayarlar, aşamalı olanları değil'
152
+ },
153
+ {
154
+ pro: 'Toplam gizlilik - içerik asla tarayıcınızdan ayrılmaz',
155
+ con: 'JavaScript etkinleştirilmiş modern tarayıcı gerektirir'
156
+ },
157
+ {
158
+ pro: 'Evrensel format - herhangi bir standart SRT ile çalışır',
159
+ con: 'Diğer formatları (ASS, VTT, SCC, vb.) desteklemez'
160
+ },
161
+ {
162
+ pro: 'Tamamen ücretsiz, reklam yok, takip yok',
163
+ con: 'Değişiklik geçmişi veya versiyonlama yok'
164
+ }
165
+ ], proTitle: 'Avantajlar', conTitle: 'Sınırlamalar' },
166
+
167
+ { type: 'glossary', items: [
168
+ {
169
+ term: 'SRT (SubRip)',
170
+ definition: 'En evrensel altyazı formatı: sıra numaraları, zamanlar (ss:dd:ss,mmm) ve metin içeren metin dosyası. Oynatıcılarda ve platformlarda de facto standarttır.'
171
+ },
172
+ {
173
+ term: 'Kayma (Offset)',
174
+ definition: 'Dosyadaki tüm zamanlara eklenen veya çıkarılan sabit bir süre. Pozitif saniye (gecikme) veya negatif (ilerleme) olabilir.'
175
+ },
176
+ {
177
+ term: 'Kare Hızı (fps)',
178
+ definition: 'Saniyedeki kare sayısı. 24p (sinema), 25p (PAL/Avrupa), 29.97p (NTSC/ABD), 60p (akıcı video). Farklar kümülatif kaymalara neden olur.'
179
+ },
180
+ {
181
+ term: 'NTSC vs PAL',
182
+ definition: 'Bölgesel televizyon standartları: Avrupa\'da PAL (25 fps); ABD\'de NTSC (29.97 fps). Yaklaşık %4 hız farkı.'
183
+ },
184
+ {
185
+ term: 'Aşamalı Kayma',
186
+ definition: 'Senkronizasyonun doğru başladığı ancak yavaş yavaş senkronizasyon dışı kaldığı durum. Kare hızı farkını gösterir, yeniden işleme gerektirir.'
187
+ }
188
+ ] },
189
+
190
+ { type: 'message', title: 'Tam Kontrollü Profesyonel Düzenleme', ariaLabel: 'Senkronizasyon hakkında teknik bilgiler', html: 'Yaklaşımımız basit ama güçlüdür: anında uygulanan, %100 tarayıcınızda işlenen tek bir kayma. Bulut yok, depolama yok, takip yok. Sadece yükleyin, ayarlayın, indirin. İçeriğiniz üzerinde tam kontrol.' },
191
+
192
+ { type: 'title', text: 'Sonuç: Kesintisiz Filmler', level: 3 },
193
+ { type: 'paragraph', html: 'Mükemmel altyazı senkronizasyonu, kaliteli bir görsel-işitsel deneyim için gereklidir. Bu araçla, pahalı veya karmaşık yazılımlara ihtiyaç duymadan sinir bozucu bir deneyimi mükemmel bir film gecesine dönüştürürsünüz.' }
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: 'tr',
227
+ };
228
+
229
+ export const content: SubtitleSyncLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ faqTitle: 'Altyazı Senkronizasyonu Hakkında Sıkça Sorulan Sorular',
237
+ bibliography,
238
+ bibliographyTitle: 'Altyazı Formatları Hakkında Teknik Kaynaklar',
239
+ howTo,
240
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
241
+ };