@jjlmoya/utils-audiovisual 1.7.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 (151) 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/tool/chromaticLens/i18n/de.ts +246 -0
  17. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  18. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  19. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  21. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  22. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  23. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  28. package/src/tool/chromaticLens/index.ts +15 -7
  29. package/src/tool/collageMaker/i18n/de.ts +233 -0
  30. package/src/tool/collageMaker/i18n/id.ts +233 -0
  31. package/src/tool/collageMaker/i18n/it.ts +233 -0
  32. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  33. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  34. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  35. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  36. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  37. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  38. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  39. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  40. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  41. package/src/tool/collageMaker/index.ts +15 -6
  42. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  43. package/src/tool/exifCleaner/i18n/fr.ts +1 -1
  44. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  45. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  46. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  47. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  48. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  49. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  50. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  51. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  53. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  54. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  55. package/src/tool/exifCleaner/index.ts +16 -8
  56. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  57. package/src/tool/imageCompressor/i18n/en.ts +1 -1
  58. package/src/tool/imageCompressor/i18n/es.ts +1 -1
  59. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  60. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  61. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  62. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  63. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  64. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  65. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  66. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  67. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  69. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  70. package/src/tool/imageCompressor/index.ts +15 -7
  71. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  72. package/src/tool/printQualityCalculator/i18n/fr.ts +1 -1
  73. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  74. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  75. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  76. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  77. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  78. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  79. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  80. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  81. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  82. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  84. package/src/tool/printQualityCalculator/index.ts +15 -7
  85. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  86. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  87. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  88. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  89. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  90. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  91. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  92. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  93. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  94. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  95. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  96. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  97. package/src/tool/privacyBlur/index.ts +15 -7
  98. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  99. package/src/tool/subtitleSync/i18n/fr.ts +5 -5
  100. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  101. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  102. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  103. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  104. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  105. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  106. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  107. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  108. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  109. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  110. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  111. package/src/tool/subtitleSync/index.ts +15 -7
  112. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  113. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  114. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  115. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  116. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  117. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  118. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  119. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  120. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  121. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  122. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  123. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  124. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  125. package/src/tool/timelapseCalculator/index.ts +16 -8
  126. package/src/tool/tvDistance/i18n/de.ts +223 -0
  127. package/src/tool/tvDistance/i18n/id.ts +223 -0
  128. package/src/tool/tvDistance/i18n/it.ts +223 -0
  129. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  130. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  131. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  132. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  133. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  134. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  135. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  136. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  137. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  138. package/src/tool/tvDistance/index.ts +15 -7
  139. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  140. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  141. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  142. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  143. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  144. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  145. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  146. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  147. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  148. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  149. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  150. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  151. 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 = 'sincronizzare-sottotitoli-srt-online-regolare-timing-gratis';
5
+ const title = 'Sincronizzare Sottotitoli SRT Online: Regola il Timing Gratuitamente';
6
+ const description = 'Strumento online per anticipare o ritardare i sottotitoli SRT. Correggi facilmente l\'offset temporale e scarica istantaneamente il file sincronizzato.';
7
+
8
+ const ui: SubtitleSyncUI = {
9
+ dropTitle: "Trascina qui il tuo file .SRT",
10
+ dropSubtitle: "o clicca per sfogliare",
11
+ adjustTitle: "Regola Tempo",
12
+ offsetLabel: "Offset (secondi)",
13
+ offsetHelp: "Usa valori negativi per anticipare (es. -1.5) e valori positivi per ritardare.",
14
+ linesStat: "Linee",
15
+ firstStat: "Primo Sottotitolo",
16
+ lastStat: "Ultimo Sottotitolo",
17
+ originalLabel: "ORIGINALE",
18
+ resultLabel: "RISULTATO",
19
+ downloadButton: "Scarica Corretto",
20
+ previewBadge: "ANTEPRIMA",
21
+ unitSeconds: "sec"
22
+ };
23
+
24
+ const faq: SubtitleSyncLocaleContent['faq'] = [
25
+ {
26
+ question: "Come posso sincronizzare i miei sottotitoli se l'audio è in anticipo?",
27
+ answer: "Se l'audio appare prima del testo, devi ritardare i sottotitoli. Inserisci un valore positivo nel calcolatore (es. 2.0 per ritardarli di 2 secondi).",
28
+ },
29
+ {
30
+ question: "Quali formati di file accetta questo strumento?",
31
+ answer: "Attualmente, lo strumento è ottimizzato per i file .SRT (SubRip), che è lo standard più comune nei lettori video e nelle piattaforme di streaming.",
32
+ },
33
+ {
34
+ question: "È sicuro caricare i miei file di sottotitoli?",
35
+ answer: "Sì, perché l'elaborazione è al 100% locale sul tuo dispositivo. I tuoi file non vengono inviati a nessun server; la sincronizzazione avviene direttamente nel tuo browser.",
36
+ },
37
+ {
38
+ question: "Posso sincronizzare solo una parte del file?",
39
+ answer: "No, questo strumento applica un offset costante all'intero file. Se l'offset è progressivo, potresti aver bisogno di un editing più avanzato.",
40
+ },
41
+ ];
42
+
43
+ const howTo: SubtitleSyncLocaleContent['howTo'] = [
44
+ {
45
+ name: "Carica il tuo file SRT",
46
+ text: "Trascina il file dei sottotitoli che vuoi correggere nell'area di caricamento.",
47
+ },
48
+ {
49
+ name: "Identifica l'offset",
50
+ text: "Misura quanto ritardo o anticipo hanno i sottotitoli rispetto all'audio nel tuo lettore.",
51
+ },
52
+ {
53
+ name: "Regola l'offset",
54
+ text: "Inserisci i secondi positivi (ritardo) o negativi (anticipo) nel pannello di controllo.",
55
+ },
56
+ {
57
+ name: "Scarica il file",
58
+ text: "Verifica nell'anteprima che i tempi siano corretti e clicca su scarica per ottenere il tuo nuovo SRT.",
59
+ },
60
+ ];
61
+
62
+ const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
63
+ {
64
+ name: "Specifica del 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: 'Sincronizzazione Professionale dei Sottotitoli',
77
+ items: [
78
+ 'Correzione istantanea degli offset audio-sottotitoli',
79
+ 'Supporta i file standard SRT (SubRip)',
80
+ 'Elaborazione 100% locale - massima privacy',
81
+ 'Nessuna installazione, nessun abbonamento, completamente gratuito'
82
+ ]
83
+ },
84
+ { type: 'title', text: 'Sincronizzazione Perfetta dei Sottotitoli SRT', level: 2 },
85
+ { type: 'paragraph', html: 'Non c\'è niente di più frustrante per uno spettatore che vedere dialoghi che non corrispondono alle voci. L\'offset dei sottotitoli si verifica solitamente a causa di differenze tra le versioni video: variazioni nel framerate, tagli pubblicitari, intro di produzione o cambiamenti nella compressione. Con questo strumento, risolvi il problema in pochi secondi.' },
86
+
87
+ { type: 'stats', items: [
88
+ { value: '100%', label: 'Elaborazione Locale', icon: 'mdi:shield' },
89
+ { value: 'Millisecondi', label: 'Precisione', icon: 'mdi:clock-outline' },
90
+ { value: 'Qualsiasi', label: 'NESSUN limite di file', icon: 'mdi:file-document' }
91
+ ], columns: 3 },
92
+
93
+ { type: 'title', text: 'Anticipo vs Ritardo: Guida Pratica', level: 3 },
94
+ { type: 'paragraph', html: 'Il primo passo è identificare correttamente il tipo di offset. Ecco la logica:' },
95
+ { type: 'list', items: [
96
+ '<strong>Ritardo (Valore Positivo):</strong> Quando vedi il testo apparire PRIMA del suono. I sottotitoli sono in anticipo. Esempio: +2.0 secondi.',
97
+ '<strong>Anticipo (Valore Negativo):</strong> Quando vedi il testo apparire DOPO il suono. I sottotitoli sono in ritardo. Esempio: -2.0 secondi.',
98
+ '<strong>Testa e Regola:</strong> Inizia con piccoli incrementi (0.5s) e usa l\'anteprima per validare.'
99
+ ], icon: 'mdi:arrow-right' },
100
+
101
+ { type: 'card', title: 'Privacy di Livello Professionale', html: 'Elaborando il file tramite JavaScript sul lato client, garantiamo che il contenuto dei tuoi sottotitoli non lasci mai il tuo computer. Essenziale per traduttori e professionisti che gestiscono materiale riservato o sotto NDA.' },
102
+
103
+ { type: 'title', text: 'Casi d\'Uso Comuni', level: 3 },
104
+ { type: 'comparative', items: [
105
+ {
106
+ title: 'Traduttori e Sottotitolatori',
107
+ description: 'Sincronizza le traduzioni dopo aver lavorato con più versioni video',
108
+ icon: 'mdi:translate',
109
+ points: [
110
+ 'File SRT da diverse fonti',
111
+ 'Versioning dei contenuti (cinematografico vs streaming)',
112
+ 'Consegna rapida senza cambiare strumenti'
113
+ ]
114
+ },
115
+ {
116
+ title: 'Creatori di Contenuti',
117
+ description: 'Recupera i sottotitoli quando il video è stato elaborato con un framerate diverso',
118
+ icon: 'mdi:video',
119
+ points: [
120
+ 'Riuilizza i sottotitoli esistenti',
121
+ 'Cambi di formato (da 720p a 1080p)',
122
+ 'Evita il retiming manuale di più di 1000 linee'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: 'Utenti Occasionali',
128
+ description: 'Correggi i sottotitoli scaricati che non si adattano perfettamente',
129
+ icon: 'mdi:account',
130
+ points: [
131
+ 'Sottotitoli generici fuori sincrono',
132
+ 'Film in diverse regioni (PAL vs NTSC)',
133
+ 'Streaming con versioni editate'
134
+ ]
135
+ }
136
+ ], columns: 3 },
137
+
138
+ { type: 'title', text: 'Perché i Sottotitoli vanno Fuori Sincrono', level: 3 },
139
+ { type: 'table', headers: ['Causa Comune', 'Descrizione Tecnica', 'Soluzione'], rows: [
140
+ ['Differenza di Framerate', '23.976 fps vs 25 fps - differenza accumulata', 'Regolazione dell\'offset singolo (questo strumento)'],
141
+ ['Editoria', 'Tagli pubblicitari o contenuti aggiuntivi rimossi', 'Calcolo manuale + sincronizzazione'],
142
+ ['Versione Regionale', 'PAL (25 fps Europa) vs NTSC (29.97 fps USA)', 'Semplice offset matematico'],
143
+ ['Cambio di Risoluzione', 'Re-encoding con diversa velocità di elaborazione', 'Ricalcolo del file originale']
144
+ ] },
145
+
146
+ { type: 'diagnostic', variant: 'info', title: 'Limitazioni Tecniche da Considerare', icon: 'mdi:information', badge: 'Importante', html: 'Questo strumento applica un offset <strong>costante</strong> all\'intero file. Se l\'offset è <strong>progressivo</strong> (inizia bene ma va gradualmente fuori sincrono), indica una differenza persistente di framerate. In quel caso, il file originale deve essere rielaborato con un software di editing professionale.' },
147
+
148
+ { type: 'proscons', items: [
149
+ {
150
+ pro: 'Velocità estrema - elabora file di grandi dimensioni in millisecondi',
151
+ con: 'Regola solo l\'offset fisso, non quelli progressivi'
152
+ },
153
+ {
154
+ pro: 'Privacy totale - il contenuto non lascia mai il tuo browser',
155
+ con: 'Richiede un browser moderno con JavaScript abilitato'
156
+ },
157
+ {
158
+ pro: 'Formato universale - funziona con qualsiasi SRT standard',
159
+ con: 'Non supporta altri formati (ASS, VTT, SCC, ecc.)'
160
+ },
161
+ {
162
+ pro: 'Completamente gratuito, nessuna pubblicità, nessun tracciamento',
163
+ con: 'Nessuna cronologia delle modifiche o versioning'
164
+ }
165
+ ], proTitle: 'Vantaggi', conTitle: 'Limitazioni' },
166
+
167
+ { type: 'glossary', items: [
168
+ {
169
+ term: 'SRT (SubRip)',
170
+ definition: 'Il formato di sottotitoli più universale: file di testo con numeri di sequenza, tempi (hh:mm:ss,mmm) e testo. Standard de facto nei lettori e nelle piattaforme.'
171
+ },
172
+ {
173
+ term: 'Offset',
174
+ definition: 'Quantità fissa di tempo aggiunta o sottratta a tutti i tempi nel file. Possono essere secondi positivi (ritardo) o negativi (anticipo).'
175
+ },
176
+ {
177
+ term: 'Framerate (fps)',
178
+ definition: 'Fotogrammi al secondo. 24p (cinema), 25p (PAL/Europa), 29.97p (NTSC/USA), 60p (video fluido). Le differenze causano offset cumulativi.'
179
+ },
180
+ {
181
+ term: 'NTSC vs PAL',
182
+ definition: 'Standard televisivi regionali: PAL (25 fps) in Europa; NTSC (29.97 fps) in USA. Differenza di velocità di circa il 4%.'
183
+ },
184
+ {
185
+ term: 'Offset Progressivo',
186
+ definition: 'Quando la sincronizzazione inizia correttamente ma finisce per andare gradualmente fuori sincro. Indica una differenza di framerate, richiede rielaborazione.'
187
+ }
188
+ ] },
189
+
190
+ { type: 'message', title: 'Editing Professionale con Pieno Controllo', ariaLabel: 'Informazioni tecniche sulla sincronizzazione', html: 'Il nostro approccio è semplice ma potente: un singolo offset, applicato istantaneamente, elaborato al 100% nel tuo browser. Niente cloud, niente archiviazione, niente tracciamento. Semplicemente carica, regola, scarica. Pieno controllo sui tuoi contenuti.' },
191
+
192
+ { type: 'title', text: 'Conclusione: Film Senza Interruzioni', level: 3 },
193
+ { type: 'paragraph', html: 'La perfetta sincronizzazione dei sottotitoli è essenziale per un\'esperienza audiovisiva di qualità. Con questo strumento, trasformi un\'esperienza frustrante in una serata cinema perfetta, senza la necessità di software costosi o complicati.' }
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: 'it',
227
+ };
228
+
229
+ export const content: SubtitleSyncLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ faqTitle: 'Domande Frequenti sulla Sincronizzazione dei Sottotitoli',
237
+ bibliography,
238
+ bibliographyTitle: 'Risorse Tecniche sui Formati dei Sottotitoli',
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-subtitle-synchronize-online-adjust-timing-free';
5
+ const title = 'SRT字幕オンライン同期:無料でタイミング調整';
6
+ const description = 'SRT字幕を早めたり遅らせたりするためのオンラインツール。時間のズレを簡単に修正し、同期されたファイルをすぐにダウンロードできます。';
7
+
8
+ const ui: SubtitleSyncUI = {
9
+ dropTitle: ".SRTファイルをここにドラッグ",
10
+ dropSubtitle: "またはクリックして選択",
11
+ adjustTitle: "時間を調整",
12
+ offsetLabel: "オフセット(秒)",
13
+ offsetHelp: "早める場合は負の値(例:-1.5)、遅らせる場合は正の値を使用します。",
14
+ linesStat: "行数",
15
+ firstStat: "最初の字幕",
16
+ lastStat: "最後の字幕",
17
+ originalLabel: "オリジナル",
18
+ resultLabel: "結果",
19
+ downloadButton: "修正済みをダウンロード",
20
+ previewBadge: "プレビュー",
21
+ unitSeconds: "秒"
22
+ };
23
+
24
+ const faq: SubtitleSyncLocaleContent['faq'] = [
25
+ {
26
+ question: "音声が先に聞こえる場合、どうやって字幕を同期させればいいですか?",
27
+ answer: "音ダイがテキストよりも先に聞こえる場合は、字幕を遅らせる必要があります。本ツールで正の値(例:2秒遅らせるなら 2.0)を入力してください。",
28
+ },
29
+ {
30
+ question: "対応しているファイル形式は何ですか?",
31
+ answer: "現在は.SRT(SubRip)形式に最適化されています。これは動画プレイヤーや配信プラットフォームで最も一般的な標準形式です。",
32
+ },
33
+ {
34
+ question: "字幕ファイルをアップロードしても安全ですか?",
35
+ answer: "はい。処理はすべてお使いのデバイス上でローカルに行われます。ファイルがサーバーに送信されることはなく、同期作業はブラウザ内で完結します。",
36
+ },
37
+ {
38
+ question: "ファイルの一部だけを同期できますか?",
39
+ answer: "いいえ。このツールはファイル全体に一定のオフセットを適用します。ズレが徐々に大きくなる(累進的)場合は、より高度な編集ソフトが必要になることがあります。",
40
+ },
41
+ ];
42
+
43
+ const howTo: SubtitleSyncLocaleContent['howTo'] = [
44
+ {
45
+ name: "SRTファイルをアップロード",
46
+ text: "修正したい字幕ファイルをアップロードエリアにドラッグします。",
47
+ },
48
+ {
49
+ name: "ズレを確認",
50
+ text: "お使いの再生ソフトで、音声に対して字幕がどれだけ遅れているか、あるいは早まっているかを確認します。",
51
+ },
52
+ {
53
+ name: "オフセットを調整",
54
+ text: "コントロールパネルで、遅らせる(正の値)か早める(負の値)秒数を入力します。",
55
+ },
56
+ {
57
+ name: "ファイルをダウンロード",
58
+ text: "プレビューで時間が正しいことを確認し、ダウンロードをクリックして新しいSRTファイルを取得します。",
59
+ },
60
+ ];
61
+
62
+ const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
63
+ {
64
+ name: "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/ja/docs/Web/API/FileReader",
70
+ },
71
+ ];
72
+
73
+ const seo: SubtitleSyncLocaleContent['seo'] = [
74
+ {
75
+ type: 'summary',
76
+ title: 'プロフェッショナルな字幕同期',
77
+ items: [
78
+ '音声と字幕のズレを即座に修正',
79
+ '標準的なSRT (SubRip) ファイルに対応',
80
+ '100% ローカル処理によりプライバシーを最大化',
81
+ 'インストール不要、登録不要、完全無料'
82
+ ]
83
+ },
84
+ { type: 'title', text: '完璧なSRT字幕の同期を実現', level: 2 },
85
+ { type: 'paragraph', html: '視聴者にとって、声と一致しないセリフほどストレスを感じるものはありません。字幕のズレは通常、動画バージョンの違い(フレームレートの変動、広告の挿入、制作ロゴの有無、圧縮率の変化など)によって発生します。このツールを使えば、数秒で問題を解決できます。' },
86
+
87
+ { type: 'stats', items: [
88
+ { value: '100%', label: 'ローカル処理', icon: 'mdi:shield' },
89
+ { value: 'ミリ秒単位', label: '高精度', icon: 'mdi:clock-outline' },
90
+ { value: '制限なし', label: 'ファイルサイズ不問', icon: 'mdi:file-document' }
91
+ ], columns: 3 },
92
+
93
+ { type: 'title', text: '「早める」か「遅らせる」か:実践ガイド', level: 3 },
94
+ { type: 'paragraph', html: '最初のステップは、ズレの種類を正しく特定することです。論理は以下の通りです:' },
95
+ { type: 'list', items: [
96
+ '<strong>遅らせる (正の値):</strong> 音より先にテキストが出る場合。字幕が早すぎます。例:+2.0秒',
97
+ '<strong>早める (負の値):</strong> 音の後にテキストが出る場合。字幕が遅れています。例:-2.0秒',
98
+ '<strong>テストと調整:</strong> まずは小さな単位(0.5秒など)から始め、プレビューを使って確認してください。'
99
+ ], icon: 'mdi:arrow-right' },
100
+
101
+ { type: 'card', title: 'プロフェッショナル・プライバシー', html: 'クライアントサイドのJavaScriptでファイルを処理するため、字幕の内容があなたのコンピュータから外部へ漏れることはありません。機密情報を扱う翻訳者や、NDA(守秘義務契約)下のプロフェッショナルの方にも安心してお使いいただけます。' },
102
+
103
+ { type: 'title', text: '主なユースケース', level: 3 },
104
+ { type: 'comparative', items: [
105
+ {
106
+ title: '翻訳者・字幕制作の方',
107
+ description: '複数の動画バージョンに合わせて翻訳タイミングを一括同期',
108
+ icon: 'mdi:translate',
109
+ points: [
110
+ '異なるソース由来のSRTファイル',
111
+ '劇場版と配信版などのバージョン管理',
112
+ 'ツールを切り替えずに迅速な納品'
113
+ ]
114
+ },
115
+ {
116
+ title: 'コンテンツ制作の方',
117
+ description: '異なるフレームレートで書き出された動画に既存字幕を合わせる',
118
+ icon: 'mdi:video',
119
+ points: [
120
+ '既存字幕の再利用',
121
+ '解像度変更(720pから1080p)への対応',
122
+ '数千行の手動調整作業を回避'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: '一般ユーザーの方',
128
+ description: 'ダウンロードした字幕が動画と少しズレている場合の修正',
129
+ icon: 'mdi:account',
130
+ points: [
131
+ '汎用的な字幕の同期ずれ',
132
+ 'リージョン違い(PALとNTSCなど)',
133
+ '編集が加えられた配信版への対応'
134
+ ]
135
+ }
136
+ ], columns: 3 },
137
+
138
+ { type: 'title', text: 'なぜ字幕がズレるのか', level: 3 },
139
+ { type: 'table', headers: ['主な原因', '技術的背景', '解決策'], rows: [
140
+ ['フレームレートの差', '23.976 fps vs 25 fps - 累積的なズレ', '一定のオフセット調整(本ツール)'],
141
+ ['編集内容の差', '広告カットや追加シーンの有無', '手動計算 + 部分同期'],
142
+ ['リージョン版の違い', 'PAL(欧州25fps) vs NTSC(米国29.97fps)', '単純な数学的オフセット調整'],
143
+ ['解像度の変更', '処理速度の異なる再エンコード', 'オリジナルファイルの再計算']
144
+ ] },
145
+
146
+ { type: 'diagnostic', variant: 'info', title: '考慮すべき技術的制限', icon: 'mdi:information', badge: '重要', html: 'このツールはファイル全体に<strong>一定</strong>のオフセットを適用します。もしズレが<strong>累進的</strong>(最初は合っているが徐々にズレていく)な場合は、フレームレートの根本的な違いを示しています。その場合は、プロ用の編集ソフトでファイルを再処理する必要があります。' },
147
+
148
+ { type: 'proscons', items: [
149
+ {
150
+ pro: '超高速 - 大容量ファイルも数ミリ秒で処理',
151
+ con: '固定されたズレのみ対応(徐々に広がるズレには非対応)'
152
+ },
153
+ {
154
+ pro: '完全なプライバシー - 内容がブラウザ外に出ることはありません',
155
+ con: 'JavaScriptが有効な最新のブラウザが必要'
156
+ },
157
+ {
158
+ pro: '汎用性 - あらゆる標準的なSRTに対応',
159
+ con: '他の形式(ASS, VTT, SCC等)には非対応'
160
+ },
161
+ {
162
+ pro: '完全無料、広告なし、追跡なし',
163
+ con: '変更履歴やバージョン管理機能はありません'
164
+ }
165
+ ], proTitle: 'メリット', conTitle: '制限' },
166
+
167
+ { type: 'glossary', items: [
168
+ {
169
+ term: 'SRT (SubRip)',
170
+ definition: '最も汎用的な字幕形式。番号、時間(hh:mm:ss,mmm)、テキストで構成されるテキストファイル。再生ソフト等の事実上の標準。'
171
+ },
172
+ {
173
+ term: 'オフセット (Offset)',
174
+ definition: 'ファイル内のすべての時間に加算または減算される一定の時間量。正の秒数(遅延)または負の秒数(前進)。'
175
+ },
176
+ {
177
+ term: 'フレームレート (fps)',
178
+ definition: '1秒あたりの静止画数。24p(映画)、25p(PAL/欧州)、29.97p(NTSC/米国)、60p(滑らかな動画)。この差が累積的なズレの原因になります。'
179
+ },
180
+ {
181
+ term: 'NTSC vs PAL',
182
+ definition: '放送方式の地域規格。PAL(25 fps)、NTSC(29.97 fps)。速度に約4%の差があります。'
183
+ },
184
+ {
185
+ term: '累進的なズレ (Progressive Offset)',
186
+ definition: '最初は合っているが、時間の経過とともにズレが大きくなる現象。フレームレートの設定違いが原因。'
187
+ }
188
+ ] },
189
+
190
+ { type: 'message', title: '完全なコントロールを備えたプロの編集', ariaLabel: '同期に関する技術情報', html: '私たちの手法はシンプルかつ強力です。一つのオフセットを即座に適用し、100% ブラウザ内で処理します。クラウドも、ストレージも、追跡もありません。アップロードして調整し、ダウンロードするだけ。あなたのコンテンツを完璧にコントロールできます。' },
191
+
192
+ { type: 'title', text: '結論:中断のない映画体験を', level: 3 },
193
+ { type: 'paragraph', html: '高品質な視聴体験には、完璧な字幕同期が不可欠です。このツールを使えば、高価なソフトや複雑な操作なしで、ストレスの多い体験を完璧な映画の時間へと変えることができます。' }
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: 'ja',
227
+ };
228
+
229
+ export const content: SubtitleSyncLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ faqTitle: '字幕同期に関するよくある質問',
237
+ bibliography,
238
+ bibliographyTitle: '字幕形式に関する技術リソース',
239
+ howTo,
240
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
241
+ };