@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,241 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { SubtitleSyncUI, SubtitleSyncLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'sinkronisasi-subtitle-srt-online-atur-timing-gratis';
|
|
5
|
+
const title = 'Sinkronisasi Subtitle SRT Online: Atur Timing Gratis';
|
|
6
|
+
const description = 'Alat online untuk memajukan atau menunda subtitle SRT. Perbaiki offset waktu dengan mudah dan unduh file yang disinkronkan secara instan.';
|
|
7
|
+
|
|
8
|
+
const ui: SubtitleSyncUI = {
|
|
9
|
+
dropTitle: "Seret file .SRT Anda ke sini",
|
|
10
|
+
dropSubtitle: "atau klik untuk mencari",
|
|
11
|
+
adjustTitle: "Atur Waktu",
|
|
12
|
+
offsetLabel: "Offset (detik)",
|
|
13
|
+
offsetHelp: "Gunakan nilai negatif untuk memajukan (misal: -1.5) dan nilai positif untuk menunda.",
|
|
14
|
+
linesStat: "Baris",
|
|
15
|
+
firstStat: "Subtitle Pertama",
|
|
16
|
+
lastStat: "Subtitle Terakhir",
|
|
17
|
+
originalLabel: "ASLI",
|
|
18
|
+
resultLabel: "HASIL",
|
|
19
|
+
downloadButton: "Unduh yang Diperbaiki",
|
|
20
|
+
previewBadge: "PRATINJAU",
|
|
21
|
+
unitSeconds: "det"
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const faq: SubtitleSyncLocaleContent['faq'] = [
|
|
25
|
+
{
|
|
26
|
+
question: "Bagaimana cara menyinkronkan subtitle saya jika audionya lebih cepat?",
|
|
27
|
+
answer: "Jika audio muncul sebelum teks, Anda harus menunda subtitle. Masukkan nilai positif di kalkulator (misal: 2.0 untuk menundanya selama 2 detik).",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
question: "Format file apa yang didukung alat ini?",
|
|
31
|
+
answer: "Saat ini, alat ini dioptimalkan untuk file .SRT (SubRip), yang merupakan standar paling umum di pemutar video dan platform streaming.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: "Apakah aman untuk mengunggah file subtitle saya?",
|
|
35
|
+
answer: "Ya, karena pemrosesan dilakukan 100% secara lokal di perangkat Anda. File Anda tidak dikirim ke server mana pun; sinkronisasi terjadi langsung di browser Anda.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: "Bisakah saya menyinkronkan hanya sebagian file?",
|
|
39
|
+
answer: "Tidak, alat ini menerapkan offset konstan ke seluruh file. Jika offset bersifat progresif, Anda mungkin memerlukan pengeditan yang lebih canggih.",
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const howTo: SubtitleSyncLocaleContent['howTo'] = [
|
|
44
|
+
{
|
|
45
|
+
name: "Unggah file SRT Anda",
|
|
46
|
+
text: "Seret file subtitle yang ingin Anda perbaiki ke area unggah.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "Identifikasi offset",
|
|
50
|
+
text: "Ukur seberapa besar penundaan atau percepatan subtitle relatif terhadap audio di pemutar Anda.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "Atur offset",
|
|
54
|
+
text: "Masukkan detik positif (tunda) atau negatif (majukan) di panel kontrol.",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "Unduh filenya",
|
|
58
|
+
text: "Verifikasi di pratinjau bahwa waktunya sudah benar dan klik unduh untuk mendapatkan SRT baru Anda.",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
|
|
63
|
+
{
|
|
64
|
+
name: "Spesifikasi format 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/en-US/docs/Web/API/FileReader",
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const seo: SubtitleSyncLocaleContent['seo'] = [
|
|
74
|
+
{
|
|
75
|
+
type: 'summary',
|
|
76
|
+
title: 'Sinkronisasi Subtitle Profesional',
|
|
77
|
+
items: [
|
|
78
|
+
'Koreksi instan offset audio-subtitle',
|
|
79
|
+
'Mendukung file standar SRT (SubRip)',
|
|
80
|
+
'Pemrosesan lokal 100% - privasi maksimum',
|
|
81
|
+
'Tanpa instalasi, tanpa langganan, sepenuhnya gratis'
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{ type: 'title', text: 'Sinkronisasi Subtitle SRT yang Sempurna', level: 2 },
|
|
85
|
+
{ type: 'paragraph', html: 'Tidak ada yang lebih membuat frustrasi penonton daripada melihat dialog yang tidak cocok dengan suara. Offset subtitle biasanya terjadi karena perbedaan antara versi video: variasi framerate, pemotongan iklan, intro produksi, atau perubahan kompresi. Dengan alat ini, Anda memperbaiki masalah dalam hitungan detik.' },
|
|
86
|
+
|
|
87
|
+
{ type: 'stats', items: [
|
|
88
|
+
{ value: '100%', label: 'Pemrosesan Lokal', icon: 'mdi:shield' },
|
|
89
|
+
{ value: 'Milidetik', label: 'Presisi', icon: 'mdi:clock-outline' },
|
|
90
|
+
{ value: 'Berapa pun', label: 'TANPA Batas File', icon: 'mdi:file-document' }
|
|
91
|
+
], columns: 3 },
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'Majukan vs Tunda: Panduan Praktis', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Langkah pertama adalah mengidentifikasi jenis offset dengan benar. Inilah logikanya:' },
|
|
95
|
+
{ type: 'list', items: [
|
|
96
|
+
'<strong>Tunda (Nilai Positif):</strong> Ketika Anda melihat teks muncul SEBELUM suara. Subtitle terlalu cepat. Contoh: +2,0 detik.',
|
|
97
|
+
'<strong>Majukan (Nilai Negatif):</strong> Ketika Anda melihat teks muncul SETELAH suara. Subtitle terlambat. Contoh: -2,0 detik.',
|
|
98
|
+
'<strong>Uji dan Atur:</strong> Mulailah dengan peningkatan kecil (0,5 detik) dan gunakan pratinjau untuk memvalidasi.'
|
|
99
|
+
], icon: 'mdi:arrow-right' },
|
|
100
|
+
|
|
101
|
+
{ type: 'card', title: 'Privasi Tingkat Profesional', html: 'Dengan memproses file melalui JavaScript sisi klien, kami menjamin bahwa konten subtitle Anda tidak pernah meninggalkan komputer Anda. Penting bagi penerjemah dan profesional yang menangani materi rahasia atau di bawah NDA.' },
|
|
102
|
+
|
|
103
|
+
{ type: 'title', text: 'Kasus Penggunaan Umum', level: 3 },
|
|
104
|
+
{ type: 'comparative', items: [
|
|
105
|
+
{
|
|
106
|
+
title: 'Penerjemah dan Pembuat Subtitle',
|
|
107
|
+
description: 'Sinkronkan terjemahan setelah bekerja dengan beberapa versi video',
|
|
108
|
+
icon: 'mdi:translate',
|
|
109
|
+
points: [
|
|
110
|
+
'File SRT dari berbagai sumber',
|
|
111
|
+
'Versioning konten (bioskop vs streaming)',
|
|
112
|
+
'Pengiriman cepat tanpa mengganti alat'
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: 'Pembuat Konten',
|
|
117
|
+
description: 'Pulihkan subtitle ketika video diproses dengan framerate yang berbeda',
|
|
118
|
+
icon: 'mdi:video',
|
|
119
|
+
points: [
|
|
120
|
+
'Gunakan kembali subtitle yang ada',
|
|
121
|
+
'Perubahan format (720p ke 1080p)',
|
|
122
|
+
'Hindari pengaturan ulang waktu manual untuk 1000+ baris'
|
|
123
|
+
],
|
|
124
|
+
highlight: true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'Pengguna Biasa',
|
|
128
|
+
description: 'Perbaiki subtitle unduhan yang tidak pas secara sempurna',
|
|
129
|
+
icon: 'mdi:account',
|
|
130
|
+
points: [
|
|
131
|
+
'Subtitle generik yang tidak sinkron',
|
|
132
|
+
'Film di wilayah berbeda (PAL vs NTSC)',
|
|
133
|
+
'Streaming dengan versi yang diedit'
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
], columns: 3 },
|
|
137
|
+
|
|
138
|
+
{ type: 'title', text: 'Mengapa Subtitle Tidak Sinkron', level: 3 },
|
|
139
|
+
{ type: 'table', headers: ['Penyebab Umum', 'Deskripsi Teknis', 'Solusi'], rows: [
|
|
140
|
+
['Perbedaan Framerate', '23,976 fps vs 25 fps - perbedaan akumulasi', 'Penyesuaian offset tunggal (alat ini)'],
|
|
141
|
+
['Editorial', 'Pemotongan iklan atau konten tambahan dihapus', 'Perhitungan manual + sinkronisasi'],
|
|
142
|
+
['Versi Regional', 'PAL (25 fps Eropa) vs NTSC (29,97 fps AS)', 'Offset matematika sederhana'],
|
|
143
|
+
['Perubahan Resolusi', 'Enkode ulang dengan kecepatan pemrosesan berbeda', 'Penghitungan ulang file asli']
|
|
144
|
+
] },
|
|
145
|
+
|
|
146
|
+
{ type: 'diagnostic', variant: 'info', title: 'Batasan Teknis yang Perlu Dipertimbangkan', icon: 'mdi:information', badge: 'Penting', html: 'Alat ini menerapkan offset <strong>konstan</strong> ke seluruh file. Jika offset bersifat <strong>progresif</strong> (awal sinkron tetapi perlahan menjadi tidak sinkron), itu menunjukkan perbedaan framerate yang persisten. Dalam hal ini, file asli perlu diproses ulang di perangkat lunak pengeditan profesional.' },
|
|
147
|
+
|
|
148
|
+
{ type: 'proscons', items: [
|
|
149
|
+
{
|
|
150
|
+
pro: 'Kecepatan ekstrem - memproses file besar dalam milidetik',
|
|
151
|
+
con: 'Hanya mengatur offset tetap, bukan yang progresif'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
pro: 'Privasi total - konten tidak pernah meninggalkan browser Anda',
|
|
155
|
+
con: 'Memerlukan browser modern dengan JavaScript yang diaktifkan'
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
pro: 'Format universal - berfungsi dengan SRT standar apa pun',
|
|
159
|
+
con: 'Tidak mendukung format lain (ASS, VTT, SCC, dll.)'
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
pro: 'Sepenuhnya gratis, tanpa iklan, tanpa pelacakan',
|
|
163
|
+
con: 'Tidak ada riwayat perubahan atau versioning'
|
|
164
|
+
}
|
|
165
|
+
], proTitle: 'Keuntungan', conTitle: 'Batasan' },
|
|
166
|
+
|
|
167
|
+
{ type: 'glossary', items: [
|
|
168
|
+
{
|
|
169
|
+
term: 'SRT (SubRip)',
|
|
170
|
+
definition: 'Format subtitle paling universal: file teks dengan nomor urut, waktu (jj:mm:dd,mmm), dan teks. Standar de facto di pemutar dan platform.'
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
term: 'Offset',
|
|
174
|
+
definition: 'Jumlah waktu tetap yang ditambah atau dikurangi dari semua waktu dalam file. Bisa berupa detik positif (tunda) atau negatif (majukan).'
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
term: 'Framerate (fps)',
|
|
178
|
+
definition: 'Frame per detik. 24p (bioskop), 25p (PAL/Eropa), 29,97p (NTSC/AS), 60p (video lancar). Perbedaan menyebabkan offset kumulatif.'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
term: 'NTSC vs PAL',
|
|
182
|
+
definition: 'Standar televisi regional: PAL (25 fps) di Eropa; NTSC (29,97 fps) di AS. Perbedaan kecepatan sekitar 4%.'
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
term: 'Offset Progresif',
|
|
186
|
+
definition: 'Ketika sinkronisasi dimulai dengan benar tetapi perlahan-lahan menjadi tidak sinkron. Menunjukkan perbedaan framerate, memerlukan pemrosesan ulang.'
|
|
187
|
+
}
|
|
188
|
+
] },
|
|
189
|
+
|
|
190
|
+
{ type: 'message', title: 'Pengeditan Profesional dengan Kontrol Penuh', ariaLabel: 'Informasi teknis tentang sinkronisasi', html: 'Pendekatan kami sederhana namun ampuh: satu offset, diterapkan secara instan, diproses 100% di browser Anda. Tanpa cloud, tanpa penyimpanan, tanpa pelacakan. Cukup unggah, atur, unduh. Kontrol penuh atas konten Anda.' },
|
|
191
|
+
|
|
192
|
+
{ type: 'title', text: 'Kesimpulan: Menonton Tanpa Gangguan', level: 3 },
|
|
193
|
+
{ type: 'paragraph', html: 'Sinkronisasi subtitle yang sempurna sangat penting untuk pengalaman audiovisual yang berkualitas. Dengan alat ini, Anda mengubah pengalaman yang menjengkelkan menjadi malam menonton film yang sempurna, tanpa memerlukan perangkat lunak yang mahal atau rumit.' }
|
|
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: 'id',
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
export const content: SubtitleSyncLocaleContent = {
|
|
230
|
+
slug,
|
|
231
|
+
title,
|
|
232
|
+
description,
|
|
233
|
+
ui,
|
|
234
|
+
seo,
|
|
235
|
+
faq,
|
|
236
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan tentang Sinkronisasi Subtitle',
|
|
237
|
+
bibliography,
|
|
238
|
+
bibliographyTitle: 'Sumber Daya Teknis tentang Format Subtitle',
|
|
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 = 'sincronizzare-sottotitoli-srt-online-regolare-timing-gratis';
|
|
5
|
+
const title = 'Sincronizzare Sottotitoli SRT Online: Regola il Timing Gratuitamente';
|
|
6
|
+
const description = 'Strumento online per anticipare o ritardare i sottotitoli SRT. Correggi facilmente l\'offset temporale e scarica istantaneamente il file sincronizzato.';
|
|
7
|
+
|
|
8
|
+
const ui: SubtitleSyncUI = {
|
|
9
|
+
dropTitle: "Trascina qui il tuo file .SRT",
|
|
10
|
+
dropSubtitle: "o clicca per sfogliare",
|
|
11
|
+
adjustTitle: "Regola Tempo",
|
|
12
|
+
offsetLabel: "Offset (secondi)",
|
|
13
|
+
offsetHelp: "Usa valori negativi per anticipare (es. -1.5) e valori positivi per ritardare.",
|
|
14
|
+
linesStat: "Linee",
|
|
15
|
+
firstStat: "Primo Sottotitolo",
|
|
16
|
+
lastStat: "Ultimo Sottotitolo",
|
|
17
|
+
originalLabel: "ORIGINALE",
|
|
18
|
+
resultLabel: "RISULTATO",
|
|
19
|
+
downloadButton: "Scarica Corretto",
|
|
20
|
+
previewBadge: "ANTEPRIMA",
|
|
21
|
+
unitSeconds: "sec"
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const faq: SubtitleSyncLocaleContent['faq'] = [
|
|
25
|
+
{
|
|
26
|
+
question: "Come posso sincronizzare i miei sottotitoli se l'audio è in anticipo?",
|
|
27
|
+
answer: "Se l'audio appare prima del testo, devi ritardare i sottotitoli. Inserisci un valore positivo nel calcolatore (es. 2.0 per ritardarli di 2 secondi).",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
question: "Quali formati di file accetta questo strumento?",
|
|
31
|
+
answer: "Attualmente, lo strumento è ottimizzato per i file .SRT (SubRip), che è lo standard più comune nei lettori video e nelle piattaforme di streaming.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: "È sicuro caricare i miei file di sottotitoli?",
|
|
35
|
+
answer: "Sì, perché l'elaborazione è al 100% locale sul tuo dispositivo. I tuoi file non vengono inviati a nessun server; la sincronizzazione avviene direttamente nel tuo browser.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: "Posso sincronizzare solo una parte del file?",
|
|
39
|
+
answer: "No, questo strumento applica un offset costante all'intero file. Se l'offset è progressivo, potresti aver bisogno di un editing più avanzato.",
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const howTo: SubtitleSyncLocaleContent['howTo'] = [
|
|
44
|
+
{
|
|
45
|
+
name: "Carica il tuo file SRT",
|
|
46
|
+
text: "Trascina il file dei sottotitoli che vuoi correggere nell'area di caricamento.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "Identifica l'offset",
|
|
50
|
+
text: "Misura quanto ritardo o anticipo hanno i sottotitoli rispetto all'audio nel tuo lettore.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "Regola l'offset",
|
|
54
|
+
text: "Inserisci i secondi positivi (ritardo) o negativi (anticipo) nel pannello di controllo.",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "Scarica il file",
|
|
58
|
+
text: "Verifica nell'anteprima che i tempi siano corretti e clicca su scarica per ottenere il tuo nuovo SRT.",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
|
|
63
|
+
{
|
|
64
|
+
name: "Specifica del formato 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/en-US/docs/Web/API/FileReader",
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const seo: SubtitleSyncLocaleContent['seo'] = [
|
|
74
|
+
{
|
|
75
|
+
type: 'summary',
|
|
76
|
+
title: 'Sincronizzazione Professionale dei Sottotitoli',
|
|
77
|
+
items: [
|
|
78
|
+
'Correzione istantanea degli offset audio-sottotitoli',
|
|
79
|
+
'Supporta i file standard SRT (SubRip)',
|
|
80
|
+
'Elaborazione 100% locale - massima privacy',
|
|
81
|
+
'Nessuna installazione, nessun abbonamento, completamente gratuito'
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{ type: 'title', text: 'Sincronizzazione Perfetta dei Sottotitoli SRT', level: 2 },
|
|
85
|
+
{ type: 'paragraph', html: 'Non c\'è niente di più frustrante per uno spettatore che vedere dialoghi che non corrispondono alle voci. L\'offset dei sottotitoli si verifica solitamente a causa di differenze tra le versioni video: variazioni nel framerate, tagli pubblicitari, intro di produzione o cambiamenti nella compressione. Con questo strumento, risolvi il problema in pochi secondi.' },
|
|
86
|
+
|
|
87
|
+
{ type: 'stats', items: [
|
|
88
|
+
{ value: '100%', label: 'Elaborazione Locale', icon: 'mdi:shield' },
|
|
89
|
+
{ value: 'Millisecondi', label: 'Precisione', icon: 'mdi:clock-outline' },
|
|
90
|
+
{ value: 'Qualsiasi', label: 'NESSUN limite di file', icon: 'mdi:file-document' }
|
|
91
|
+
], columns: 3 },
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'Anticipo vs Ritardo: Guida Pratica', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Il primo passo è identificare correttamente il tipo di offset. Ecco la logica:' },
|
|
95
|
+
{ type: 'list', items: [
|
|
96
|
+
'<strong>Ritardo (Valore Positivo):</strong> Quando vedi il testo apparire PRIMA del suono. I sottotitoli sono in anticipo. Esempio: +2.0 secondi.',
|
|
97
|
+
'<strong>Anticipo (Valore Negativo):</strong> Quando vedi il testo apparire DOPO il suono. I sottotitoli sono in ritardo. Esempio: -2.0 secondi.',
|
|
98
|
+
'<strong>Testa e Regola:</strong> Inizia con piccoli incrementi (0.5s) e usa l\'anteprima per validare.'
|
|
99
|
+
], icon: 'mdi:arrow-right' },
|
|
100
|
+
|
|
101
|
+
{ type: 'card', title: 'Privacy di Livello Professionale', html: 'Elaborando il file tramite JavaScript sul lato client, garantiamo che il contenuto dei tuoi sottotitoli non lasci mai il tuo computer. Essenziale per traduttori e professionisti che gestiscono materiale riservato o sotto NDA.' },
|
|
102
|
+
|
|
103
|
+
{ type: 'title', text: 'Casi d\'Uso Comuni', level: 3 },
|
|
104
|
+
{ type: 'comparative', items: [
|
|
105
|
+
{
|
|
106
|
+
title: 'Traduttori e Sottotitolatori',
|
|
107
|
+
description: 'Sincronizza le traduzioni dopo aver lavorato con più versioni video',
|
|
108
|
+
icon: 'mdi:translate',
|
|
109
|
+
points: [
|
|
110
|
+
'File SRT da diverse fonti',
|
|
111
|
+
'Versioning dei contenuti (cinematografico vs streaming)',
|
|
112
|
+
'Consegna rapida senza cambiare strumenti'
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: 'Creatori di Contenuti',
|
|
117
|
+
description: 'Recupera i sottotitoli quando il video è stato elaborato con un framerate diverso',
|
|
118
|
+
icon: 'mdi:video',
|
|
119
|
+
points: [
|
|
120
|
+
'Riuilizza i sottotitoli esistenti',
|
|
121
|
+
'Cambi di formato (da 720p a 1080p)',
|
|
122
|
+
'Evita il retiming manuale di più di 1000 linee'
|
|
123
|
+
],
|
|
124
|
+
highlight: true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'Utenti Occasionali',
|
|
128
|
+
description: 'Correggi i sottotitoli scaricati che non si adattano perfettamente',
|
|
129
|
+
icon: 'mdi:account',
|
|
130
|
+
points: [
|
|
131
|
+
'Sottotitoli generici fuori sincrono',
|
|
132
|
+
'Film in diverse regioni (PAL vs NTSC)',
|
|
133
|
+
'Streaming con versioni editate'
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
], columns: 3 },
|
|
137
|
+
|
|
138
|
+
{ type: 'title', text: 'Perché i Sottotitoli vanno Fuori Sincrono', level: 3 },
|
|
139
|
+
{ type: 'table', headers: ['Causa Comune', 'Descrizione Tecnica', 'Soluzione'], rows: [
|
|
140
|
+
['Differenza di Framerate', '23.976 fps vs 25 fps - differenza accumulata', 'Regolazione dell\'offset singolo (questo strumento)'],
|
|
141
|
+
['Editoria', 'Tagli pubblicitari o contenuti aggiuntivi rimossi', 'Calcolo manuale + sincronizzazione'],
|
|
142
|
+
['Versione Regionale', 'PAL (25 fps Europa) vs NTSC (29.97 fps USA)', 'Semplice offset matematico'],
|
|
143
|
+
['Cambio di Risoluzione', 'Re-encoding con diversa velocità di elaborazione', 'Ricalcolo del file originale']
|
|
144
|
+
] },
|
|
145
|
+
|
|
146
|
+
{ type: 'diagnostic', variant: 'info', title: 'Limitazioni Tecniche da Considerare', icon: 'mdi:information', badge: 'Importante', html: 'Questo strumento applica un offset <strong>costante</strong> all\'intero file. Se l\'offset è <strong>progressivo</strong> (inizia bene ma va gradualmente fuori sincrono), indica una differenza persistente di framerate. In quel caso, il file originale deve essere rielaborato con un software di editing professionale.' },
|
|
147
|
+
|
|
148
|
+
{ type: 'proscons', items: [
|
|
149
|
+
{
|
|
150
|
+
pro: 'Velocità estrema - elabora file di grandi dimensioni in millisecondi',
|
|
151
|
+
con: 'Regola solo l\'offset fisso, non quelli progressivi'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
pro: 'Privacy totale - il contenuto non lascia mai il tuo browser',
|
|
155
|
+
con: 'Richiede un browser moderno con JavaScript abilitato'
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
pro: 'Formato universale - funziona con qualsiasi SRT standard',
|
|
159
|
+
con: 'Non supporta altri formati (ASS, VTT, SCC, ecc.)'
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
pro: 'Completamente gratuito, nessuna pubblicità, nessun tracciamento',
|
|
163
|
+
con: 'Nessuna cronologia delle modifiche o versioning'
|
|
164
|
+
}
|
|
165
|
+
], proTitle: 'Vantaggi', conTitle: 'Limitazioni' },
|
|
166
|
+
|
|
167
|
+
{ type: 'glossary', items: [
|
|
168
|
+
{
|
|
169
|
+
term: 'SRT (SubRip)',
|
|
170
|
+
definition: 'Il formato di sottotitoli più universale: file di testo con numeri di sequenza, tempi (hh:mm:ss,mmm) e testo. Standard de facto nei lettori e nelle piattaforme.'
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
term: 'Offset',
|
|
174
|
+
definition: 'Quantità fissa di tempo aggiunta o sottratta a tutti i tempi nel file. Possono essere secondi positivi (ritardo) o negativi (anticipo).'
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
term: 'Framerate (fps)',
|
|
178
|
+
definition: 'Fotogrammi al secondo. 24p (cinema), 25p (PAL/Europa), 29.97p (NTSC/USA), 60p (video fluido). Le differenze causano offset cumulativi.'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
term: 'NTSC vs PAL',
|
|
182
|
+
definition: 'Standard televisivi regionali: PAL (25 fps) in Europa; NTSC (29.97 fps) in USA. Differenza di velocità di circa il 4%.'
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
term: 'Offset Progressivo',
|
|
186
|
+
definition: 'Quando la sincronizzazione inizia correttamente ma finisce per andare gradualmente fuori sincro. Indica una differenza di framerate, richiede rielaborazione.'
|
|
187
|
+
}
|
|
188
|
+
] },
|
|
189
|
+
|
|
190
|
+
{ type: 'message', title: 'Editing Professionale con Pieno Controllo', ariaLabel: 'Informazioni tecniche sulla sincronizzazione', html: 'Il nostro approccio è semplice ma potente: un singolo offset, applicato istantaneamente, elaborato al 100% nel tuo browser. Niente cloud, niente archiviazione, niente tracciamento. Semplicemente carica, regola, scarica. Pieno controllo sui tuoi contenuti.' },
|
|
191
|
+
|
|
192
|
+
{ type: 'title', text: 'Conclusione: Film Senza Interruzioni', level: 3 },
|
|
193
|
+
{ type: 'paragraph', html: 'La perfetta sincronizzazione dei sottotitoli è essenziale per un\'esperienza audiovisiva di qualità. Con questo strumento, trasformi un\'esperienza frustrante in una serata cinema perfetta, senza la necessità di software costosi o complicati.' }
|
|
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: 'it',
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
export const content: SubtitleSyncLocaleContent = {
|
|
230
|
+
slug,
|
|
231
|
+
title,
|
|
232
|
+
description,
|
|
233
|
+
ui,
|
|
234
|
+
seo,
|
|
235
|
+
faq,
|
|
236
|
+
faqTitle: 'Domande Frequenti sulla Sincronizzazione dei Sottotitoli',
|
|
237
|
+
bibliography,
|
|
238
|
+
bibliographyTitle: 'Risorse Tecniche sui Formati dei Sottotitoli',
|
|
239
|
+
howTo,
|
|
240
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
241
|
+
};
|