@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,235 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { VideoFrameExtractorUI, VideoFrameExtractorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'onlajn-ekstraktor-kadrov-video-zahvat-stills-hd';
|
|
5
|
+
const title = 'Экстрактор кадров видео: Захват HD снимков';
|
|
6
|
+
const description = 'Извлекайте отдельные изображения из видео с точностью до кадра. Сохраняйте идеальные моменты в HD локально и бесплатно.';
|
|
7
|
+
|
|
8
|
+
const ui: VideoFrameExtractorUI = {
|
|
9
|
+
uploadTitle: "Загрузить видеофайл",
|
|
10
|
+
uploadFormats: "MP4, WebM, MOV или MKV (Макс. 500 МБ)",
|
|
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: "Да, если в вашем браузере достаточно оперативной памяти для загрузки видео. Мы рекомендуем файлы до 500 МБ для лучшей работы.",
|
|
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 до 500 МБ',
|
|
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: 'Создание превью и обложек для соцсетей',
|
|
100
|
+
icon: 'mdi:youtube',
|
|
101
|
+
points: [
|
|
102
|
+
'HD обложки для YouTube',
|
|
103
|
+
'Контент для соцсетей',
|
|
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: 'Зависимость от оперативной памяти (~до 500 МБ)'
|
|
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: 'Разрешение и FPS', icon: 'mdi:information', badge: 'Техинфо', html: 'Финальное разрешение зависит от оригинала. Мы не используем апскейлинг, сохраняя нативные данные видео.' },
|
|
160
|
+
|
|
161
|
+
{ type: 'glossary', items: [
|
|
162
|
+
{
|
|
163
|
+
term: 'Кадр',
|
|
164
|
+
definition: 'Отдельное изображение в видео. В видео 24 fps их 24 в каждой секунде.'
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
term: 'FPS',
|
|
168
|
+
definition: 'Количество кадров в секунду. Определяет плавность.'
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
term: 'Видеокодек',
|
|
172
|
+
definition: 'Алгоритм сжатия: H.264, VP9, HEVC.'
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
term: 'Битрейт',
|
|
176
|
+
definition: 'Количество данных в секунду. Выше битрейт — выше качество.'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
term: 'Разрешение',
|
|
180
|
+
definition: 'Размеры в пикселях: 1080p, 4K и др.'
|
|
181
|
+
}
|
|
182
|
+
] },
|
|
183
|
+
|
|
184
|
+
{ type: 'message', title: 'Профессиональное извлечение', ariaLabel: 'Техническая информация', html: 'Вам не нужны сложные конвертеры. Идеальный кадр в 3 клика: загрузка, навигация, захват.' },
|
|
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: 'ru',
|
|
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-extraktor-fanga-hd-bilder';
|
|
5
|
+
const title = 'Video Frame Extraktor: Fånga HD bilder';
|
|
6
|
+
const description = 'Extrahera enskilda bilder från dina videor med exakt precision på rutan. Fånga perfekta ögonblick i HD lokalt och gratis.';
|
|
7
|
+
|
|
8
|
+
const ui: VideoFrameExtractorUI = {
|
|
9
|
+
uploadTitle: "Ladda upp en videofil",
|
|
10
|
+
uploadFormats: "MP4, WebM, MOV eller MKV (Max. 500MB)",
|
|
11
|
+
privacyNote: "Videon laddas inte upp till internet, den bearbetas lokalt i din webbläsare.",
|
|
12
|
+
playLabel: "Spela",
|
|
13
|
+
pauseLabel: "Paus",
|
|
14
|
+
captureBtn: "Fånga ruta",
|
|
15
|
+
prevFrame: "-1F",
|
|
16
|
+
nextFrame: "+1F",
|
|
17
|
+
batchTitle: "Automatisk extrahering",
|
|
18
|
+
batchEvery: "Varje",
|
|
19
|
+
batchStart: "Starta sekvens",
|
|
20
|
+
batchProcessing: "Extraherar...",
|
|
21
|
+
galleryTitle: "Fångade rutor",
|
|
22
|
+
galleryEmpty: "Dina bilder visas här när du fångar dem.",
|
|
23
|
+
downloadAll: "Ladda ner alla",
|
|
24
|
+
downloadHD: "Ladda ner HD-bild",
|
|
25
|
+
resetBtn: "Ladda upp en annan video"
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const faq: VideoFrameExtractorLocaleContent['faq'] = [
|
|
29
|
+
{
|
|
30
|
+
question: "Kan jag extrahera rutor från långa videor?",
|
|
31
|
+
answer: "Ja, så länge din webbläsare har tillräckligt med RAM-minne för att ladda videon. Vi rekommenderar filer upp till 500 MB för optimal prestanda.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: "I vilken upplösning sparas bilderna?",
|
|
35
|
+
answer: "Bilderna fångas i originalvideons naturliga upplösning. Om din video är 4K får du en högkvalitativ 4K-bild.",
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: VideoFrameExtractorLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: "Ladda upp din video",
|
|
42
|
+
text: "Välj videofilen från din enhet. Vi laddar inte upp den till någon server.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "Navigera till det exakta ögonblicket",
|
|
46
|
+
text: "Använd tidslinjen eller knapparna ±1 ruta för kirurgisk precision.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "Fånga rutan",
|
|
50
|
+
text: "Tryck på fångstknappen för att spara ögonblicket i galleriet nedan.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "Ladda ner i hög kvalitet",
|
|
54
|
+
text: "Ladda ner enskilda bilder eller hela sessionen i optimerat WebP format.",
|
|
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: 'Professionell Video Frame Extrahering',
|
|
69
|
+
items: [
|
|
70
|
+
'Precision på enskild ruta (±1 ruta) för perfekt fångst',
|
|
71
|
+
'Stöd för MP4, WebM, MOV, MKV upp till 500MB',
|
|
72
|
+
'Originalets videoupplösning bevaras (SD, HD, 4K)',
|
|
73
|
+
'Automatisk batch-extrahering vid anpassade intervall'
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{ type: 'title', text: 'Frame extrahering: Frys tiden i videon', level: 2 },
|
|
77
|
+
{ type: 'paragraph', html: 'Ibland säger en bild mer än tusen ord. Vårt verktyg använder din webbläsares lokala kraft för att extrahera precisionsrutor utan behov av professionell programvara.' },
|
|
78
|
+
|
|
79
|
+
{ type: 'stats', items: [
|
|
80
|
+
{ value: '±1', label: 'Precision på rutan', icon: 'mdi:target' },
|
|
81
|
+
{ value: '100%', label: 'Naturlig upplösning', icon: 'mdi:video-high-definition' },
|
|
82
|
+
{ value: '500MB', label: 'Filer som stöds', icon: 'mdi:file-video' }
|
|
83
|
+
], columns: 3 },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Professionella användningsområden', level: 3 },
|
|
86
|
+
{ type: 'comparative', items: [
|
|
87
|
+
{
|
|
88
|
+
title: 'Film och fotografi',
|
|
89
|
+
description: 'Fånga rutor som visuell referens eller komposition',
|
|
90
|
+
icon: 'mdi:film',
|
|
91
|
+
points: [
|
|
92
|
+
'Extrahera bilder för filmmarknadsföring',
|
|
93
|
+
'Referenser för scenkomposition',
|
|
94
|
+
'Ruta-för-ruta analys'
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
title: 'Digitalt innehåll',
|
|
99
|
+
description: 'Skapa miniatyrer och omslag för sociala medier',
|
|
100
|
+
icon: 'mdi:youtube',
|
|
101
|
+
points: [
|
|
102
|
+
'Högupplösta YouTube-miniatyrer',
|
|
103
|
+
'Omslag för sociala medier',
|
|
104
|
+
'Bilder för presentationer'
|
|
105
|
+
],
|
|
106
|
+
highlight: true
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Teknisk dokumentation',
|
|
110
|
+
description: 'Extrahera rutor från tutorials och demonstrationer',
|
|
111
|
+
icon: 'mdi:book-open',
|
|
112
|
+
points: [
|
|
113
|
+
'Skärmdumpar från tutorial-videor',
|
|
114
|
+
'Visuell dokumentation steg-för-steg',
|
|
115
|
+
'Rörelseanalys i realtid'
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
title: 'Sport och action',
|
|
120
|
+
description: 'Fånga det exakta ögonblicket av maximal action',
|
|
121
|
+
icon: 'mdi:dumbbell',
|
|
122
|
+
points: [
|
|
123
|
+
'Teknikanalys ruta-för-ruta',
|
|
124
|
+
'Fånga heroiska ögonblick',
|
|
125
|
+
'Rörelsestudier'
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
], columns: 2 },
|
|
129
|
+
|
|
130
|
+
{ type: 'title', text: 'Videoformat som stöds', level: 3 },
|
|
131
|
+
{ type: 'table', headers: ['Format', 'Tillägg', 'Kompatibilitet', 'Noteringar'], rows: [
|
|
132
|
+
['MPEG-4', 'MP4', 'Universell (100%)', 'Bästa komprimering, mycket använd'],
|
|
133
|
+
['WebM', 'WebM', 'Moderna webbläsare', 'Överlägsen komprimering, mindre storlek'],
|
|
134
|
+
['QuickTime', 'MOV', 'Safari, vissa spelare', 'Apple-standard'],
|
|
135
|
+
['Matroska', 'MKV', 'Moderna webbläsare', 'Flexibel container']
|
|
136
|
+
] },
|
|
137
|
+
|
|
138
|
+
{ type: 'card', title: 'Precision på enskild ruta', html: 'Att flytta sig en enda ruta framåt eller bakåt (±1 ruta) är avgörande för att fånga det perfekta ögonblicket. Vårt verktyg ger dig millimetrisk kontroll.' },
|
|
139
|
+
|
|
140
|
+
{ type: 'proscons', items: [
|
|
141
|
+
{
|
|
142
|
+
pro: 'Total sekretess: videon bearbetas 100% lokalt i din webbläsare',
|
|
143
|
+
con: 'Begänsad till tillgänglig RAM-minnesstorlek (~500MB rekommenderas)'
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
pro: 'Naturlig upplösning bevaras: SD, HD, 4K utan omkomprimering',
|
|
147
|
+
con: 'Kräver modern webbläsare med stöd för HTML5 Video'
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
pro: 'Automatisk batch-extrahering vid anpassade intervall',
|
|
151
|
+
con: 'För avancerad redigering krävs en videoredigerare'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
pro: 'Exportera rutor i optimerat WebP eller obekomprimerat PNG',
|
|
155
|
+
con: 'En ruta åt gången (exporterar inte automatiska GIF-sekvenser)'
|
|
156
|
+
}
|
|
157
|
+
], proTitle: 'Fördelar', conTitle: 'Begränsningar' },
|
|
158
|
+
|
|
159
|
+
{ type: 'diagnostic', variant: 'info', title: 'Upplösning och bildhastighet', icon: 'mdi:information', badge: 'Teknisk', html: 'Extraherade rutans upplösning beror på originalvideon. Vi bevarar videons naturliga information utan uppskalning.' },
|
|
160
|
+
|
|
161
|
+
{ type: 'glossary', items: [
|
|
162
|
+
{
|
|
163
|
+
term: 'Ruta (Frame)',
|
|
164
|
+
definition: 'Individuell bild i en videosekvens. En 24 fps-video innehåller 24 rutor per sekund.'
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
term: 'FPS (Frames Per Second)',
|
|
168
|
+
definition: 'Bilder per sekund. Avgör rörelsens jämnhet.'
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
term: 'Video Codec',
|
|
172
|
+
definition: 'Komprimeringsalgoritm: H.264 (MPEG-4), VP9 (WebM), HEVC. Avgör filstorlek och kvalitet.'
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
term: 'Bitrate',
|
|
176
|
+
definition: 'Mängden data som bearbetas per sekund. Högre bitrate = högre kvalitet.'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
term: 'Videoupplösning',
|
|
180
|
+
definition: 'Pixeldimensioner: 720p, 1080p, 4K, 8K.'
|
|
181
|
+
}
|
|
182
|
+
] },
|
|
183
|
+
|
|
184
|
+
{ type: 'message', title: 'Professionell extrahering på rutan', ariaLabel: 'Teknisk information om videoextrahering', html: 'Du behöver inte komplexa konverterare. En perfekt bild är bara 3 klick bort: ladda upp video, navigera, fånga.' },
|
|
185
|
+
|
|
186
|
+
{ type: 'title', text: 'Frys ögonblick i video', level: 3 },
|
|
187
|
+
{ type: 'paragraph', html: 'Varje video innehåller hundratals rutor. Använd detta verktyg för att extrahera de perfekta ögonblicken utan att kompromissa med kvalitet eller integritet.' }
|
|
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: 'sv',
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
export const content: VideoFrameExtractorLocaleContent = {
|
|
224
|
+
slug,
|
|
225
|
+
title,
|
|
226
|
+
description,
|
|
227
|
+
ui,
|
|
228
|
+
seo,
|
|
229
|
+
faq,
|
|
230
|
+
faqTitle: 'Vanliga frågor om video frame extrahering',
|
|
231
|
+
bibliography,
|
|
232
|
+
bibliographyTitle: 'Tekniska standarder för videofångst',
|
|
233
|
+
howTo,
|
|
234
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
235
|
+
};
|