@jjlmoya/utils-audiovisual 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +198 -0
  3. package/src/category/i18n/fr.ts +1 -1
  4. package/src/category/i18n/id.ts +198 -0
  5. package/src/category/i18n/it.ts +198 -0
  6. package/src/category/i18n/ja.ts +198 -0
  7. package/src/category/i18n/ko.ts +198 -0
  8. package/src/category/i18n/nl.ts +198 -0
  9. package/src/category/i18n/pl.ts +198 -0
  10. package/src/category/i18n/pt.ts +198 -0
  11. package/src/category/i18n/ru.ts +198 -0
  12. package/src/category/i18n/sv.ts +198 -0
  13. package/src/category/i18n/tr.ts +198 -0
  14. package/src/category/i18n/zh.ts +198 -0
  15. package/src/category/index.ts +31 -3
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/schemas_fulfillment.test.ts +23 -0
  18. package/src/tests/title_quality.test.ts +55 -0
  19. package/src/tool/chromaticLens/i18n/de.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/en.ts +1 -1
  21. package/src/tool/chromaticLens/i18n/es.ts +1 -1
  22. package/src/tool/chromaticLens/i18n/fr.ts +1 -1
  23. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  28. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  29. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  30. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  31. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  32. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  33. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  34. package/src/tool/chromaticLens/index.ts +15 -7
  35. package/src/tool/collageMaker/i18n/de.ts +233 -0
  36. package/src/tool/collageMaker/i18n/en.ts +1 -1
  37. package/src/tool/collageMaker/i18n/es.ts +1 -1
  38. package/src/tool/collageMaker/i18n/fr.ts +1 -1
  39. package/src/tool/collageMaker/i18n/id.ts +233 -0
  40. package/src/tool/collageMaker/i18n/it.ts +233 -0
  41. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  42. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  43. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  44. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  45. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  46. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  47. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  48. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  49. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  50. package/src/tool/collageMaker/index.ts +15 -6
  51. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/en.ts +2 -2
  53. package/src/tool/exifCleaner/i18n/es.ts +2 -2
  54. package/src/tool/exifCleaner/i18n/fr.ts +4 -4
  55. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  56. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  57. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  58. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  59. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  60. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  61. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  62. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  63. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  64. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  65. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  66. package/src/tool/exifCleaner/index.ts +16 -8
  67. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/en.ts +2 -2
  69. package/src/tool/imageCompressor/i18n/es.ts +2 -2
  70. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  71. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  72. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  73. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  74. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  75. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  76. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  77. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  78. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  79. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  80. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  81. package/src/tool/imageCompressor/index.ts +15 -7
  82. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/en.ts +2 -2
  84. package/src/tool/printQualityCalculator/i18n/es.ts +3 -3
  85. package/src/tool/printQualityCalculator/i18n/fr.ts +3 -3
  86. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  87. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  88. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  89. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  90. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  91. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  92. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  93. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  94. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  95. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  96. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  97. package/src/tool/printQualityCalculator/index.ts +15 -7
  98. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  99. package/src/tool/privacyBlur/i18n/en.ts +1 -1
  100. package/src/tool/privacyBlur/i18n/es.ts +1 -1
  101. package/src/tool/privacyBlur/i18n/fr.ts +1 -1
  102. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  103. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  104. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  105. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  106. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  107. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  108. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  109. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  110. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  111. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  112. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  113. package/src/tool/privacyBlur/index.ts +15 -7
  114. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  115. package/src/tool/subtitleSync/i18n/en.ts +1 -1
  116. package/src/tool/subtitleSync/i18n/es.ts +1 -1
  117. package/src/tool/subtitleSync/i18n/fr.ts +8 -8
  118. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  119. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  120. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  121. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  122. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  123. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  124. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  125. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  126. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  127. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  128. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  129. package/src/tool/subtitleSync/index.ts +15 -7
  130. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  131. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  132. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  133. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  134. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  135. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  136. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  137. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  138. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  139. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  140. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  141. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  142. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  143. package/src/tool/timelapseCalculator/index.ts +16 -8
  144. package/src/tool/tvDistance/i18n/de.ts +223 -0
  145. package/src/tool/tvDistance/i18n/en.ts +1 -1
  146. package/src/tool/tvDistance/i18n/es.ts +1 -1
  147. package/src/tool/tvDistance/i18n/fr.ts +1 -1
  148. package/src/tool/tvDistance/i18n/id.ts +223 -0
  149. package/src/tool/tvDistance/i18n/it.ts +223 -0
  150. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  151. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  152. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  153. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  154. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  155. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  156. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  157. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  158. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  159. package/src/tool/tvDistance/index.ts +15 -7
  160. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  161. package/src/tool/videoFrameExtractor/i18n/en.ts +1 -1
  162. package/src/tool/videoFrameExtractor/i18n/es.ts +1 -1
  163. package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -1
  164. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  165. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  166. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  167. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  168. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  169. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  170. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  171. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  172. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  173. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  174. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  175. package/src/tool/videoFrameExtractor/index.ts +16 -8
@@ -0,0 +1,241 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { SubtitleSyncUI, SubtitleSyncLocaleContent } from '../index';
3
+
4
+ const slug = 'srt-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
+ };
@@ -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: "네, 모든 처리가 사용자의 기기에서 100% 로컬로 이루어집니다. 파일은 서버로 전송되지 않으며 동기화 작업은 브라우저 내에서 직접 수행됩니다.",
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/ko/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: '당기기 vs 미루기: 실전 가이드', 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
+ '극장판 vs 스트리밍판 등 버전 관리',
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 vs 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: '초당 프레임 수. 24p(영화), 25p(유럽), 29.97p(미국) 등. 이 차이가 누적 오차를 유발함.'
179
+ },
180
+ {
181
+ term: 'NTSC vs PAL',
182
+ definition: '지역별 방송 규격. PAL(25fps)과 NTSC(29.97fps)는 약 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: 'ko',
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
+ };