@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,241 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { SubtitleSyncUI, SubtitleSyncLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'synchronize-srt-subtitles-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
|
+
};
|
|
@@ -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-ondertitels-online-synchroniseren-timing-aanpassen-gratis';
|
|
5
|
+
const title = 'SRT Ondertitels Online Synchroniseren: Timing Gratis Aanpassen';
|
|
6
|
+
const description = 'Online tool voor het vervroegen of vertragen van SRT ondertitels. Corrigeer eenvoudig de tijdsafwijking en download het gesynchroniseerde bestand direct.';
|
|
7
|
+
|
|
8
|
+
const ui: SubtitleSyncUI = {
|
|
9
|
+
dropTitle: "Sleep je .SRT bestand hierheen",
|
|
10
|
+
dropSubtitle: "of klik om te bladeren",
|
|
11
|
+
adjustTitle: "Tijd Aanpassen",
|
|
12
|
+
offsetLabel: "Verschuiving (seconden)",
|
|
13
|
+
offsetHelp: "Gebruik negatieve waarden om te vervroegen (bijv. -1.5) and positieve waarden om te vertragen.",
|
|
14
|
+
linesStat: "Regels",
|
|
15
|
+
firstStat: "Eerste Ondertitel",
|
|
16
|
+
lastStat: "Laatste Ondertitel",
|
|
17
|
+
originalLabel: "ORIGINEEL",
|
|
18
|
+
resultLabel: "RESULTAAT",
|
|
19
|
+
downloadButton: "Gecorrigeerde Versie Downloaden",
|
|
20
|
+
previewBadge: "PREVIEW",
|
|
21
|
+
unitSeconds: "sec"
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const faq: SubtitleSyncLocaleContent['faq'] = [
|
|
25
|
+
{
|
|
26
|
+
question: "Hoe kan ik mijn ondertitels synchroniseren als de audio voorloopt?",
|
|
27
|
+
answer: "Als de audio voor de tekst verschijnt, moet je de ondertitels vertragen. Voer een positieve waarde in in de calculator (bijv. 2.0 om ze 2 seconden te vertragen).",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
question: "Welke bestandsformaten accepteert deze tool?",
|
|
31
|
+
answer: "Momenteel is de tool geoptimaliseerd voor .SRT (SubRip) bestanden, de meest voorkomende standaard in videospelers en streamingplatforms.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: "Is het veilig om mijn ondertitelbestanden te uploaden?",
|
|
35
|
+
answer: "Ja, omdat de verwerking 100% lokaal op je apparaat gebeurt. Je bestanden worden niet naar een server verzonden; de synchronisatie vindt direct in je browser plaats.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: "Kan ik slechts een deel van het bestand synchroniseren?",
|
|
39
|
+
answer: "Nee, deze tool past een constante verschuiving toe op het hele bestand. Als de afwijking progressief is, heb je mogelijk geavanceerdere bewerking nodig.",
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const howTo: SubtitleSyncLocaleContent['howTo'] = [
|
|
44
|
+
{
|
|
45
|
+
name: "Upload je SRT bestand",
|
|
46
|
+
text: "Sleep het ondertitelbestand dat je wilt corrigeren naar het uploadgebied.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "Identificeer de afwijking",
|
|
50
|
+
text: "Meet in je speler hoeveel de ondertitels achterlopen of voorlopen ten opzichte van de audio.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "Pas de verschuiving aan",
|
|
54
|
+
text: "Voer positieve (vertraging) of negatieve (vervroeging) seconden in het bedieningspaneel in.",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "Download het bestand",
|
|
58
|
+
text: "Controleer in de preview of de tijden correct zijn en klik op downloaden om je nieuwe SRT te krijgen.",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
|
|
63
|
+
{
|
|
64
|
+
name: "SubRip (SRT) formaatspecificatie",
|
|
65
|
+
url: "https://matroska.org/technical/subtitles.html#srt-subtitles",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "MDN Web Docs - FileReader API",
|
|
69
|
+
url: "https://developer.mozilla.org/en-US/docs/Web/API/FileReader",
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const seo: SubtitleSyncLocaleContent['seo'] = [
|
|
74
|
+
{
|
|
75
|
+
type: 'summary',
|
|
76
|
+
title: 'Professionele Ondertitelsynchronisatie',
|
|
77
|
+
items: [
|
|
78
|
+
'Directe correctie van audio-ondertitel afwijkingen',
|
|
79
|
+
'Ondersteunt standaard SRT (SubRip) bestanden',
|
|
80
|
+
'100% lokale verwerking - maximale privacy',
|
|
81
|
+
'Geen installatie, geen abonnement, volledig gratis'
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{ type: 'title', text: 'Perfecte SRT Ondertitelsynchronisatie', level: 2 },
|
|
85
|
+
{ type: 'paragraph', html: 'Er is niets frustrerender voor een kijker dan dialogen te zien die niet overeenkomen met de stemmen. Ondertitelafwijkingen ontstaan meestal door verschillen tussen videoversies: variaties in framerate, reclamefragmenten, productie-intro\'s of wijzigingen in compressie. Met deze tool los je het probleem in seconden op.' },
|
|
86
|
+
|
|
87
|
+
{ type: 'stats', items: [
|
|
88
|
+
{ value: '100%', label: 'Lokale Verwerking', icon: 'mdi:shield' },
|
|
89
|
+
{ value: 'Milliseconden', label: 'Precisie', icon: 'mdi:clock-outline' },
|
|
90
|
+
{ value: 'Elke Grootte', label: 'GEEN Bestandslimiet', icon: 'mdi:file-document' }
|
|
91
|
+
], columns: 3 },
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'Vervroegen vs Vertragen: Praktische Gids', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'De eerste stap is het correct identificeren van het type afwijking. Dit is de logica:' },
|
|
95
|
+
{ type: 'list', items: [
|
|
96
|
+
'<strong>Vertragen (Positieve Waarde):</strong> Wanneer je de tekst ziet verschijnen VOORDAT je het geluid hoort. De ondertitels zijn te vroeg. Voorbeeld: +2.0 seconden.',
|
|
97
|
+
'<strong>Vervroegen (Negatieve Waarde):</strong> Wanneer je de tekst ziet verschijnen NADAT je het geluid hoorde. De ondertitels zijn te laat. Voorbeeld: -2.0 seconden.',
|
|
98
|
+
'<strong>Testen en Aanpassen:</strong> Begin met kleine stapjes (0.5s) and gebruik de preview om te valideren.'
|
|
99
|
+
], icon: 'mdi:arrow-right' },
|
|
100
|
+
|
|
101
|
+
{ type: 'card', title: 'Privacy op Professioneel Niveau', html: 'Door het bestand te verwerken via client-side JavaScript, garanderen we dat de inhoud van je ondertitels nooit je computer verlaat. Essentieel voor vertalers en professionals die met vertrouwelijk materiaal werken of onder een NDA vallen.' },
|
|
102
|
+
|
|
103
|
+
{ type: 'title', text: 'Veelvoorkomende Use Cases', level: 3 },
|
|
104
|
+
{ type: 'comparative', items: [
|
|
105
|
+
{
|
|
106
|
+
title: 'Vertalers en Ondertitelaars',
|
|
107
|
+
description: 'Synchroniseer vertalingen na het werken met meerdere videoversies',
|
|
108
|
+
icon: 'mdi:translate',
|
|
109
|
+
points: [
|
|
110
|
+
'SRT bestanden uit verschillende bronnen',
|
|
111
|
+
'Content versioning (bioscoop vs streaming)',
|
|
112
|
+
'Snelle levering zonder van tool te wisselen'
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: 'Content Creators',
|
|
117
|
+
description: 'Herstel ondertitels wanneer de video is verwerkt met een andere framerate',
|
|
118
|
+
icon: 'mdi:video',
|
|
119
|
+
points: [
|
|
120
|
+
'Hergebruik bestaande ondertitels',
|
|
121
|
+
'Formaatwijzigingen (720p naar 1080p)',
|
|
122
|
+
'Voorkom handmatig retimen van meer dan 1000 regels'
|
|
123
|
+
],
|
|
124
|
+
highlight: true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'Incidentele Gebruikers',
|
|
128
|
+
description: 'Corrigeer gedownloade ondertitels die niet perfect passen',
|
|
129
|
+
icon: 'mdi:account',
|
|
130
|
+
points: [
|
|
131
|
+
'Generieke niet-synchrone ondertitels',
|
|
132
|
+
'Films uit verschillende regio\'s (PAL vs NTSC)',
|
|
133
|
+
'Streaming met bewerkte versies'
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
], columns: 3 },
|
|
137
|
+
|
|
138
|
+
{ type: 'title', text: 'Waarom Ondertitels uit Synchronisatie Lopen', level: 3 },
|
|
139
|
+
{ type: 'table', headers: ['Veelvoorkomende Oorzaak', 'Technische Beschrijving', 'Oplossing'], rows: [
|
|
140
|
+
['Verschil in Framerate', '23.976 fps vs 25 fps - geaccumuleerd verschil', 'Correctie via één verschuiving (deze tool)'],
|
|
141
|
+
['Editoriale Wijzigingen', 'Reclameblokken of verwijderde/toegevoegde content', 'Handmatige berekening + synchronisatie'],
|
|
142
|
+
['Regionale Versie', 'PAL (25 fps Europa) vs NTSC (29.97 fps USA)', 'Eenvoudige wiskundige verschuiving'],
|
|
143
|
+
['Verandering van Resolutie', 'Re-encoding met verschillende verwerkingssnelheid', 'Herberekening van origineel bestand']
|
|
144
|
+
] },
|
|
145
|
+
|
|
146
|
+
{ type: 'diagnostic', variant: 'info', title: 'Technische Beperkingen om Rekening mee te Houden', icon: 'mdi:information', badge: 'Belangrijk', html: 'Deze tool past een <strong>constante</strong> verschuiving toe op het hele bestand. Als de afwijking <strong>progressief</strong> is (begint goed maar loopt geleidelijk uit de pas), wijst dit op een aanhoudend verschil in framerate. In dat geval moet het originele bestand opnieuw worden verwerkt in professionele montagesoftware.' },
|
|
147
|
+
|
|
148
|
+
{ type: 'proscons', items: [
|
|
149
|
+
{
|
|
150
|
+
pro: 'Extreme snelheid - verwerkt grote bestanden in milliseconden',
|
|
151
|
+
con: 'Past alleen een vaste verschuiving aan, geen progressieve'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
pro: 'Totale privacy - inhoud verlaat nooit je browser',
|
|
155
|
+
con: 'Vereist een moderne browser met JavaScript ingeschakeld'
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
pro: 'Universeel formaat - werkt met elke standaard SRT',
|
|
159
|
+
con: 'Ondersteunt geen andere formaten (ASS, VTT, SCC, etc.)'
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
pro: 'Volledig gratis, geen advertenties, geen tracking',
|
|
163
|
+
con: 'Geen wijzigingshistorie of versioning'
|
|
164
|
+
}
|
|
165
|
+
], proTitle: 'Voordelen', conTitle: 'Beperkingen' },
|
|
166
|
+
|
|
167
|
+
{ type: 'glossary', items: [
|
|
168
|
+
{
|
|
169
|
+
term: 'SRT (SubRip)',
|
|
170
|
+
definition: 'Meest universele ondertitelformaat: tekstbestand met volgnummers, tijden (hh:mm:ss,mmm) en tekst. De facto standaard in spelers en platforms.'
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
term: 'Verschuiving (Offset)',
|
|
174
|
+
definition: 'Vaste hoeveelheid tijd die wordt opgeteld bij of afgetrokken van alle tijden in het bestand. Kan positief zijn (vertraging) of negatief (vervroeging).'
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
term: 'Framerate (fps)',
|
|
178
|
+
definition: 'Frames per seconde. 24p (cinema), 25p (PAL/Europa), 29.97p (NTSC/USA), 60p (vloeiende video). Verschillen veroorzaken cumulatieve afwijkingen.'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
term: 'NTSC vs PAL',
|
|
182
|
+
definition: 'Regionale televisiestandaarden: PAL (25 fps) in Europa; NTSC (29.97 fps) in de VS. ~4% snelheidsverschil.'
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
term: 'Progressieve Afwijking',
|
|
186
|
+
definition: 'Wanneer de synchronisatie correct begint maar geleidelijk uit de pas loopt. Wijst op een framerateverschil, vereist herverwerking.'
|
|
187
|
+
}
|
|
188
|
+
] },
|
|
189
|
+
|
|
190
|
+
{ type: 'message', title: 'Professionele Bewerking met Volledige Controle', ariaLabel: 'Technische informatie over synchronisatie', html: 'Onze aanpak is eenvoudig maar krachtig: één enkele verschuiving, direct toegepast, 100% verwerkt in je browser. Geen cloud, geen opslag, geen tracking. Simpelweg uploaden, aanpassen, downloaden. Volledige controle over je content.' },
|
|
191
|
+
|
|
192
|
+
{ type: 'title', text: 'Conclusie: Films Zonder Onderbrekingen', level: 3 },
|
|
193
|
+
{ type: 'paragraph', html: 'Perfecte ondertitelsynchronisatie is essentieel voor een hoogwaardige audiovisuele ervaring. Met deze tool transformeer je een frustrerende ervaring in een perfecte filmavond, zonder de noodzaak van dure of ingewikkelde software.' }
|
|
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: 'nl',
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
export const content: SubtitleSyncLocaleContent = {
|
|
230
|
+
slug,
|
|
231
|
+
title,
|
|
232
|
+
description,
|
|
233
|
+
ui,
|
|
234
|
+
seo,
|
|
235
|
+
faq,
|
|
236
|
+
faqTitle: 'Veelgestelde Vragen over Ondertitelsynchronisatie',
|
|
237
|
+
bibliography,
|
|
238
|
+
bibliographyTitle: 'Technische Bronnen over Ondertitelformaten',
|
|
239
|
+
howTo,
|
|
240
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
241
|
+
};
|