@jjlmoya/utils-audiovisual 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/category/i18n/de.ts +198 -0
- package/src/category/i18n/id.ts +198 -0
- package/src/category/i18n/it.ts +198 -0
- package/src/category/i18n/ja.ts +198 -0
- package/src/category/i18n/ko.ts +198 -0
- package/src/category/i18n/nl.ts +198 -0
- package/src/category/i18n/pl.ts +198 -0
- package/src/category/i18n/pt.ts +198 -0
- package/src/category/i18n/ru.ts +198 -0
- package/src/category/i18n/sv.ts +198 -0
- package/src/category/i18n/tr.ts +198 -0
- package/src/category/i18n/zh.ts +198 -0
- package/src/category/index.ts +31 -3
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tool/chromaticLens/i18n/de.ts +246 -0
- package/src/tool/chromaticLens/i18n/id.ts +246 -0
- package/src/tool/chromaticLens/i18n/it.ts +246 -0
- package/src/tool/chromaticLens/i18n/ja.ts +246 -0
- package/src/tool/chromaticLens/i18n/ko.ts +246 -0
- package/src/tool/chromaticLens/i18n/nl.ts +246 -0
- package/src/tool/chromaticLens/i18n/pl.ts +246 -0
- package/src/tool/chromaticLens/i18n/pt.ts +246 -0
- package/src/tool/chromaticLens/i18n/ru.ts +246 -0
- package/src/tool/chromaticLens/i18n/sv.ts +246 -0
- package/src/tool/chromaticLens/i18n/tr.ts +246 -0
- package/src/tool/chromaticLens/i18n/zh.ts +246 -0
- package/src/tool/chromaticLens/index.ts +15 -7
- package/src/tool/collageMaker/i18n/de.ts +233 -0
- package/src/tool/collageMaker/i18n/id.ts +233 -0
- package/src/tool/collageMaker/i18n/it.ts +233 -0
- package/src/tool/collageMaker/i18n/ja.ts +233 -0
- package/src/tool/collageMaker/i18n/ko.ts +233 -0
- package/src/tool/collageMaker/i18n/nl.ts +233 -0
- package/src/tool/collageMaker/i18n/pl.ts +233 -0
- package/src/tool/collageMaker/i18n/pt.ts +233 -0
- package/src/tool/collageMaker/i18n/ru.ts +233 -0
- package/src/tool/collageMaker/i18n/sv.ts +233 -0
- package/src/tool/collageMaker/i18n/tr.ts +233 -0
- package/src/tool/collageMaker/i18n/zh.ts +233 -0
- package/src/tool/collageMaker/index.ts +15 -6
- package/src/tool/exifCleaner/i18n/de.ts +277 -0
- package/src/tool/exifCleaner/i18n/fr.ts +1 -1
- package/src/tool/exifCleaner/i18n/id.ts +277 -0
- package/src/tool/exifCleaner/i18n/it.ts +277 -0
- package/src/tool/exifCleaner/i18n/ja.ts +277 -0
- package/src/tool/exifCleaner/i18n/ko.ts +277 -0
- package/src/tool/exifCleaner/i18n/nl.ts +277 -0
- package/src/tool/exifCleaner/i18n/pl.ts +277 -0
- package/src/tool/exifCleaner/i18n/pt.ts +277 -0
- package/src/tool/exifCleaner/i18n/ru.ts +277 -0
- package/src/tool/exifCleaner/i18n/sv.ts +277 -0
- package/src/tool/exifCleaner/i18n/tr.ts +277 -0
- package/src/tool/exifCleaner/i18n/zh.ts +277 -0
- package/src/tool/exifCleaner/index.ts +16 -8
- package/src/tool/imageCompressor/i18n/de.ts +242 -0
- package/src/tool/imageCompressor/i18n/en.ts +1 -1
- package/src/tool/imageCompressor/i18n/es.ts +1 -1
- package/src/tool/imageCompressor/i18n/id.ts +242 -0
- package/src/tool/imageCompressor/i18n/it.ts +242 -0
- package/src/tool/imageCompressor/i18n/ja.ts +242 -0
- package/src/tool/imageCompressor/i18n/ko.ts +242 -0
- package/src/tool/imageCompressor/i18n/nl.ts +242 -0
- package/src/tool/imageCompressor/i18n/pl.ts +242 -0
- package/src/tool/imageCompressor/i18n/pt.ts +242 -0
- package/src/tool/imageCompressor/i18n/ru.ts +242 -0
- package/src/tool/imageCompressor/i18n/sv.ts +242 -0
- package/src/tool/imageCompressor/i18n/tr.ts +242 -0
- package/src/tool/imageCompressor/i18n/zh.ts +244 -0
- package/src/tool/imageCompressor/index.ts +15 -7
- package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/fr.ts +1 -1
- package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
- package/src/tool/printQualityCalculator/index.ts +15 -7
- package/src/tool/privacyBlur/i18n/de.ts +238 -0
- package/src/tool/privacyBlur/i18n/id.ts +238 -0
- package/src/tool/privacyBlur/i18n/it.ts +238 -0
- package/src/tool/privacyBlur/i18n/ja.ts +238 -0
- package/src/tool/privacyBlur/i18n/ko.ts +238 -0
- package/src/tool/privacyBlur/i18n/nl.ts +238 -0
- package/src/tool/privacyBlur/i18n/pl.ts +238 -0
- package/src/tool/privacyBlur/i18n/pt.ts +238 -0
- package/src/tool/privacyBlur/i18n/ru.ts +238 -0
- package/src/tool/privacyBlur/i18n/sv.ts +238 -0
- package/src/tool/privacyBlur/i18n/tr.ts +238 -0
- package/src/tool/privacyBlur/i18n/zh.ts +238 -0
- package/src/tool/privacyBlur/index.ts +15 -7
- package/src/tool/subtitleSync/i18n/de.ts +241 -0
- package/src/tool/subtitleSync/i18n/fr.ts +5 -5
- package/src/tool/subtitleSync/i18n/id.ts +241 -0
- package/src/tool/subtitleSync/i18n/it.ts +241 -0
- package/src/tool/subtitleSync/i18n/ja.ts +241 -0
- package/src/tool/subtitleSync/i18n/ko.ts +241 -0
- package/src/tool/subtitleSync/i18n/nl.ts +241 -0
- package/src/tool/subtitleSync/i18n/pl.ts +241 -0
- package/src/tool/subtitleSync/i18n/pt.ts +241 -0
- package/src/tool/subtitleSync/i18n/ru.ts +241 -0
- package/src/tool/subtitleSync/i18n/sv.ts +241 -0
- package/src/tool/subtitleSync/i18n/tr.ts +241 -0
- package/src/tool/subtitleSync/i18n/zh.ts +241 -0
- package/src/tool/subtitleSync/index.ts +15 -7
- package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
- package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
- package/src/tool/timelapseCalculator/index.ts +16 -8
- package/src/tool/tvDistance/i18n/de.ts +223 -0
- package/src/tool/tvDistance/i18n/id.ts +223 -0
- package/src/tool/tvDistance/i18n/it.ts +223 -0
- package/src/tool/tvDistance/i18n/ja.ts +223 -0
- package/src/tool/tvDistance/i18n/ko.ts +223 -0
- package/src/tool/tvDistance/i18n/nl.ts +223 -0
- package/src/tool/tvDistance/i18n/pl.ts +223 -0
- package/src/tool/tvDistance/i18n/pt.ts +223 -0
- package/src/tool/tvDistance/i18n/ru.ts +223 -0
- package/src/tool/tvDistance/i18n/sv.ts +223 -0
- package/src/tool/tvDistance/i18n/tr.ts +223 -0
- package/src/tool/tvDistance/i18n/zh.ts +223 -0
- package/src/tool/tvDistance/index.ts +15 -7
- package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
- 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-perfect-intervals';
|
|
5
|
+
const title = 'タイムラプス・ハイパーラプス計算機:最適なインターバル設定';
|
|
6
|
+
const description = '写真撮影の間隔、動画の長さ、必要なストレージ容量を正確に計算。タイムラプス撮影に欠かせないフォトグラファー用ツール。';
|
|
7
|
+
|
|
8
|
+
const ui: TimelapseUI = {
|
|
9
|
+
title: "タイムラプス計算機",
|
|
10
|
+
paramsTitle: "パラメーター設定",
|
|
11
|
+
eventDuration: "実際のイベントの時間は?",
|
|
12
|
+
hours: "時間",
|
|
13
|
+
minutes: "分",
|
|
14
|
+
videoDuration: "完成させる動画の長さは?",
|
|
15
|
+
seconds: "動画の秒数",
|
|
16
|
+
fps: "FPS(フレームレート)",
|
|
17
|
+
resultsTitle: "計算結果",
|
|
18
|
+
intervalLabel: "インターバロメーターの設定値:",
|
|
19
|
+
secondsUnit: "秒",
|
|
20
|
+
totalPhotos: "合計写真枚数",
|
|
21
|
+
speed: "再生速度",
|
|
22
|
+
shutterSpeed: "シャッタースピード",
|
|
23
|
+
storage: "容量目安(RAW)",
|
|
24
|
+
rule180Info: "180度ルールでは、滑らかなモーションブラーを得るために、撮影間隔の半分のシャッタースピードが推奨されます。",
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const faq: TimelapseLocaleContent['faq'] = [
|
|
28
|
+
{
|
|
29
|
+
question: "タイムラプス撮影で正しいインターバル(撮影間隔)を選ぶには?",
|
|
30
|
+
answer: "被写体の動きの速さによります。流れる雲なら2〜3秒、太陽や星の動きなら15〜30秒、植物の成長や建物の建設現場なら5〜15分程度が目安です。",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: "1分間の動画を作るには何枚の写真が必要ですか?",
|
|
34
|
+
answer: "標準的な動画は1秒間に24枚または30枚のフレーム(fps)で構成されます。24fpsで1分間の動画を作るには、正確に1440枚(60秒 × 24枚/秒)の写真が必要です。",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
question: "「フリッカー」とは何ですか?どうすれば防げますか?",
|
|
38
|
+
answer: "写真ごとのわずかな露出の違いによって生じる、不快な画面のチラつきのことです。防ぐには、常にマニュアルモード(M)、ホワイトバランスを固定し、マニュアル絞りリングのあるレンズを使用することを推奨します。",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
question: "シャッタースピードが重要なのはなぜですか?",
|
|
42
|
+
answer: "動きを滑らかに見せるため(180度ルール)には、シャッタースピードを撮影間隔の約半分にするのが理想的です。例えば、間隔が2秒なら、シャッタースピードを1秒にして自然なモーションブラーを作ります。",
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
const howTo: TimelapseLocaleContent['howTo'] = [
|
|
47
|
+
{
|
|
48
|
+
name: "動画の長さを決める",
|
|
49
|
+
text: "最終的に何秒、あるいは何分の動画にしたいかを指定します(例:Instagram用なら10秒など)。",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "出力FPSを選択",
|
|
53
|
+
text: "動画の滑らかさを選びます:24(映画風)、30(標準的)、60(非常に滑らかなスローモーション)。",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "撮影間隔を調整",
|
|
57
|
+
text: "被写体の動きの速さに合わせて、カメラを何秒おきに作動させるか設定します。",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "ストレージ容量を確認",
|
|
61
|
+
text: "撮影に必要な概算容量が表示されます。開始前にSDカードに十分な空きがあるか確認してください。",
|
|
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: 'タイムラプス・ハイパーラプス撮影の完全ガイド', level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: '素人の早送り動画と<strong>映画のようなタイムラプス</strong>の数学的な違いは、たった一つの要素、つまり<strong>「撮影間隔(インターバル)」</strong>にあります。この計算機を使えば、日の出や都市の交通、天の川などを完璧な滑らかさで捉えるための計画面をサポートします。' },
|
|
87
|
+
|
|
88
|
+
{ type: 'title', text: '推奨撮影間隔テーブル(チートシート)', level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: '被写体に合わせてインターバロメーターを設定するためのクイックリファレンスです。動きが認識でき、かつ滑らかに繋がる設定を目指しましょう。' },
|
|
90
|
+
{ type: 'table', headers: ['被写体 / シーン', '推奨間隔', 'イベントの最低撮影時間'], rows: [
|
|
91
|
+
['速い雲 / 嵐', '1 〜 2 秒', '20 〜 30 分'],
|
|
92
|
+
['街の交通 / 人混み(ブレ演出)', '0.5 〜 2 秒', '15 〜 20 分'],
|
|
93
|
+
['夕日 / 朝日(ホーリーグレイル)', '5 〜 10 秒', '1.5 〜 2.5 時間'],
|
|
94
|
+
['遅い雲 / 影の動き', '10 〜 15 秒', '2 〜 3 時間'],
|
|
95
|
+
['星空 / 天の川(アストロ)', '15 〜 30 秒*', '3 〜 5 時間'],
|
|
96
|
+
['建設現場 / 植物の成長', '5 〜 15 分', '数日 〜 数週間']
|
|
97
|
+
]},
|
|
98
|
+
{ type: 'tip', title: '星空撮影の注意点', html: '間隔は通常、光を捉えるための露出時間(500ルール等)に、カードへの書き込みバッファとして1〜2秒を加えた時間になります。' },
|
|
99
|
+
|
|
100
|
+
{ type: 'title', text: '180度ルール(モーションブラー)', level: 3 },
|
|
101
|
+
{ type: 'paragraph', html: 'タイムラプスでよくある失敗は、動画が「カクカク」してしまうことです。滑らかなシネマティックな外観を得るには、<strong>モーションブラー</strong>が必要です。' },
|
|
102
|
+
{ type: 'card', title: '黄金ルール', icon: 'mdi:information', html: 'シャッタースピードを撮影間隔の半分にします。 <br /><br /> <em>例:</em> <strong>4秒</strong>おきに撮影する場合、露出を <strong>2秒</strong> に設定します。これにより写真間の「時間の隙間」が埋まり、車の光跡や水の流れが柔らかくなります。' },
|
|
103
|
+
|
|
104
|
+
{ type: 'title', text: 'フリッカーとマニュアル絞り', level: 3 },
|
|
105
|
+
{ type: 'paragraph', html: '「フリッカー」とは、撮影ごとに絞り羽根がわずかにずれることで発生するチラつきのことです。' },
|
|
106
|
+
{ type: 'list', items: [
|
|
107
|
+
'<strong>レンズツイスト:</strong> DSLR等の場合、レンズをわずかに回して電子接点を切り、絞りを機械的に固定するテクニックがあります。',
|
|
108
|
+
'<strong>すべてマニュアル設定:</strong> ISO、ホワイトバランス、フォーカスは固定してください。オートモードは厳禁です。',
|
|
109
|
+
'<strong>RAWで撮影:</strong> 画像を壊さずに後工程で露出や色を補正するために必須です。'
|
|
110
|
+
]},
|
|
111
|
+
|
|
112
|
+
{ type: 'diagnostic', variant: 'success', title: '高度なテクニック:ホーリーグレイル', icon: 'mdi:crown', badge: 'プロの技', html: '「ホーリーグレイル(聖杯)」とは、昼から夜(またはその逆)への滑らかな移り変わりのことです。光量が劇的に変化するため、最も難しい技術的挑戦の一つです。' },
|
|
113
|
+
|
|
114
|
+
{ type: 'stats', columns: 3, items: [
|
|
115
|
+
{ label: 'Bulb Ramping', value: '段階的露出調整', icon: 'mdi:brightness-6' },
|
|
116
|
+
{ label: 'Post-Pro', value: 'LRTimelapseを使用', icon: 'mdi:television-guide' },
|
|
117
|
+
{ label: 'Strategy', value: '夜間インターバル', icon: 'mdi:weather-night' }
|
|
118
|
+
]},
|
|
119
|
+
|
|
120
|
+
{ type: 'title', text: '結論:シンプルな仕組みに宿る「禅」', level: 3 },
|
|
121
|
+
{ type: 'paragraph', html: 'タイムラプスを極めるには、インターバロメーターの背後にある数学を理解することから始まります。不適切な設定で撮影チャンスを逃さないようにしましょう。' }
|
|
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: 'ja',
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export const content: TimelapseLocaleContent = {
|
|
158
|
+
slug,
|
|
159
|
+
title,
|
|
160
|
+
description,
|
|
161
|
+
ui,
|
|
162
|
+
seo,
|
|
163
|
+
faq,
|
|
164
|
+
faqTitle: 'タイムラプス製作に関するよくある質問',
|
|
165
|
+
bibliography,
|
|
166
|
+
bibliographyTitle: 'タイムラプスの理論とリソース',
|
|
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 = 'timelapse-hyperlapse-calculator-perfect-intervals';
|
|
5
|
+
const title = '타임랩스 및 하이퍼랩스 계산기: 완벽한 촬영 간격 설정';
|
|
6
|
+
const description = '사진 촬영 간격, 총 소요 시간, 데이터 저장 용량을 정확하게 계산하세요. 사진작가를 위한 타임랩스 필수 도구입니다.';
|
|
7
|
+
|
|
8
|
+
const ui: TimelapseUI = {
|
|
9
|
+
title: "타임랩스 계산기",
|
|
10
|
+
paramsTitle: "설정 파라미터",
|
|
11
|
+
eventDuration: "실제 이벤트의 총 지속 시간은?",
|
|
12
|
+
hours: "시간",
|
|
13
|
+
minutes: "분",
|
|
14
|
+
videoDuration: "최종 결과물 영상의 길이는?",
|
|
15
|
+
seconds: "영상 시간 (초)",
|
|
16
|
+
fps: "FPS",
|
|
17
|
+
resultsTitle: "계산 결과",
|
|
18
|
+
intervalLabel: "인터벌로미터(촬영 간격) 설정값:",
|
|
19
|
+
secondsUnit: "초",
|
|
20
|
+
totalPhotos: "총 사진 매수",
|
|
21
|
+
speed: "배속(속도)",
|
|
22
|
+
shutterSpeed: "셔터 스피드",
|
|
23
|
+
storage: "예상 용량 (RAW)",
|
|
24
|
+
rule180Info: "180도 규칙에 따르면 부드러운 모션 블러를 위해 셔터 스피드를 촬영 간격의 절반으로 설정하는 것이 좋습니다.",
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const faq: TimelapseLocaleContent['faq'] = [
|
|
28
|
+
{
|
|
29
|
+
question: "타임랩스 촬영을 위한 올바른 간격은 어떻게 선택하나요?",
|
|
30
|
+
answer: "담으려는 피사체의 움직임 속도에 달려 있습니다. 빠르게 움직이는 구름은 2~3초, 태양이나 별의 움직임은 15~30초, 식물의 성장이나 건축 현장은 5~15분 정도가 적당합니다.",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: "1분짜리 영상을 만들려면 사진이 몇 장 필요한가요?",
|
|
34
|
+
answer: "표준 영상은 초당 24 또는 30프레임(fps)을 사용합니다. 24fps로 1분 영상을 만들려면 정확히 1440장의 사진(60초 * 24장/초)이 필요합니다.",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
question: "플리커(Flicker) 현상이란 무엇이며 어떻게 방지하나요?",
|
|
38
|
+
answer: "사진 간의 미세한 노출 차이로 인해 화면이 깜빡이는 현상입니다. 이를 방지하려면 항상 수동 모드(M), 고정 화이트 밸런스를 사용하고, 수동 조리개 조절이 가능한 렌즈를 사용하는 것이 좋습니다.",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
question: "셔터 스피드가 왜 중요한가요?",
|
|
42
|
+
answer: "움직임이 매끄럽게 보이려면(180도 규칙) 셔터 스피드가 촬영 간격의 약 절반 정도여야 합니다. 예를 들어 간격이 2초라면, 자연스러운 모션 블러를 위해 1초 정도로 촬영해 보세요.",
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
const howTo: TimelapseLocaleContent['howTo'] = [
|
|
47
|
+
{
|
|
48
|
+
name: "최종 영상 길이 정의",
|
|
49
|
+
text: "결과물 영상이 몇 초 또는 몇 분 동안 지속되기를 원하는지 입력하세요(예: 인스타그램용 10초).",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "출력 FPS 선택",
|
|
53
|
+
text: "영상의 부드러움을 선택하세요: 24 (영화), 30 (웹), 또는 60 (매끄러운 슬로우 모션).",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "촬영 간격 조정",
|
|
57
|
+
text: "장면의 속도에 맞춰 카메라가 몇 초마다 촬영할지 설정하세요.",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "저장 공간 확인",
|
|
61
|
+
text: "계산기가 전체 세션에 필요한 예상 용량(GB)을 알려줍니다. 시작 전 SD 카드의 여유 공간을 확인하세요.",
|
|
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: '타임랩스 및 하이퍼랩스 촬영 간격 완벽 가이드', level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: '단순한 고속 영상과 <strong>시네마틱 타임랩스</strong>의 수학적 차이는 단 하나의 요소, 바로 <strong>촬영 간격(인터벌)</strong>에 있습니다. 이 계산기는 추측에 의존하지 않고 일출, 도심 교통, 은하수 등을 완벽한 부드러움으로 담을 수 있도록 정밀한 계획을 도와줍니다.' },
|
|
87
|
+
|
|
88
|
+
{ type: 'title', text: '추천 촬영 간격 표 (치트 시트)', level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: '피사체에 따라 인터벌로미터를 설정할 때 아래의 퀵 레퍼런스 표를 활용하세요. 목표는 움직임이 인지되면서도 매끄럽게 이어지도록 담는 것입니다.' },
|
|
90
|
+
{ type: 'table', headers: ['피사체 / 장면', '추천 간격', '이벤트 지속 시간 (최소)'], rows: [
|
|
91
|
+
['빠른 구름 / 폭풍', '1 - 2 초', '20 - 30 분'],
|
|
92
|
+
['도심 교통 / 사람 (블러 효과)', '0.5 - 2 초', '15 - 20 분'],
|
|
93
|
+
['일몰 / 일출 (홀리 그레일)', '5 - 10 초', '1.5 - 2.5 시간'],
|
|
94
|
+
['느린 구름 / 그림자', '10 - 15 초', '2 - 3 시간'],
|
|
95
|
+
['별 / 은하수 (천체)', '15 - 30 초*', '3 - 5 시간'],
|
|
96
|
+
['건설 현장 / 식물 성장', '5 - 15 분', '수일 / 수주']
|
|
97
|
+
]},
|
|
98
|
+
{ type: 'tip', title: '천체 촬영 참고', html: '촬영 간격은 보통 빛을 담는 데 필요한 노출 시간(500 규칙 등)에 메모리 카드 쓰기 버퍼 시간 1~2초를 더한 값으로 결정됩니다.' },
|
|
99
|
+
|
|
100
|
+
{ type: 'title', text: '180도 규칙 (모션 블러)', level: 3 },
|
|
101
|
+
{ type: 'paragraph', html: '타임랩스에서 흔히 하는 실수는 영상이 뚝뚝 끊겨 보이는 것입니다. 매끄러운 시네마틱 룩을 얻으려면 <strong>모션 블러</strong>가 필요합니다.' },
|
|
102
|
+
{ type: 'card', title: '황금 규칙', icon: 'mdi:information', html: '셔터 스피드는 촬영 간격의 딱 절반이어야 합니다. <br /><br /> <em>예시:</em> <strong>4초</strong>마다 촬영한다면 노출은 <strong>2초</strong>여야 합니다. 이를 통해 사진 사이의 시간적 공백을 채워 자동차의 궤적이나 흐르는 물을 부드럽게 표현할 수 있습니다.' },
|
|
103
|
+
|
|
104
|
+
{ type: 'title', text: '플리커 현상과 수동 조리개', level: 3 },
|
|
105
|
+
{ type: 'paragraph', html: '"플리커"는 촬영 시마다 조리개 값이 미세하게 변하면서 발생하는 불편한 깜빡임입니다.' },
|
|
106
|
+
{ type: 'list', items: [
|
|
107
|
+
'<strong>렌즈 트위스트:</strong> DSLR 등에서 렌즈를 살짝 돌려 전자식 접점을 끊고 조리개를 기계적으로 고정하는 테크닉입니다.',
|
|
108
|
+
'<strong>완전 수동 설정:</strong> ISO, 화이트 밸런스, 초점은 반드시 고정해야 합니다. 자동 모드는 절대 사용하지 마세요.',
|
|
109
|
+
'<strong>RAW 촬영 권장:</strong> 이미지 파손 없이 후보정 단계에서 노출과 색상을 정밀하게 수정하기 위해 필수입니다.'
|
|
110
|
+
]},
|
|
111
|
+
|
|
112
|
+
{ type: 'diagnostic', variant: 'success', title: '고급 테크닉: "홀리 그레일"', icon: 'mdi:crown', badge: '프로 테크닉', html: '"홀리 그레일(Holy Grail)"은 낮에서 밤(또는 그 반대)으로 부드럽게 전환되는 촬영을 의미합니다. 광량이 드라마틱하게 변하므로 가장 어려운 기술적 도전 중 하나입니다.' },
|
|
113
|
+
|
|
114
|
+
{ type: 'stats', columns: 3, items: [
|
|
115
|
+
{ label: 'Bulb Ramping', value: '점진적 노출 조정', icon: 'mdi:brightness-6' },
|
|
116
|
+
{ label: 'Post-Pro', value: 'LRTimelapse 활용', icon: 'mdi:television-guide' },
|
|
117
|
+
{ label: 'Strategy', value: '야간 인터벌 전략', icon: 'mdi:weather-night' }
|
|
118
|
+
]},
|
|
119
|
+
|
|
120
|
+
{ type: 'title', text: '결론: 단순한 기계학의 미학', level: 3 },
|
|
121
|
+
{ type: 'paragraph', html: '타임랩스를 마스터하는 것은 인터벌로미터 뒤에 숨겨진 수학적 원리를 이해하는 것에서 시작됩니다.' }
|
|
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: 'ko',
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export const content: TimelapseLocaleContent = {
|
|
158
|
+
slug,
|
|
159
|
+
title,
|
|
160
|
+
description,
|
|
161
|
+
ui,
|
|
162
|
+
seo,
|
|
163
|
+
faq,
|
|
164
|
+
faqTitle: '타임랩스 제작에 관한 자주 묻는 질문',
|
|
165
|
+
bibliography,
|
|
166
|
+
bibliographyTitle: '타임랩스 이론 및 관련 리소스',
|
|
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 = '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
|
+
};
|