@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.
- package/package.json +59 -58
- package/src/category/i18n/de.ts +198 -0
- package/src/category/i18n/fr.ts +1 -1
- 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/schemas_fulfillment.test.ts +23 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tool/chromaticLens/i18n/de.ts +246 -0
- package/src/tool/chromaticLens/i18n/en.ts +1 -1
- package/src/tool/chromaticLens/i18n/es.ts +1 -1
- package/src/tool/chromaticLens/i18n/fr.ts +1 -1
- 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/en.ts +1 -1
- package/src/tool/collageMaker/i18n/es.ts +1 -1
- package/src/tool/collageMaker/i18n/fr.ts +1 -1
- 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/en.ts +2 -2
- package/src/tool/exifCleaner/i18n/es.ts +2 -2
- package/src/tool/exifCleaner/i18n/fr.ts +4 -4
- 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 +2 -2
- package/src/tool/imageCompressor/i18n/es.ts +2 -2
- 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/en.ts +2 -2
- package/src/tool/printQualityCalculator/i18n/es.ts +3 -3
- package/src/tool/printQualityCalculator/i18n/fr.ts +3 -3
- 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/en.ts +1 -1
- package/src/tool/privacyBlur/i18n/es.ts +1 -1
- package/src/tool/privacyBlur/i18n/fr.ts +1 -1
- 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/en.ts +1 -1
- package/src/tool/subtitleSync/i18n/es.ts +1 -1
- package/src/tool/subtitleSync/i18n/fr.ts +8 -8
- 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/en.ts +1 -1
- package/src/tool/tvDistance/i18n/es.ts +1 -1
- package/src/tool/tvDistance/i18n/fr.ts +1 -1
- 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/en.ts +1 -1
- package/src/tool/videoFrameExtractor/i18n/es.ts +1 -1
- package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -1
- 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,235 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { VideoFrameExtractorUI, VideoFrameExtractorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'online-video-frame-extractor-korea-hd';
|
|
5
|
+
const title = '비디오 프레임 추출기: HD 스틸 이미지 캡처';
|
|
6
|
+
const description = '비디오에서 개별 이미지를 프레임 단위의 정밀도로 추출하세요. 완벽한 순간을 HD 화질로 로컬에서 무료로 안전하게 캡처합니다.';
|
|
7
|
+
|
|
8
|
+
const ui: VideoFrameExtractorUI = {
|
|
9
|
+
uploadTitle: "비디오 파일 업로드",
|
|
10
|
+
uploadFormats: "MP4, WebM, MOV 또는 MKV (최대 500MB)",
|
|
11
|
+
privacyNote: "비디오는 인터넷에 업로드되지 않으며 브라우저 내에서 로컬로 처리됩니다.",
|
|
12
|
+
playLabel: "재생",
|
|
13
|
+
pauseLabel: "일시정지",
|
|
14
|
+
captureBtn: "프레임 캡처",
|
|
15
|
+
prevFrame: "-1F",
|
|
16
|
+
nextFrame: "+1F",
|
|
17
|
+
batchTitle: "자동 추출",
|
|
18
|
+
batchEvery: "간격:",
|
|
19
|
+
batchStart: "시퀀스 시작",
|
|
20
|
+
batchProcessing: "추출 중...",
|
|
21
|
+
galleryTitle: "캡처된 프레임",
|
|
22
|
+
galleryEmpty: "캡처한 이미지가 여기에 표시됩니다.",
|
|
23
|
+
downloadAll: "모두 다운로드",
|
|
24
|
+
downloadHD: "HD 이미지 다운로드",
|
|
25
|
+
resetBtn: "다른 비디오 업로드"
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const faq: VideoFrameExtractorLocaleContent['faq'] = [
|
|
29
|
+
{
|
|
30
|
+
question: "긴 비디오에서도 프레임을 추출할 수 있나요?",
|
|
31
|
+
answer: "네, 브라우저에 비디오를 로드할 수 있는 충분한 RAM이 있다면 가능합니다. 원활한 성능을 위해 500MB 이하의 파일을 권장합니다.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: "캡처된 이미지는 어떤 해상도로 저장되나요?",
|
|
35
|
+
answer: "원본 비디오의 네이티브 해상도로 캡처됩니다. 비디오가 4K라면 고화질 4K 이미지를 얻을 수 있습니다.",
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: VideoFrameExtractorLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: "비디오 업로드",
|
|
42
|
+
text: "기기에서 비디오 파일을 선택합니다. 서버로 업로드되지 않고 로컬에서 처리됩니다.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "정확한 순간으로 이동",
|
|
46
|
+
text: "타임라인 바나 ±1 프레임 버튼을 사용하여 정밀하게 프레임을 조정하세요.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "프레임 캡처",
|
|
50
|
+
text: "캡처 버튼을 눌러 아래 갤러리에 해당 순간을 저장합니다.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "고화질 다운로드",
|
|
54
|
+
text: "개별 이미지 또는 전체 세션을 최적화된 WebP 형식으로 다운로드합니다.",
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const bibliography: VideoFrameExtractorLocaleContent['bibliography'] = [
|
|
59
|
+
{
|
|
60
|
+
name: "Capturing frames with HTML5 Video API",
|
|
61
|
+
url: "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video",
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: VideoFrameExtractorLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'summary',
|
|
68
|
+
title: '전문 비디오 프레임 추출 도구',
|
|
69
|
+
items: [
|
|
70
|
+
'완벽한 순간을 포착하는 단일 프레임 정밀도(±1 프레임)',
|
|
71
|
+
'MP4, WebM, MOV, MKV 지원(최대 500MB)',
|
|
72
|
+
'원본 비디오 해상도 유지(SD, HD, 4K 지원)',
|
|
73
|
+
'사용자 지정 간격의 자동 일괄 추출 기능'
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{ type: 'title', text: '프레임 추출: 비디오의 한 순간을 멈추다', level: 2 },
|
|
77
|
+
{ type: 'paragraph', html: '때로는 사진 한 장이 천 마디 말보다 큰 의미를 가집니다. 전문 소프트웨어 없이 브라우저의 로컬 성능만으로 정밀한 프레임을 추출하세요.' },
|
|
78
|
+
|
|
79
|
+
{ type: 'stats', items: [
|
|
80
|
+
{ value: '±1', label: '단일 프레임 정밀도', icon: 'mdi:target' },
|
|
81
|
+
{ value: '100%', label: '원본 해상도 유지', icon: 'mdi:video-high-definition' },
|
|
82
|
+
{ value: '500MB', label: '지원 파일 용량', icon: 'mdi:file-video' }
|
|
83
|
+
], columns: 3 },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: '주요 활용 사례', level: 3 },
|
|
86
|
+
{ type: 'comparative', items: [
|
|
87
|
+
{
|
|
88
|
+
title: '영화 및 사진',
|
|
89
|
+
description: '시각적 참조 또는 구도 확인을 위한 프레임 캡처',
|
|
90
|
+
icon: 'mdi:film',
|
|
91
|
+
points: [
|
|
92
|
+
'마케팅용 스틸 이미지 추출',
|
|
93
|
+
'장면 구도 레퍼런스 확보',
|
|
94
|
+
'프레임 단위 정밀 분석'
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
title: '디지털 콘텐츠',
|
|
99
|
+
description: 'SNS용 썸네일 및 커버 이미지 제작',
|
|
100
|
+
icon: 'mdi:youtube',
|
|
101
|
+
points: [
|
|
102
|
+
'고해상도 유튜브 썸네일 제작',
|
|
103
|
+
'SNS 커버 및 홍보 이미지',
|
|
104
|
+
'프레젠테이션용 시각 자료'
|
|
105
|
+
],
|
|
106
|
+
highlight: true
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: '기술 문서 및 교육',
|
|
110
|
+
description: '튜토리얼 비디오에서 단계별 이미지 추출',
|
|
111
|
+
icon: 'mdi:book-open',
|
|
112
|
+
points: [
|
|
113
|
+
'조작법 단계별 캡처 이미지',
|
|
114
|
+
'시각화된 가이드라인 제작',
|
|
115
|
+
'실시간 동작 분석'
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
title: '스포츠 및 액션',
|
|
120
|
+
description: '결정적인 동작의 순간 포착',
|
|
121
|
+
icon: 'mdi:dumbbell',
|
|
122
|
+
points: [
|
|
123
|
+
'스포츠 기술 프레임 분석',
|
|
124
|
+
'최고의 순간 캡처',
|
|
125
|
+
'동작 연구용 자료'
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
], columns: 2 },
|
|
129
|
+
|
|
130
|
+
{ type: 'title', text: '지원하는 비디오 포맷', level: 3 },
|
|
131
|
+
{ type: 'table', headers: ['포맷', '확장자', '호환성', '참고'], rows: [
|
|
132
|
+
['MPEG-4', 'MP4', '보편적 지원 (100%)', '가장 널리 사용되는 압축 방식'],
|
|
133
|
+
['WebM', 'WebM', '최신 브라우저', '우수한 압축률 및 적은 용량'],
|
|
134
|
+
['QuickTime', 'MOV', 'Safari 및 일부 플레이어', 'Apple 표준 방식'],
|
|
135
|
+
['Matroska', 'MKV', '최신 브라우저', '유연한 컨테이너 방식']
|
|
136
|
+
] },
|
|
137
|
+
|
|
138
|
+
{ type: 'card', title: '단일 프레임 정밀 제어', html: '한 프레임씩 앞뒤로 이동(±1 프레임)하는 기능은 완벽한 순간(점프, 미소, 제스처 등)을 포착하는 데 필수적입니다. 저희 도구는 밀리미터 단위의 정밀한 제어를 제공합니다.' },
|
|
139
|
+
|
|
140
|
+
{ type: 'proscons', items: [
|
|
141
|
+
{
|
|
142
|
+
pro: '완벽한 개인정보 보호: 비디오는 브라우저 로컬에서만 처리됨',
|
|
143
|
+
con: '기기의 가용 RAM 용량에 제한을 받음(약 500MB 권장)'
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
pro: '원본 해상도 유지: 재압축 없이 SD, HD, 4K 고화질 유지',
|
|
147
|
+
con: 'HTML5 Video를 지원하는 최신 브라우저 필요'
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
pro: '사용자 지정 간격 자동 일괄 추출 기능',
|
|
151
|
+
con: '편집(컷, 병합) 작업은 별도 편집기 필요'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
pro: '최적화된 WebP 또는 원본 PNG 형식 저장 지원',
|
|
155
|
+
con: '자동 GIF 애니메이션 생성 기능은 비포함'
|
|
156
|
+
}
|
|
157
|
+
], proTitle: '장점', conTitle: '제한 사항' },
|
|
158
|
+
|
|
159
|
+
{ type: 'diagnostic', variant: 'info', title: '해상도 및 프레임 속도', icon: 'mdi:information', badge: '기술 정보', html: '최종 추출물 해상도는 원본 비디오에 따릅니다. 업스케일링 없이 원본 정보 그대로를 보존합니다.' },
|
|
160
|
+
|
|
161
|
+
{ type: 'glossary', items: [
|
|
162
|
+
{
|
|
163
|
+
term: '프레임 (Frame)',
|
|
164
|
+
definition: '비디오 시퀀스를 구성하는 개별 정지 영상. 24fps 비디오는 초당 24개의 프레임을 포함함.'
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
term: 'FPS (초당 프레임 수)',
|
|
168
|
+
definition: '초당 프레임 개수. 영상의 부드러움을 결정함.'
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
term: '비디오 코덱',
|
|
172
|
+
definition: '압축 알고리즘 (H.264, VP9, HEVC 등). 파일 크기와 화질을 결정함.'
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
term: '비트레이트 (Bitrate)',
|
|
176
|
+
definition: '초당 처리되는 데이터 양. 높을수록 고화질을 보장함.'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
term: '비디오 해상도',
|
|
180
|
+
definition: '픽셀 크기 (720p, 1080p, 4K, 8K 등).'
|
|
181
|
+
}
|
|
182
|
+
] },
|
|
183
|
+
|
|
184
|
+
{ type: 'message', title: '전문적인 프레임 추출 경험', ariaLabel: '비디오 추출 기술 정보', html: '복잡한 온라인 변환기나 고가의 소프트웨어가 필요 없습니다. 업로드, 이동, 캡처 - 단 세 번의 클릭으로 완벽한 스틸 이미지를 얻으세요.' },
|
|
185
|
+
|
|
186
|
+
{ type: 'title', text: '비디오의 순간을 영원히 기록하세요', level: 3 },
|
|
187
|
+
{ type: 'paragraph', html: '모든 비디오에는 수백 개의 프레임이 있습니다. 품질 저하 없이 프레임을 추출하여 소중한 순간을 완벽하게 소장해 보세요.' }
|
|
188
|
+
];
|
|
189
|
+
|
|
190
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
191
|
+
'@context': 'https://schema.org',
|
|
192
|
+
'@type': 'FAQPage',
|
|
193
|
+
mainEntity: faq.map((item) => ({
|
|
194
|
+
'@type': 'Question',
|
|
195
|
+
name: item.question,
|
|
196
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
197
|
+
})),
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
const howToSchema: WithContext<HowTo> = {
|
|
201
|
+
'@context': 'https://schema.org',
|
|
202
|
+
'@type': 'HowTo',
|
|
203
|
+
name: title,
|
|
204
|
+
description,
|
|
205
|
+
step: howTo.map((step) => ({
|
|
206
|
+
'@type': 'HowToStep',
|
|
207
|
+
name: step.name,
|
|
208
|
+
text: step.text,
|
|
209
|
+
})),
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
213
|
+
'@context': 'https://schema.org',
|
|
214
|
+
'@type': 'SoftwareApplication',
|
|
215
|
+
name: title,
|
|
216
|
+
description,
|
|
217
|
+
applicationCategory: 'UtilitiesApplication',
|
|
218
|
+
operatingSystem: 'Web',
|
|
219
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
220
|
+
inLanguage: 'ko',
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
export const content: VideoFrameExtractorLocaleContent = {
|
|
224
|
+
slug,
|
|
225
|
+
title,
|
|
226
|
+
description,
|
|
227
|
+
ui,
|
|
228
|
+
seo,
|
|
229
|
+
faq,
|
|
230
|
+
faqTitle: '비디오 프레임 추출에 관한 자주 묻는 질문',
|
|
231
|
+
bibliography,
|
|
232
|
+
bibliographyTitle: '비디오 캡처 기술 표준',
|
|
233
|
+
howTo,
|
|
234
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
235
|
+
};
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { VideoFrameExtractorUI, VideoFrameExtractorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'online-video-frame-extractor-captureer-hd-stills';
|
|
5
|
+
const title = 'Video Frame Extractor: Leg HD stills vast';
|
|
6
|
+
const description = 'Extraheer individuele beelden uit je video\'s met frame-precieze nauwkeurigheid. Leg perfecte momenten lokaal en gratis vast in HD.';
|
|
7
|
+
|
|
8
|
+
const ui: VideoFrameExtractorUI = {
|
|
9
|
+
uploadTitle: "Upload een videobestand",
|
|
10
|
+
uploadFormats: "MP4, WebM, MOV of MKV (Max. 500MB)",
|
|
11
|
+
privacyNote: "De video wordt niet naar internet geüpload, deze wordt verwerkt in je browser.",
|
|
12
|
+
playLabel: "Afspelen",
|
|
13
|
+
pauseLabel: "Pauze",
|
|
14
|
+
captureBtn: "Frame Vastleggen",
|
|
15
|
+
prevFrame: "-1F",
|
|
16
|
+
nextFrame: "+1F",
|
|
17
|
+
batchTitle: "Automatische Extractie",
|
|
18
|
+
batchEvery: "Elke",
|
|
19
|
+
batchStart: "Start Reeks",
|
|
20
|
+
batchProcessing: "Extraheren...",
|
|
21
|
+
galleryTitle: "Vastgelegde Frames",
|
|
22
|
+
galleryEmpty: "Captures verschijnen hier zodra je ze maakt.",
|
|
23
|
+
downloadAll: "Download Alles",
|
|
24
|
+
downloadHD: "Download HD Afbeelding",
|
|
25
|
+
resetBtn: "Upload een andere video"
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const faq: VideoFrameExtractorLocaleContent['faq'] = [
|
|
29
|
+
{
|
|
30
|
+
question: "Kan ik frames extraheren uit lange video's?",
|
|
31
|
+
answer: "Ja, zolang je browser genoeg RAM heeft om de video te laden. We raden bestanden tot 500 MB aan voor optimale prestaties.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: "In welke resolutie worden de captures opgeslagen?",
|
|
35
|
+
answer: "Captures worden gemaakt op de oorspronkelijke resolutie van de video. Als je video 4K is, krijg je een hoogwaardige 4K-afbeelding.",
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: VideoFrameExtractorLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: "Upload je video",
|
|
42
|
+
text: "Selecteer het videobestand van je apparaat. We uploaden het naar geen enkele server.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "Navigeer naar het exacte moment",
|
|
46
|
+
text: "Gebruik de tijdlijn of de ±1 frame knoppen voor chirurgische precisie.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "Leg het frame vast",
|
|
50
|
+
text: "Druk op de capture knop om het moment op te slaan in de onderstaande galerij.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "Download in hoge kwaliteit",
|
|
54
|
+
text: "Download individuele captures of de volledige sessie in geoptimaliseerd WebP formaat.",
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const bibliography: VideoFrameExtractorLocaleContent['bibliography'] = [
|
|
59
|
+
{
|
|
60
|
+
name: "Capturing frames with HTML5 Video API",
|
|
61
|
+
url: "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video",
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: VideoFrameExtractorLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'summary',
|
|
68
|
+
title: 'Professionele Video Frame Extractie',
|
|
69
|
+
items: [
|
|
70
|
+
'Nauwkeurigheid op één frame (±1 frame) voor de perfecte capture',
|
|
71
|
+
'Ondersteunt MP4, WebM, MOV, MKV tot 500MB',
|
|
72
|
+
'Oorspronkelijke videoresolutie behouden (SD, HD, 4K)',
|
|
73
|
+
'Automatische batch-extractie op aangepaste intervallen'
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{ type: 'title', text: 'Frame extractie: Bevries de Tijd in Video', level: 2 },
|
|
77
|
+
{ type: 'paragraph', html: 'Soms zegt een beeld meer dan duizend woorden. Onze tool gebruikt de lokale kracht van je browser om precisieframes te extraheren zonder professionele software.' },
|
|
78
|
+
|
|
79
|
+
{ type: 'stats', items: [
|
|
80
|
+
{ value: '±1', label: 'Frame-Precisie', icon: 'mdi:target' },
|
|
81
|
+
{ value: '100%', label: 'Eigen Resolutie', icon: 'mdi:video-high-definition' },
|
|
82
|
+
{ value: '500MB', label: 'Ondersteunde Bestanden', icon: 'mdi:file-video' }
|
|
83
|
+
], columns: 3 },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Professionele Toepassingen', level: 3 },
|
|
86
|
+
{ type: 'comparative', items: [
|
|
87
|
+
{
|
|
88
|
+
title: 'Cinema en Fotografie',
|
|
89
|
+
description: 'Leg frames vast als visuele referentie of compositie',
|
|
90
|
+
icon: 'mdi:film',
|
|
91
|
+
points: [
|
|
92
|
+
'Extraheer stills voor filmmarketing',
|
|
93
|
+
'Referenties voor scènecompositie',
|
|
94
|
+
'Frame-voor-frame analyse'
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
title: 'Digitale Content',
|
|
99
|
+
description: 'Maak thumbnails en covers voor social media',
|
|
100
|
+
icon: 'mdi:youtube',
|
|
101
|
+
points: [
|
|
102
|
+
'Hoge resolutie YouTube thumbnails',
|
|
103
|
+
'Social media covers',
|
|
104
|
+
'Afbeeldingen voor presentaties'
|
|
105
|
+
],
|
|
106
|
+
highlight: true
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Technische Documentatie',
|
|
110
|
+
description: 'Extraheer frames uit tutorials en demonstraties',
|
|
111
|
+
icon: 'mdi:book-open',
|
|
112
|
+
points: [
|
|
113
|
+
'Screenshots van tutorial-video\'s',
|
|
114
|
+
'Stapsgewijze visuele documentatie',
|
|
115
|
+
'Real-time bewegingsanalyse'
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
title: 'Sport en Actie',
|
|
120
|
+
description: 'Leg het exacte moment van maximale actie vast',
|
|
121
|
+
icon: 'mdi:dumbbell',
|
|
122
|
+
points: [
|
|
123
|
+
'Frame-voor-frame sporttechniek analyse',
|
|
124
|
+
'Vastleggen van heroïsche momenten',
|
|
125
|
+
'Bewegingsstudie'
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
], columns: 2 },
|
|
129
|
+
|
|
130
|
+
{ type: 'title', text: 'Ondersteunde Videoformaten', level: 3 },
|
|
131
|
+
{ type: 'table', headers: ['Formaat', 'Extensie', 'Compatibiliteit', 'Notities'], rows: [
|
|
132
|
+
['MPEG-4', 'MP4', 'Universeel (100%)', 'Beste compressie, veelgebruikt'],
|
|
133
|
+
['WebM', 'WebM', 'Moderne browsers', 'Superieure compressie, kleiner'],
|
|
134
|
+
['QuickTime', 'MOV', 'Safari', 'Apple standaard'],
|
|
135
|
+
['Matroska', 'MKV', 'Moderne browsers', 'Flexibele container']
|
|
136
|
+
] },
|
|
137
|
+
|
|
138
|
+
{ type: 'card', title: 'Frame Precisie', html: 'Eén frame vooruit of achteruit bewegen (±1 frame) is essentieel om het perfecte moment vast te leggen: een sprong, een glimlach, een gebaar. Onze tool geeft je millimeternauwkeurige controle.' },
|
|
139
|
+
|
|
140
|
+
{ type: 'proscons', items: [
|
|
141
|
+
{
|
|
142
|
+
pro: 'Totale privacy: de video wordt 100% lokaal verwerkt in je browser',
|
|
143
|
+
con: 'Beperkt tot beschikbare RAM-geheugen (~500MB aanbevolen)'
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
pro: 'Eigen resolutie behouden: SD, HD, 4K zonder hercompressie',
|
|
147
|
+
con: 'Vereist moderne browser met HTML5 Video ondersteuning'
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
pro: 'Automatische batch-extractie op aangepaste intervallen',
|
|
151
|
+
con: 'Voor geavanceerde bewerking (trimmen), heb je een video-editor nodig'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
pro: 'Exporteer frames in geoptimaliseerd WebP of ongecomprimeerd PNG',
|
|
155
|
+
con: 'Eén frame per keer (geen export van geautomatiseerde GIF-reeksen)'
|
|
156
|
+
}
|
|
157
|
+
], proTitle: 'Voordelen', conTitle: 'Beperkingen' },
|
|
158
|
+
|
|
159
|
+
{ type: 'diagnostic', variant: 'info', title: 'Resolutie en Frame Rate', icon: 'mdi:information', badge: 'Technisch', html: 'De uiteindelijke frame-resolutie hangt af van de originele video. Wij bewaren de eigen informatie van de video zonder upscaling.' },
|
|
160
|
+
|
|
161
|
+
{ type: 'glossary', items: [
|
|
162
|
+
{
|
|
163
|
+
term: 'Frame',
|
|
164
|
+
definition: 'Individueel beeld in een videoreeks. Een 24 fps video bevat 24 frames per seconde.'
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
term: 'FPS (Frames Per Second)',
|
|
168
|
+
definition: 'Beelden per seconde. Bepaalt de vloeiendheid van de beweging.'
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
term: 'Video Codec',
|
|
172
|
+
definition: 'Compressie-algoritme: H.264, VP9, HEVC. Bepaalt bestandsgrootte en kwaliteit.'
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
term: 'Bitrate',
|
|
176
|
+
definition: 'Hoeveelheid data verwerkt per seconde. Hogere bitrate = hogere kwaliteit.'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
term: 'Videoresolutie',
|
|
180
|
+
definition: 'Pixelafmetingen: 720p, 1080p, 4K, 8K.'
|
|
181
|
+
}
|
|
182
|
+
] },
|
|
183
|
+
|
|
184
|
+
{ type: 'message', title: 'Professionele Frame extractie', ariaLabel: 'Technische info over video-extractie', html: 'Je hebt geen complexe converters nodig. Een perfect frame is slechts 3 klikken verwijderd: upload video, navigeer, leg vast.' },
|
|
185
|
+
|
|
186
|
+
{ type: 'title', text: 'Videomomenten Bevriezen', level: 3 },
|
|
187
|
+
{ type: 'paragraph', html: 'Elke video bevat honderden frames. Gebruik deze tool om die perfecte momenten te extraheren zonder concessies te doen aan kwaliteit of privacy.' }
|
|
188
|
+
];
|
|
189
|
+
|
|
190
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
191
|
+
'@context': 'https://schema.org',
|
|
192
|
+
'@type': 'FAQPage',
|
|
193
|
+
mainEntity: faq.map((item) => ({
|
|
194
|
+
'@type': 'Question',
|
|
195
|
+
name: item.question,
|
|
196
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
197
|
+
})),
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
const howToSchema: WithContext<HowTo> = {
|
|
201
|
+
'@context': 'https://schema.org',
|
|
202
|
+
'@type': 'HowTo',
|
|
203
|
+
name: title,
|
|
204
|
+
description,
|
|
205
|
+
step: howTo.map((step) => ({
|
|
206
|
+
'@type': 'HowToStep',
|
|
207
|
+
name: step.name,
|
|
208
|
+
text: step.text,
|
|
209
|
+
})),
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
213
|
+
'@context': 'https://schema.org',
|
|
214
|
+
'@type': 'SoftwareApplication',
|
|
215
|
+
name: title,
|
|
216
|
+
description,
|
|
217
|
+
applicationCategory: 'UtilitiesApplication',
|
|
218
|
+
operatingSystem: 'Web',
|
|
219
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
220
|
+
inLanguage: 'nl',
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
export const content: VideoFrameExtractorLocaleContent = {
|
|
224
|
+
slug,
|
|
225
|
+
title,
|
|
226
|
+
description,
|
|
227
|
+
ui,
|
|
228
|
+
seo,
|
|
229
|
+
faq,
|
|
230
|
+
faqTitle: 'Veelgestelde Vragen over Video Frame Extractie',
|
|
231
|
+
bibliography,
|
|
232
|
+
bibliographyTitle: 'Technische Standaarden voor Video Capture',
|
|
233
|
+
howTo,
|
|
234
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
235
|
+
};
|