@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,169 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TimelapseUI, TimelapseLocaleContent } from '../index';
3
+
4
+ const slug = 'timelapse-hyperlapse-calculator-perfecte-intervallen';
5
+ const title = 'Timelapse en Hyperlapse Calculator: Perfecte Intervallen';
6
+ const description = 'Bereken het exacte interval tussen foto\'s, de totale duur en de opslagruimte voor je timelapses. Essentiële tool voor fotografen.';
7
+
8
+ const ui: TimelapseUI = {
9
+ title: "Timelapse Calculator",
10
+ paramsTitle: "Parameters",
11
+ eventDuration: "Hoe lang duurt de echte gebeurtenis?",
12
+ hours: "Uur",
13
+ minutes: "Minuten",
14
+ videoDuration: "Welke uiteindelijke video wil je?",
15
+ seconds: "Duur (sec)",
16
+ fps: "FPS",
17
+ resultsTitle: "Resultaten",
18
+ intervalLabel: "Stel je intervalometer in op:",
19
+ secondsUnit: "seconden",
20
+ totalPhotos: "Totaal aantal foto's",
21
+ speed: "Snelheid",
22
+ shutterSpeed: "Sluitertijd",
23
+ storage: "Grootte (RAW)",
24
+ rule180Info: "De 180°-regel adviseert een sluitertijd van de helft van het interval voor een vloeiende bewegingsonscherpte (motion blur).",
25
+ };
26
+
27
+ const faq: TimelapseLocaleContent['faq'] = [
28
+ {
29
+ question: "Hoe kies ik het juiste interval voor mijn timelapse?",
30
+ answer: "Dit hangt af van de snelheid van de beweging die je vastlegt. Gebruik voor snelle wolken 2-3 seconden. Voor de beweging van de zon of sterren 15-30 seconden. Voor groeiende planten of een bouwplaats 5-15 minuten.",
31
+ },
32
+ {
33
+ question: "Hoeveel foto's heb ik nodig voor een video van één minuut?",
34
+ answer: "Een standaard video heeft 24 of 30 frames per seconde (fps). Voor één minuut video op 24fps heb je precies 1440 foto's nodig (60 seconden * 24 foto's/seconde).",
35
+ },
36
+ {
37
+ question: "Wat is 'Flicker' en hoe voorkom ik het?",
38
+ answer: "Flicker is een vervelende flikkering die wordt veroorzaakt door kleine variaties in belichting tussen foto's. Gebruik altijd de handmatige modus (M), een vaste witbalans en geef de voorkeur aan lenzen met een handmatige diafragmaring om dit te voorkomen.",
39
+ },
40
+ {
41
+ question: "Waarom is de sluitertijd belangrijk?",
42
+ answer: "Om beweging vloeiend te laten lijken (180°-regel), moet de sluitertijd ongeveer de helft van het interval zijn. Als het interval bijvoorbeeld 2 seconden is, probeer dan met 1 seconde te fotograferen om natuurlijke motion blur te creëren.",
43
+ },
44
+ ];
45
+
46
+ const howTo: TimelapseLocaleContent['howTo'] = [
47
+ {
48
+ name: "Bepaal de uiteindelijke videoduur",
49
+ text: "Geef aan hoeveel seconden of minuten de resulterende video moet duren (bijv. 10 seconden voor Instagram).",
50
+ },
51
+ {
52
+ name: "Selecteer de output FPS",
53
+ text: "Kies de vloeiendheid van de video: 24 (bioscoop), 30 (web) of 60 (vloeiende slow motion).",
54
+ },
55
+ {
56
+ name: "Pas het opname-interval aan",
57
+ text: "Stel in om de hoeveel seconden je camera moet afdrukken, afhankelijk van de snelheid van de scène.",
58
+ },
59
+ {
60
+ name: "Controleer de opslagruimte",
61
+ text: "De calculator vertelt je hoeveel Gigabyte de sessie in beslag zal nemen. Zorg dat je SD kaart genoeg ruimte heeft voordat je begint.",
62
+ },
63
+ ];
64
+
65
+ const bibliography: TimelapseLocaleContent['bibliography'] = [
66
+ {
67
+ name: "Timescapes Forum - Digital Timelapse Acquisition & Processing",
68
+ url: "https://timescapes.org/phpBB3/viewforum.php?f=4",
69
+ },
70
+ {
71
+ name: "Magic Lantern - Auto ETTR & Bulb Ramping Algorithms",
72
+ url: "https://wiki.magiclantern.fm/ettr",
73
+ },
74
+ {
75
+ name: "LRTimelapse - Visual Deflicker & Holy Grail Workflow",
76
+ url: "https://lrtimelapse.com/tutorial/advanced/",
77
+ },
78
+ {
79
+ name: "PhotoPills - Advanced Timelapse Calculator & NPF Rule",
80
+ url: "https://www.photopills.com/calculators/timelapse",
81
+ },
82
+ ];
83
+
84
+ const seo: TimelapseLocaleContent['seo'] = [
85
+ { type: 'title', text: 'Definitieve Gids voor Timelapse en Hyperlapse intervallen', level: 2 },
86
+ { type: 'paragraph', html: 'Het verschil tussen een amateuristische versnelde video en een <strong>filmische timelapse</strong> ligt wiskundig gezien in één enkele factor: <strong>het interval</strong>. Deze calculator neemt het giswerk weg, zodat je je opnamen met een intervalometer nauwkeurig kunt plannen.' },
87
+
88
+ { type: 'title', text: 'Tabel met Aanbevolen Intervallen (Cheat Sheet)', level: 3 },
89
+ { type: 'paragraph', html: 'Gebruik deze tabel als snelle referentie om je intervalometer in te stellen op basis van het onderwerp.' },
90
+ { type: 'table', headers: ['Onderwerp / Scène', 'Aanbevolen Interval', 'Duur Gebeurtenis (Minimum)'], rows: [
91
+ ['Snelle Wolken / Storm', '1 - 2 seconden', '20 - 30 min'],
92
+ ['Stadsverkeer / Mensen (Blur)', '0,5 - 2 seconden', '15 - 20 min'],
93
+ ['Zonsondergang / Zonsopgang (Holy Grail)', '5 - 10 seconden', '1,5 - 2,5 uur'],
94
+ ['Langzame Wolken / Schaduwen', '10 - 15 seconden', '2 - 3 uur'],
95
+ ['Sterren / Melkweg (Astro)', '15 - 30 seconden*', '3 - 5 uur'],
96
+ ['Bouw / Groeiende Planten', '5 - 15 minuten', 'Dagen / Weken']
97
+ ]},
98
+ { type: 'tip', title: 'Opmerking voor Astro', html: 'Het interval wordt meestal bepaald door de benodigde belichtingstijd (500-regel) + 1 of 2 seconden buffer voor het wegschrijven naar de kaart.' },
99
+
100
+ { type: 'title', text: 'De 180° regel (Motion Blur)', level: 3 },
101
+ { type: 'paragraph', html: 'Een veelgemaakte fout bij timelapse is een "schokkerige" video. Voor die vloeiende filmische look heb je <strong>bewegingsonscherpte</strong> nodig.' },
102
+ { type: 'card', title: 'De Regel', icon: 'mdi:information', html: 'Je sluitertijd moet de helft van je interval zijn. <br /><br /> <em>Voorbeeld:</em> Als je elke <strong>4 seconden</strong> fotografeert, moet je belichting <strong>2 seconden</strong> zijn.' },
103
+
104
+ { type: 'title', text: 'Flicker en Handmatig Diafragma', level: 3 },
105
+ { type: 'paragraph', html: '"Flicker" is de irritante flikkering veroorzaakt door micro-variaties in de diafragmaopening tussen de opnamen.' },
106
+ { type: 'list', items: [
107
+ '<strong>Lens Twist:</strong> Ontgrendel de lens op DSLR\'s een klein stukje om de elektronische verbinding te verbreken en het diafragma mechanisch vast te zetten.',
108
+ '<strong>Alles Handmatig:</strong> ISO, Witbalans en Focus moeten vaststaan. Gebruik nooit automatische modi.',
109
+ '<strong>Fotografeer in RAW:</strong> Essentieel om belichting en kleur in de nabewerking te corrigeren.'
110
+ ]},
111
+
112
+ { type: 'diagnostic', variant: 'success', title: 'Geavanceerde Techniek: De "Holy Grail"', icon: 'mdi:crown', badge: 'Pro Techniek', html: 'De "Holy Grail" verwijst naar de vloeiende overgang van dag naar nacht (of andersom). Het is de moeilijkste technische uitdaging.' },
113
+
114
+ { type: 'stats', columns: 3, items: [
115
+ { label: 'Bulb Ramping', value: 'Geleidelijke Belichting', icon: 'mdi:brightness-6' },
116
+ { label: 'Post-Pro', value: 'LRTimelapse', icon: 'mdi:television-guide' },
117
+ { label: 'Strategie', value: 'Nacht-interval', icon: 'mdi:weather-night' }
118
+ ]},
119
+
120
+ { type: 'title', text: 'Conclusie: De Zen van Eenvoudige Mechanica', level: 3 },
121
+ { type: 'paragraph', html: 'Het beheersen van je timelapse begint bij het begrijpen van de wiskunde achter je intervalometer.' }
122
+ ];
123
+
124
+ const faqSchema: WithContext<FAQPage> = {
125
+ '@context': 'https://schema.org',
126
+ '@type': 'FAQPage',
127
+ mainEntity: faq.map((item) => ({
128
+ '@type': 'Question',
129
+ name: item.question,
130
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
131
+ })),
132
+ };
133
+
134
+ const howToSchema: WithContext<HowTo> = {
135
+ '@context': 'https://schema.org',
136
+ '@type': 'HowTo',
137
+ name: title,
138
+ description,
139
+ step: howTo.map((step) => ({
140
+ '@type': 'HowToStep',
141
+ name: step.name,
142
+ text: step.text,
143
+ })),
144
+ };
145
+
146
+ const appSchema: WithContext<SoftwareApplication> = {
147
+ '@context': 'https://schema.org',
148
+ '@type': 'SoftwareApplication',
149
+ name: title,
150
+ description,
151
+ applicationCategory: 'UtilitiesApplication',
152
+ operatingSystem: 'Web',
153
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
154
+ inLanguage: 'nl',
155
+ };
156
+
157
+ export const content: TimelapseLocaleContent = {
158
+ slug,
159
+ title,
160
+ description,
161
+ ui,
162
+ seo,
163
+ faq,
164
+ faqTitle: 'Veelgestelde Vragen over Timelapse Productie',
165
+ bibliography,
166
+ bibliographyTitle: 'Timelapse Theorie en Bronnen',
167
+ howTo,
168
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
169
+ };
@@ -0,0 +1,169 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TimelapseUI, TimelapseLocaleContent } from '../index';
3
+
4
+ const slug = 'kalkulator-timelapse-hyperlapse-idealne-interwaly';
5
+ const title = 'Kalkulator Timelapse i Hyperlapse: Idealne Interwały';
6
+ const description = 'Oblicz dokładny interwał między zdjęciami, całkowity czas trwania i potrzebne miejsce na dysku dla Twoich filmów poklatkowych.';
7
+
8
+ const ui: TimelapseUI = {
9
+ title: "Kalkulator Timelapse",
10
+ paramsTitle: "Parametry",
11
+ eventDuration: "Jak długo trwa prawdziwe wydarzenie?",
12
+ hours: "Godziny",
13
+ minutes: "Minuty",
14
+ videoDuration: "Jak długi ma być wynikowy film?",
15
+ seconds: "Czas trwania (sek)",
16
+ fps: "FPS",
17
+ resultsTitle: "Wyniki",
18
+ intervalLabel: "Ustaw interwałometr na:",
19
+ secondsUnit: "sekund",
20
+ totalPhotos: "Liczba zdjęć",
21
+ speed: "Prędkość",
22
+ shutterSpeed: "Czas naświetlania",
23
+ storage: "Rozmiar (RAW)",
24
+ rule180Info: "Zasada 180° sugeruje czas naświetlania równy połowie interwału dla uzyskania naturalnego rozmycia ruchu.",
25
+ };
26
+
27
+ const faq: TimelapseLocaleContent['faq'] = [
28
+ {
29
+ question: "Jak wybrać odpowiedni interwał dla mojego timelapse?",
30
+ answer: "Zależy to od prędkości ruchu, który filmujesz. Dla szybkich chmur użyj 2-3 sekund. Dla ruchu słońca lub gwiazd - 15-30 sekund. Dla rosnących roślin lub budowy - 5-15 minut.",
31
+ },
32
+ {
33
+ question: "Ile zdjęć potrzebuję na jednominutowy film?",
34
+ answer: "Standardowe wideo ma 24 lub 30 klatek na sekundę (fps). Dla minuty filmu przy 24fps potrzebujesz dokładnie 1440 zdjęć (60 sekund * 24 zdjęcia/sekundę).",
35
+ },
36
+ {
37
+ question: "Co to jest 'Flicker' i jak go uniknąć?",
38
+ answer: "To irytujące migotanie spowodowane małymi różnicami w ekspozycji między zdjęciami. Aby go uniknąć, zawsze używaj trybu manualnego (M), stałego balansu bieli i obiektywów z manualnym pierścieniem przysłony.",
39
+ },
40
+ {
41
+ question: "Dlaczego czas naświetlania jest ważny?",
42
+ answer: "Aby ruch wyglądał płynnie (zasada 180°), czas naświetlania powinien wynosić około połowy interwału. Na przykład, jeśli interwał wynosi 2 sekundy, spróbuj fotografować z czasem 1 sekundy.",
43
+ },
44
+ ];
45
+
46
+ const howTo: TimelapseLocaleContent['howTo'] = [
47
+ {
48
+ name: "Określ czas trwania filmu",
49
+ text: "Wskaż, ile sekund lub minut ma trwać wynikowe wideo (np. 10 sekund na Instagram).",
50
+ },
51
+ {
52
+ name: "Wybierz klatkaż (FPS)",
53
+ text: "Wybierz płynność filmu: 24 (kino), 30 (internet) lub 60 (płynne zwolnione tempo).",
54
+ },
55
+ {
56
+ name: "Dostosuj interwał fotografowania",
57
+ text: "Skonfiguruj, co ile sekund aparat ma robić zdjęcie, zależnie od prędkości sceny.",
58
+ },
59
+ {
60
+ name: "Sprawdź miejsce na karcie",
61
+ text: "Kalkulator powie Ci, ile gigabajtów zajmie sesja. Upewnij się, że masz wystarczająco dużo miejsca.",
62
+ },
63
+ ];
64
+
65
+ const bibliography: TimelapseLocaleContent['bibliography'] = [
66
+ {
67
+ name: "Timescapes Forum - Digital Timelapse Acquisition & Processing",
68
+ url: "https://timescapes.org/phpBB3/viewforum.php?f=4",
69
+ },
70
+ {
71
+ name: "Magic Lantern - Auto ETTR & Bulb Ramping Algorithms",
72
+ url: "https://wiki.magiclantern.fm/ettr",
73
+ },
74
+ {
75
+ name: "LRTimelapse - Visual Deflicker & Holy Grail Workflow",
76
+ url: "https://lrtimelapse.com/tutorial/advanced/",
77
+ },
78
+ {
79
+ name: "PhotoPills - Advanced Timelapse Calculator & NPF Rule",
80
+ url: "https://www.photopills.com/calculators/timelapse",
81
+ },
82
+ ];
83
+
84
+ const seo: TimelapseLocaleContent['seo'] = [
85
+ { type: 'title', text: 'Ostateczny przewodnik po interwałach do Timelapse i Hyperlapse', level: 2 },
86
+ { type: 'paragraph', html: 'Różnica między amatorskim przyspieszonym filmem a <strong>kinowym timelapse</strong> matematycznie sprowadza się do jednego czynnika: <strong>interwału</strong>. Ten kalkulator pozwala precyzyjnie zaplanować sesję.' },
87
+
88
+ { type: 'title', text: 'Tabela zalecanych interwałów (Cheat Sheet)', level: 3 },
89
+ { type: 'paragraph', html: 'Skorzystaj z tej tabeli, aby ustawić interwałometr zależnie od fotografowanego tematu.' },
90
+ { type: 'table', headers: ['Temat / Scena', 'Sugerowany interwał', 'Czas trwania (minimum)'], rows: [
91
+ ['Szybkie chmury / Burze', '1 - 2 sekundy', '20 - 30 min'],
92
+ ['Ruch miejski / Ludzie (rozmycie)', '0.5 - 2 sekundy', '15 - 20 min'],
93
+ ['Zachód / Wschód słońca (Holy Grail)', '5 - 10 sekund', '1.5 - 2.5 godz'],
94
+ ['Wolne chmury / Cienie', '10 - 15 sekund', '2 - 3 godz'],
95
+ ['Gwiazdy / Droga Mleczna (Astro)', '15 - 30 sekund*', '3 - 5 godz'],
96
+ ['Budowa / Rosnące rośliny', '5 - 15 minut', 'Dni / Tygodnie']
97
+ ]},
98
+ { type: 'tip', title: 'Uwaga dla Astro', html: 'Interwał jest zazwyczaj narzucony przez czas ekspozycji (zasada 500) + 1-2 sekundy bufora na zapis na kartę.' },
99
+
100
+ { type: 'title', text: 'Zasada 180° (Motion Blur)', level: 3 },
101
+ { type: 'paragraph', html: 'Częstym błędem w timelapse jest uzyskanie "szarpanego" efektu. Aby uzyskać płynny wygląd, potrzebujesz <strong>rozmycia ruchu</strong>.' },
102
+ { type: 'card', title: 'Zasada', icon: 'mdi:information', html: 'Czas naświetlania powinien wynosić połowę interwału. <br /><br /> <em>Przykład:</em> Jeśli robisz zdjęcie co <strong>4 sekundy</strong>, ekspozycja powinna trwać <strong>2 sekundy</strong>.' },
103
+
104
+ { type: 'title', text: 'Flicker i manualna przysłona', level: 3 },
105
+ { type: 'paragraph', html: '"Flicker" to irytujące migotanie spowodowane mikro-wahaniami otwarcia przysłony między klatkami.' },
106
+ { type: 'list', items: [
107
+ '<strong>Lens Twist:</strong> Lekko odkręć obiektyw w lustrzankach, aby przerwać styk elektroniczny i zablokować przysłonę mechanicznie.',
108
+ '<strong>Wszystko Manualnie:</strong> ISO, Balans bieli i Ostrość muszą być stałe.',
109
+ '<strong>Rób zdjęcia w RAW:</strong> Niezbędne do korekcji ekspozycji i koloru w postprodukcji.'
110
+ ]},
111
+
112
+ { type: 'diagnostic', variant: 'success', title: 'Technika zaawansowana: "Holy Grail"', icon: 'mdi:crown', badge: 'Technika Pro', html: '"Holy Grail" (Święty Graal) to płynne przejście z dnia do nocy (lub odwrotnie). To najtrudniejsze wyzwanie techniczne.' },
113
+
114
+ { type: 'stats', columns: 3, items: [
115
+ { label: 'Bulb Ramping', value: 'Ekspozycja płynna', icon: 'mdi:brightness-6' },
116
+ { label: 'Post-Pro', value: 'LRTimelapse', icon: 'mdi:television-guide' },
117
+ { label: 'Strategia', value: 'Interwał nocny', icon: 'mdi:weather-night' }
118
+ ]},
119
+
120
+ { type: 'title', text: 'Podsumowanie: Zen prostej mechaniki', level: 3 },
121
+ { type: 'paragraph', html: 'Mistrzostwo w timelapse zaczyna się od zrozumienia matematyki Twojego interwałometru.' }
122
+ ];
123
+
124
+ const faqSchema: WithContext<FAQPage> = {
125
+ '@context': 'https://schema.org',
126
+ '@type': 'FAQPage',
127
+ mainEntity: faq.map((item) => ({
128
+ '@type': 'Question',
129
+ name: item.question,
130
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
131
+ })),
132
+ };
133
+
134
+ const howToSchema: WithContext<HowTo> = {
135
+ '@context': 'https://schema.org',
136
+ '@type': 'HowTo',
137
+ name: title,
138
+ description,
139
+ step: howTo.map((step) => ({
140
+ '@type': 'HowToStep',
141
+ name: step.name,
142
+ text: step.text,
143
+ })),
144
+ };
145
+
146
+ const appSchema: WithContext<SoftwareApplication> = {
147
+ '@context': 'https://schema.org',
148
+ '@type': 'SoftwareApplication',
149
+ name: title,
150
+ description,
151
+ applicationCategory: 'UtilitiesApplication',
152
+ operatingSystem: 'Web',
153
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
154
+ inLanguage: 'pl',
155
+ };
156
+
157
+ export const content: TimelapseLocaleContent = {
158
+ slug,
159
+ title,
160
+ description,
161
+ ui,
162
+ seo,
163
+ faq,
164
+ faqTitle: 'Często zadawane pytania o produkcję Timelapse',
165
+ bibliography,
166
+ bibliographyTitle: 'Teoria i zasoby Timelapse',
167
+ howTo,
168
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
169
+ };
@@ -0,0 +1,169 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TimelapseUI, TimelapseLocaleContent } from '../index';
3
+
4
+ const slug = 'calculadora-timelapse-hyperlapse-intervalos-perfeitos';
5
+ const title = 'Calculadora de Timelapse e Hyperlapse: Intervalos Perfeitos';
6
+ const description = 'Calcule o intervalo exato entre fotos, a duração total e o armazenamento para os seus timelapses. Ferramenta essencial para fotógrafos.';
7
+
8
+ const ui: TimelapseUI = {
9
+ title: "Calculadora de Timelapse",
10
+ paramsTitle: "Parâmetros",
11
+ eventDuration: "Qual a duração do evento real?",
12
+ hours: "Horas",
13
+ minutes: "Minutos",
14
+ videoDuration: "Que vídeo final deseja?",
15
+ seconds: "Duração (seg)",
16
+ fps: "FPS",
17
+ resultsTitle: "Resultados",
18
+ intervalLabel: "Configure o seu intervalómetro para:",
19
+ secondsUnit: "segundos",
20
+ totalPhotos: "Total de Fotos",
21
+ speed: "Velocidade",
22
+ shutterSpeed: "Velocidade do Obturador",
23
+ storage: "Tamanho (RAW)",
24
+ rule180Info: "A regra dos 180° sugere uma velocidade de obturação de metade do intervalo para uma desfocagem de movimento suave.",
25
+ };
26
+
27
+ const faq: TimelapseLocaleContent['faq'] = [
28
+ {
29
+ question: "Como escolho o intervalo correto para o meu timelapse?",
30
+ answer: "Depende da velocidade do movimento que está a capturar. Para nuvens rápidas, use 2-3 segundos. Para o movimento do sol ou estrelas, 15-30 segundos. Para crescimento de plantas ou obras, 5-15 minutos.",
31
+ },
32
+ {
33
+ question: "Quantas fotos preciso para um vídeo de um minuto?",
34
+ answer: "Um vídeo padrão tem 24 ou 30 fotogramas por segundo (fps). Para um minuto de vídeo a 24fps, precisa de exatamente 1440 fotografias (60 segundos * 24 fotos/segundo).",
35
+ },
36
+ {
37
+ question: "O que é o 'Flicker' e como posso evitá-lo?",
38
+ answer: "É uma oscilação irritante causada por pequenas variações na exposição entre as fotos. Para evitá-lo, use sempre o modo manual (M), balanço de brancos fixo e prefira lentes com anel de abertura manual.",
39
+ },
40
+ {
41
+ question: "Por que a velocidade do obturador é importante?",
42
+ answer: "Para que o movimento pareça fluido (regra dos 180°), a velocidade do obturador deve ser aproximadamente metade do intervalo. Por exemplo, se o intervalo for de 2 segundos, tente disparar a 1 segundo.",
43
+ },
44
+ ];
45
+
46
+ const howTo: TimelapseLocaleContent['howTo'] = [
47
+ {
48
+ name: "Defina a duração do vídeo final",
49
+ text: "Indique quantos segundos ou minutos deseja que o vídeo resultante dure (ex: 10 segundos para o Instagram).",
50
+ },
51
+ {
52
+ name: "Selecione os FPS de saída",
53
+ text: "Escolha a fluidez do vídeo: 24 (cinema), 30 (web) ou 60 (slow motion fluido).",
54
+ },
55
+ {
56
+ name: "Ajuste o intervalo de captura",
57
+ text: "Configure de quantos em quantos segundos a sua câmara irá disparar de acordo com a velocidade da cena.",
58
+ },
59
+ {
60
+ name: "Verifique o espaço de armazenamento",
61
+ text: "A calculadora dir lhe á quantos Gigabytes a sessão ocupará. Certifique se de que o seu cartão SD tem espaço suficiente.",
62
+ },
63
+ ];
64
+
65
+ const bibliography: TimelapseLocaleContent['bibliography'] = [
66
+ {
67
+ name: "Timescapes Forum - Digital Timelapse Acquisition & Processing",
68
+ url: "https://timescapes.org/phpBB3/viewforum.php?f=4",
69
+ },
70
+ {
71
+ name: "Magic Lantern - Auto ETTR & Bulb Ramping Algorithms",
72
+ url: "https://wiki.magiclantern.fm/ettr",
73
+ },
74
+ {
75
+ name: "LRTimelapse - Visual Deflicker & Holy Grail Workflow",
76
+ url: "https://lrtimelapse.com/tutorial/advanced/",
77
+ },
78
+ {
79
+ name: "PhotoPills - Advanced Timelapse Calculator & NPF Rule",
80
+ url: "https://www.photopills.com/calculators/timelapse",
81
+ },
82
+ ];
83
+
84
+ const seo: TimelapseLocaleContent['seo'] = [
85
+ { type: 'title', text: 'Guia Definitivo de Intervalos para Timelapse e Hyperlapse', level: 2 },
86
+ { type: 'paragraph', html: 'A diferença entre um vídeo rápido amador e um <strong>timelapse cinematográfico</strong> reside matematicamente num único fator: <strong>o intervalo</strong>. Esta calculadora elimina as dúvidas, permitindo-lhe planear com precisão as suas capturas.' },
87
+
88
+ { type: 'title', text: 'Tabela de Intervalos Recomendados (Cheat Sheet)', level: 3 },
89
+ { type: 'paragraph', html: 'Use esta tabela de referência rápida para configurar o seu intervalómetro de acordo com o tema.' },
90
+ { type: 'table', headers: ['Tema / Cena', 'Intervalo Sugerido', 'Duração do Evento (Mínima)'], rows: [
91
+ ['Nuvens Rápidas / Tempestades', '1 - 2 segundos', '20 - 30 min'],
92
+ ['Tráfego Urbano / Pessoas (Blur)', '0.5 - 2 segundos', '15 - 20 min'],
93
+ ['Pôr-do-sol / Nascer-do-sol (Holy Grail)', '5 - 10 segundos', '1.5 - 2.5 horas'],
94
+ ['Nuvens Lentas / Sombras', '10 - 15 segundos', '2 - 3 horas'],
95
+ ['Estrelas / Via Láctea (Astro)', '15 - 30 segundos*', '3 - 5 horas'],
96
+ ['Construção / Crescimento Plantas', '5 - 15 minutos', 'Dias / Semanas']
97
+ ]},
98
+ { type: 'tip', title: 'Nota para Astro', html: 'O intervalo é geralmente ditado pelo tempo de exposição necessário (regra 500) + 1 ou 2 segundos de margem.' },
99
+
100
+ { type: 'title', text: 'A Regra dos 180° (Motion Blur)', level: 3 },
101
+ { type: 'paragraph', html: 'Um erro comum no timelapse é obter um vídeo "tremido". Para obter aquele aspeto cinematográfico fluido, precisa de <strong>motion blur</strong>.' },
102
+ { type: 'card', title: 'A Regra', icon: 'mdi:information', html: 'A sua Velocidade do Obturador deve ser metade do seu intervalo. <br /><br /> <em>Exemplo:</em> Se dispara a cada <strong>4 segundos</strong>, a sua exposição deve ser de <strong>2 segundos</strong>.' },
103
+
104
+ { type: 'title', text: 'Flicker e Abertura Manual', level: 3 },
105
+ { type: 'paragraph', html: 'O "Flicker" é a oscilação irritante causada por micro-variações na abertura do diafragma entre as fotos.' },
106
+ { type: 'list', items: [
107
+ '<strong>Lens Twist:</strong> Desbloqueie ligeiramente a lente em DSLRs para quebrar a ligação eletrónica e fixar a abertura mecanicamente.',
108
+ '<strong>Tudo Manual:</strong> ISO, Balanço de Brancos e Foco devem ser fixos.',
109
+ '<strong>Fotografe em RAW:</strong> Essencial para corrigir exposição e cor na pós-produção.'
110
+ ]},
111
+
112
+ { type: 'diagnostic', variant: 'success', title: 'Técnica Avançada: O "Santo Graal"', icon: 'mdi:crown', badge: 'Técnica Pro', html: 'O "Santo Graal" refere-se à transição suave do dia para a noite (ou vice-versa). É o desafio técnico mais difícil.' },
113
+
114
+ { type: 'stats', columns: 3, items: [
115
+ { label: 'Bulb Ramping', value: 'Exposição Gradual', icon: 'mdi:brightness-6' },
116
+ { label: 'Post-Pro', value: 'LRTimelapse', icon: 'mdi:television-guide' },
117
+ { label: 'Estratégia', value: 'Intervalo Noite', icon: 'mdi:weather-night' }
118
+ ]},
119
+
120
+ { type: 'title', text: 'Conclusão: O Zen da Mecânica Simples', level: 3 },
121
+ { type: 'paragraph', html: 'Dominar o seu timelapse começa por entender a matemática do seu intervalómetro.' }
122
+ ];
123
+
124
+ const faqSchema: WithContext<FAQPage> = {
125
+ '@context': 'https://schema.org',
126
+ '@type': 'FAQPage',
127
+ mainEntity: faq.map((item) => ({
128
+ '@type': 'Question',
129
+ name: item.question,
130
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
131
+ })),
132
+ };
133
+
134
+ const howToSchema: WithContext<HowTo> = {
135
+ '@context': 'https://schema.org',
136
+ '@type': 'HowTo',
137
+ name: title,
138
+ description,
139
+ step: howTo.map((step) => ({
140
+ '@type': 'HowToStep',
141
+ name: step.name,
142
+ text: step.text,
143
+ })),
144
+ };
145
+
146
+ const appSchema: WithContext<SoftwareApplication> = {
147
+ '@context': 'https://schema.org',
148
+ '@type': 'SoftwareApplication',
149
+ name: title,
150
+ description,
151
+ applicationCategory: 'UtilitiesApplication',
152
+ operatingSystem: 'Web',
153
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
154
+ inLanguage: 'pt',
155
+ };
156
+
157
+ export const content: TimelapseLocaleContent = {
158
+ slug,
159
+ title,
160
+ description,
161
+ ui,
162
+ seo,
163
+ faq,
164
+ faqTitle: 'Perguntas Frequentes sobre Produção de Timelapse',
165
+ bibliography,
166
+ bibliographyTitle: 'Teoria e Recursos para Timelapse',
167
+ howTo,
168
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
169
+ };