@jjlmoya/utils-audiovisual 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/category/i18n/de.ts +198 -0
- package/src/category/i18n/id.ts +198 -0
- package/src/category/i18n/it.ts +198 -0
- package/src/category/i18n/ja.ts +198 -0
- package/src/category/i18n/ko.ts +198 -0
- package/src/category/i18n/nl.ts +198 -0
- package/src/category/i18n/pl.ts +198 -0
- package/src/category/i18n/pt.ts +198 -0
- package/src/category/i18n/ru.ts +198 -0
- package/src/category/i18n/sv.ts +198 -0
- package/src/category/i18n/tr.ts +198 -0
- package/src/category/i18n/zh.ts +198 -0
- package/src/category/index.ts +31 -3
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tool/chromaticLens/i18n/de.ts +246 -0
- package/src/tool/chromaticLens/i18n/id.ts +246 -0
- package/src/tool/chromaticLens/i18n/it.ts +246 -0
- package/src/tool/chromaticLens/i18n/ja.ts +246 -0
- package/src/tool/chromaticLens/i18n/ko.ts +246 -0
- package/src/tool/chromaticLens/i18n/nl.ts +246 -0
- package/src/tool/chromaticLens/i18n/pl.ts +246 -0
- package/src/tool/chromaticLens/i18n/pt.ts +246 -0
- package/src/tool/chromaticLens/i18n/ru.ts +246 -0
- package/src/tool/chromaticLens/i18n/sv.ts +246 -0
- package/src/tool/chromaticLens/i18n/tr.ts +246 -0
- package/src/tool/chromaticLens/i18n/zh.ts +246 -0
- package/src/tool/chromaticLens/index.ts +15 -7
- package/src/tool/collageMaker/i18n/de.ts +233 -0
- package/src/tool/collageMaker/i18n/id.ts +233 -0
- package/src/tool/collageMaker/i18n/it.ts +233 -0
- package/src/tool/collageMaker/i18n/ja.ts +233 -0
- package/src/tool/collageMaker/i18n/ko.ts +233 -0
- package/src/tool/collageMaker/i18n/nl.ts +233 -0
- package/src/tool/collageMaker/i18n/pl.ts +233 -0
- package/src/tool/collageMaker/i18n/pt.ts +233 -0
- package/src/tool/collageMaker/i18n/ru.ts +233 -0
- package/src/tool/collageMaker/i18n/sv.ts +233 -0
- package/src/tool/collageMaker/i18n/tr.ts +233 -0
- package/src/tool/collageMaker/i18n/zh.ts +233 -0
- package/src/tool/collageMaker/index.ts +15 -6
- package/src/tool/exifCleaner/i18n/de.ts +277 -0
- package/src/tool/exifCleaner/i18n/fr.ts +1 -1
- package/src/tool/exifCleaner/i18n/id.ts +277 -0
- package/src/tool/exifCleaner/i18n/it.ts +277 -0
- package/src/tool/exifCleaner/i18n/ja.ts +277 -0
- package/src/tool/exifCleaner/i18n/ko.ts +277 -0
- package/src/tool/exifCleaner/i18n/nl.ts +277 -0
- package/src/tool/exifCleaner/i18n/pl.ts +277 -0
- package/src/tool/exifCleaner/i18n/pt.ts +277 -0
- package/src/tool/exifCleaner/i18n/ru.ts +277 -0
- package/src/tool/exifCleaner/i18n/sv.ts +277 -0
- package/src/tool/exifCleaner/i18n/tr.ts +277 -0
- package/src/tool/exifCleaner/i18n/zh.ts +277 -0
- package/src/tool/exifCleaner/index.ts +16 -8
- package/src/tool/imageCompressor/i18n/de.ts +242 -0
- package/src/tool/imageCompressor/i18n/en.ts +1 -1
- package/src/tool/imageCompressor/i18n/es.ts +1 -1
- package/src/tool/imageCompressor/i18n/id.ts +242 -0
- package/src/tool/imageCompressor/i18n/it.ts +242 -0
- package/src/tool/imageCompressor/i18n/ja.ts +242 -0
- package/src/tool/imageCompressor/i18n/ko.ts +242 -0
- package/src/tool/imageCompressor/i18n/nl.ts +242 -0
- package/src/tool/imageCompressor/i18n/pl.ts +242 -0
- package/src/tool/imageCompressor/i18n/pt.ts +242 -0
- package/src/tool/imageCompressor/i18n/ru.ts +242 -0
- package/src/tool/imageCompressor/i18n/sv.ts +242 -0
- package/src/tool/imageCompressor/i18n/tr.ts +242 -0
- package/src/tool/imageCompressor/i18n/zh.ts +244 -0
- package/src/tool/imageCompressor/index.ts +15 -7
- package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/fr.ts +1 -1
- package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
- package/src/tool/printQualityCalculator/index.ts +15 -7
- package/src/tool/privacyBlur/i18n/de.ts +238 -0
- package/src/tool/privacyBlur/i18n/id.ts +238 -0
- package/src/tool/privacyBlur/i18n/it.ts +238 -0
- package/src/tool/privacyBlur/i18n/ja.ts +238 -0
- package/src/tool/privacyBlur/i18n/ko.ts +238 -0
- package/src/tool/privacyBlur/i18n/nl.ts +238 -0
- package/src/tool/privacyBlur/i18n/pl.ts +238 -0
- package/src/tool/privacyBlur/i18n/pt.ts +238 -0
- package/src/tool/privacyBlur/i18n/ru.ts +238 -0
- package/src/tool/privacyBlur/i18n/sv.ts +238 -0
- package/src/tool/privacyBlur/i18n/tr.ts +238 -0
- package/src/tool/privacyBlur/i18n/zh.ts +238 -0
- package/src/tool/privacyBlur/index.ts +15 -7
- package/src/tool/subtitleSync/i18n/de.ts +241 -0
- package/src/tool/subtitleSync/i18n/fr.ts +5 -5
- package/src/tool/subtitleSync/i18n/id.ts +241 -0
- package/src/tool/subtitleSync/i18n/it.ts +241 -0
- package/src/tool/subtitleSync/i18n/ja.ts +241 -0
- package/src/tool/subtitleSync/i18n/ko.ts +241 -0
- package/src/tool/subtitleSync/i18n/nl.ts +241 -0
- package/src/tool/subtitleSync/i18n/pl.ts +241 -0
- package/src/tool/subtitleSync/i18n/pt.ts +241 -0
- package/src/tool/subtitleSync/i18n/ru.ts +241 -0
- package/src/tool/subtitleSync/i18n/sv.ts +241 -0
- package/src/tool/subtitleSync/i18n/tr.ts +241 -0
- package/src/tool/subtitleSync/i18n/zh.ts +241 -0
- package/src/tool/subtitleSync/index.ts +15 -7
- package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
- package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
- package/src/tool/timelapseCalculator/index.ts +16 -8
- package/src/tool/tvDistance/i18n/de.ts +223 -0
- package/src/tool/tvDistance/i18n/id.ts +223 -0
- package/src/tool/tvDistance/i18n/it.ts +223 -0
- package/src/tool/tvDistance/i18n/ja.ts +223 -0
- package/src/tool/tvDistance/i18n/ko.ts +223 -0
- package/src/tool/tvDistance/i18n/nl.ts +223 -0
- package/src/tool/tvDistance/i18n/pl.ts +223 -0
- package/src/tool/tvDistance/i18n/pt.ts +223 -0
- package/src/tool/tvDistance/i18n/ru.ts +223 -0
- package/src/tool/tvDistance/i18n/sv.ts +223 -0
- package/src/tool/tvDistance/i18n/tr.ts +223 -0
- package/src/tool/tvDistance/i18n/zh.ts +223 -0
- package/src/tool/tvDistance/index.ts +15 -7
- package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
- package/src/tool/videoFrameExtractor/index.ts +16 -8
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { SubtitleSyncUI, SubtitleSyncLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'srt-altyazi-senkronize-et-online-zamanlamayi-ayarla-ucretsiz';
|
|
5
|
+
const title = 'SRT Altyazı Senkronize Et Online: Zamanlamayı Ücretsiz Ayarla';
|
|
6
|
+
const description = 'SRT altyazılarını ileri almak veya geciktirmek için çevrimiçi araç. Zaman farkını kolayca düzeltin ve senkronize edilmiş dosyayı anında indirin.';
|
|
7
|
+
|
|
8
|
+
const ui: SubtitleSyncUI = {
|
|
9
|
+
dropTitle: ".SRT dosyanızı buraya sürükleyin",
|
|
10
|
+
dropSubtitle: "veya göz atmak için tıklayın",
|
|
11
|
+
adjustTitle: "Zamanı Ayarla",
|
|
12
|
+
offsetLabel: "Kayma (saniye)",
|
|
13
|
+
offsetHelp: "İleri almak için negatif (örn. -1.5), geciktirmek için pozitif değerler kullanın.",
|
|
14
|
+
linesStat: "Satır",
|
|
15
|
+
firstStat: "İlk Altyazı",
|
|
16
|
+
lastStat: "Son Altyazı",
|
|
17
|
+
originalLabel: "ORİJİNAL",
|
|
18
|
+
resultLabel: "SONUÇ",
|
|
19
|
+
downloadButton: "Düzeltilmiş Olanı İndir",
|
|
20
|
+
previewBadge: "ÖNİZLEME",
|
|
21
|
+
unitSeconds: "sn"
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const faq: SubtitleSyncLocaleContent['faq'] = [
|
|
25
|
+
{
|
|
26
|
+
question: "Ses altyazıdan öndeyse altyazılarımı nasıl senkronize edebilirim?",
|
|
27
|
+
answer: "Ses metinden önce geliyorsa, altyazıları geciktirmelisiniz. Hesaplayıcıya pozitif bir değer girin (örneğin, 2 saniye geciktirmek için 2.0).",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
question: "Bu araç hangi dosya formatlarını kabul ediyor?",
|
|
31
|
+
answer: "Şu anda araç, video oynatıcılarda ve akış platformlarında en yaygın standart olan .SRT (SubRip) dosyaları için optimize edilmiştir.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: "Altyazı dosyalarımı yüklemek güvenli mi?",
|
|
35
|
+
answer: "Evet, çünkü işleme cihazınızda %100 yerel olarak gerçekleşir. Dosyalarınız herhangi bir sunucuya gönderilmez; senkronizasyon doğrudan tarayıcınızda yapılır.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: "Dosyanın sadece bir kısmını senkronize edebilir miyim?",
|
|
39
|
+
answer: "Hayır, bu araç tüm dosyaya sabit bir kayma uygular. Kayma aşamalıysa (zamanla artıyorsa), daha gelişmiş bir düzenleme gerekebilir.",
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const howTo: SubtitleSyncLocaleContent['howTo'] = [
|
|
44
|
+
{
|
|
45
|
+
name: "SRT dosyanızı yükleyin",
|
|
46
|
+
text: "Düzeltmek istediğiniz altyazı dosyasını yükleme alanına sürükleyin.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "Kaymayı belirleyin",
|
|
50
|
+
text: "Altyazıların oynatıcınızdaki sese göre ne kadar gecikme veya ilerleme gösterdiğini ölçün.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "Kaymayı ayarlayın",
|
|
54
|
+
text: "Kontrol paneline pozitif (gecikme) veya negatif (ilerleme) saniye girin.",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "Dosyayı indirin",
|
|
58
|
+
text: "Önizlemede zamanların doğru olduğunu doğrulayın ve yeni SRT'nizi almak için indire tıklayın.",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
|
|
63
|
+
{
|
|
64
|
+
name: "SubRip (SRT) formatı özellikleri",
|
|
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: 'Profesyonel Altyazı Senkronizasyonu',
|
|
77
|
+
items: [
|
|
78
|
+
'Ses-altyazı kaymalarının anında düzeltilmesi',
|
|
79
|
+
'Standart SRT (SubRip) dosyalarını destekler',
|
|
80
|
+
'%100 yerel işleme - maksimum gizlilik',
|
|
81
|
+
'Kurulum yok, abonelik yok, tamamen ücretsiz'
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{ type: 'title', text: 'Mükemmel SRT Altyazı Senkronizasyonu', level: 2 },
|
|
85
|
+
{ type: 'paragraph', html: 'Bir izleyici için seslerle uyuşmayan diyalogları görmekten daha sinir bozucu bir şey yoktur. Altyazı kayması genellikle video sürümleri arasındaki farklardan (kare hızı varyasyonları, reklam kesintileri, yapım introları veya sıkıştırmadaki değişiklikler) kaynaklanır. Bu araçla sorunu saniyeler içinde çözersiniz.' },
|
|
86
|
+
|
|
87
|
+
{ type: 'stats', items: [
|
|
88
|
+
{ value: '%100', label: 'Yerel İşleme', icon: 'mdi:shield' },
|
|
89
|
+
{ value: 'Milisaniye', label: 'Hassasiyet', icon: 'mdi:clock-outline' },
|
|
90
|
+
{ value: 'Sınırsız', label: 'Dosya Sınırı YOK', icon: 'mdi:file-document' }
|
|
91
|
+
], columns: 3 },
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'İleri Alma vs Geciktirme: Pratik Kılavuz', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'İlk adım, kayma türünü doğru şekilde belirlemektir. Mantık şöyledir:' },
|
|
95
|
+
{ type: 'list', items: [
|
|
96
|
+
'<strong>Geciktirme (Pozitif Değer):</strong> Metnin sesten ÖNCE göründüğünü gördüğünüzde. Altyazılar ileridedir. Örnek: +2.0 saniye.',
|
|
97
|
+
'<strong>İleri Alma (Negatif Değer):</strong> Metnin sesten SONRA göründüğünü gördüğünüzde. Altyazılar geridedir. Örnek: -2.0 saniye.',
|
|
98
|
+
'<strong>Test Et ve Ayarla:</strong> Küçük artışlarla (0,5 sn) başlayın ve doğrulamak için önizlemeyi kullanın.'
|
|
99
|
+
], icon: 'mdi:arrow-right' },
|
|
100
|
+
|
|
101
|
+
{ type: 'card', title: 'Profesyonel Seviye Gizlilik', html: 'Dosyayı istemci tarafı JavaScript aracılığıyla işleyerek altyazı içeriğinizin bilgisayarınızdan asla ayrılmamasını garanti ediyoruz. Gizli materyallerle veya NDA (Gizlilik Sözleşmesi) altında çalışan çevirmenler ve profesyoneller için temel bir gerekliliktir.' },
|
|
102
|
+
|
|
103
|
+
{ type: 'title', text: 'Yaygın Kullanım Durumları', level: 3 },
|
|
104
|
+
{ type: 'comparative', items: [
|
|
105
|
+
{
|
|
106
|
+
title: 'Çevirmenler ve Altyazı Hazırlayanlar',
|
|
107
|
+
description: 'Birden fazla video sürümüyle çalıştıktan sonra çevirileri senkronize edin',
|
|
108
|
+
icon: 'mdi:translate',
|
|
109
|
+
points: [
|
|
110
|
+
'Farklı kaynaklardan gelen SRT dosyaları',
|
|
111
|
+
'İçerik versiyonlama (sinema vs akış)',
|
|
112
|
+
'Araç değiştirmeden hızlı teslimat'
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: 'İçerik Üreticileri',
|
|
117
|
+
description: 'Video farklı kare hızıyla işlendiğinde altyazıları kurtarın',
|
|
118
|
+
icon: 'mdi:video',
|
|
119
|
+
points: [
|
|
120
|
+
'Mevcut altyazıları yeniden kullanın',
|
|
121
|
+
'Format değişiklikleri (720p\'den 1080p\'ye)',
|
|
122
|
+
'1000\'den fazla satırın manuel zamanlamasını yapmaktan kaçının'
|
|
123
|
+
],
|
|
124
|
+
highlight: true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'Bireysel Kullanıcılar',
|
|
128
|
+
description: 'Tam olarak uymayan indirilmiş altyazıları düzeltin',
|
|
129
|
+
icon: 'mdi:account',
|
|
130
|
+
points: [
|
|
131
|
+
'Genel senkronizasyon dışı altyazılar',
|
|
132
|
+
'Farklı bölgelerdeki filmler (PAL vs NTSC)',
|
|
133
|
+
'Düzenlenmiş sürümlerle akış'
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
], columns: 3 },
|
|
137
|
+
|
|
138
|
+
{ type: 'title', text: 'Altyazılar Neden Senkorizasyondan Çıkar', level: 3 },
|
|
139
|
+
{ type: 'table', headers: ['Yaygın Sebep', 'Teknik Açıklama', 'Çözüm'], rows: [
|
|
140
|
+
['Kare Hızı Farkı', '23.976 fps vs 25 fps - birikmiş fark', 'Tek seferlik kayma ayarı (bu araç)'],
|
|
141
|
+
['Editoryal Değişiklikler', 'Reklam kesintileri veya çıkarılan/eklenen içerik', 'Manuel hesaplama + senkronizasyon'],
|
|
142
|
+
['Bölgesel Sürüm', 'PAL (25 fps Avrupa) vs NTSC (29.97 fps ABD)', 'Basit matematiksel kayma'],
|
|
143
|
+
['Çözünürlük Değişimi', 'Farklı işlem hızıyla yeniden kodlama', 'Orijinal dosyanın yeniden hesaplanması']
|
|
144
|
+
] },
|
|
145
|
+
|
|
146
|
+
{ type: 'diagnostic', variant: 'info', title: 'Dikkate Alınması Gereken Teknik Sınırlamalar', icon: 'mdi:information', badge: 'Önemli', html: 'Bu araç tüm dosyaya <strong>sabit</strong> bir kayma uygular. Kayma <strong>aşamalıysa</strong> (iyi başlar ancak yavaş yavaş senkronizasyondan çıkar), bu kalıcı bir kare hızı farkını gösterir. Bu durumda, orijinal dosyanın profesyonel düzenleme yazılımında yeniden işlenmesi gerekir.' },
|
|
147
|
+
|
|
148
|
+
{ type: 'proscons', items: [
|
|
149
|
+
{
|
|
150
|
+
pro: 'Ekstrem hız - büyük dosyaları milisaniyeler içinde işler',
|
|
151
|
+
con: 'Sadece sabit kaymayı ayarlar, aşamalı olanları değil'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
pro: 'Toplam gizlilik - içerik asla tarayıcınızdan ayrılmaz',
|
|
155
|
+
con: 'JavaScript etkinleştirilmiş modern tarayıcı gerektirir'
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
pro: 'Evrensel format - herhangi bir standart SRT ile çalışır',
|
|
159
|
+
con: 'Diğer formatları (ASS, VTT, SCC, vb.) desteklemez'
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
pro: 'Tamamen ücretsiz, reklam yok, takip yok',
|
|
163
|
+
con: 'Değişiklik geçmişi veya versiyonlama yok'
|
|
164
|
+
}
|
|
165
|
+
], proTitle: 'Avantajlar', conTitle: 'Sınırlamalar' },
|
|
166
|
+
|
|
167
|
+
{ type: 'glossary', items: [
|
|
168
|
+
{
|
|
169
|
+
term: 'SRT (SubRip)',
|
|
170
|
+
definition: 'En evrensel altyazı formatı: sıra numaraları, zamanlar (ss:dd:ss,mmm) ve metin içeren metin dosyası. Oynatıcılarda ve platformlarda de facto standarttır.'
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
term: 'Kayma (Offset)',
|
|
174
|
+
definition: 'Dosyadaki tüm zamanlara eklenen veya çıkarılan sabit bir süre. Pozitif saniye (gecikme) veya negatif (ilerleme) olabilir.'
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
term: 'Kare Hızı (fps)',
|
|
178
|
+
definition: 'Saniyedeki kare sayısı. 24p (sinema), 25p (PAL/Avrupa), 29.97p (NTSC/ABD), 60p (akıcı video). Farklar kümülatif kaymalara neden olur.'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
term: 'NTSC vs PAL',
|
|
182
|
+
definition: 'Bölgesel televizyon standartları: Avrupa\'da PAL (25 fps); ABD\'de NTSC (29.97 fps). Yaklaşık %4 hız farkı.'
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
term: 'Aşamalı Kayma',
|
|
186
|
+
definition: 'Senkronizasyonun doğru başladığı ancak yavaş yavaş senkronizasyon dışı kaldığı durum. Kare hızı farkını gösterir, yeniden işleme gerektirir.'
|
|
187
|
+
}
|
|
188
|
+
] },
|
|
189
|
+
|
|
190
|
+
{ type: 'message', title: 'Tam Kontrollü Profesyonel Düzenleme', ariaLabel: 'Senkronizasyon hakkında teknik bilgiler', html: 'Yaklaşımımız basit ama güçlüdür: anında uygulanan, %100 tarayıcınızda işlenen tek bir kayma. Bulut yok, depolama yok, takip yok. Sadece yükleyin, ayarlayın, indirin. İçeriğiniz üzerinde tam kontrol.' },
|
|
191
|
+
|
|
192
|
+
{ type: 'title', text: 'Sonuç: Kesintisiz Filmler', level: 3 },
|
|
193
|
+
{ type: 'paragraph', html: 'Mükemmel altyazı senkronizasyonu, kaliteli bir görsel-işitsel deneyim için gereklidir. Bu araçla, pahalı veya karmaşık yazılımlara ihtiyaç duymadan sinir bozucu bir deneyimi mükemmel bir film gecesine dönüştürürsünüz.' }
|
|
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: 'tr',
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
export const content: SubtitleSyncLocaleContent = {
|
|
230
|
+
slug,
|
|
231
|
+
title,
|
|
232
|
+
description,
|
|
233
|
+
ui,
|
|
234
|
+
seo,
|
|
235
|
+
faq,
|
|
236
|
+
faqTitle: 'Altyazı Senkronizasyonu Hakkında Sıkça Sorulan Sorular',
|
|
237
|
+
bibliography,
|
|
238
|
+
bibliographyTitle: 'Altyazı Formatları Hakkında Teknik Kaynaklar',
|
|
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 = 'synchronize-srt-subtitles-online-adjust-timing-free';
|
|
5
|
+
const title = '在线同步 SRT 字幕:免费调整时间轴';
|
|
6
|
+
const description = '在线调整 SRT 字幕提前或延迟的工具。轻松纠正时间偏差并立即下载同步后的文件。';
|
|
7
|
+
|
|
8
|
+
const ui: SubtitleSyncUI = {
|
|
9
|
+
dropTitle: "将您的 .SRT 文件拖到此处",
|
|
10
|
+
dropSubtitle: "或点击浏览文件",
|
|
11
|
+
adjustTitle: "调整时间",
|
|
12
|
+
offsetLabel: "偏移量(秒)",
|
|
13
|
+
offsetHelp: "使用负值表示提前(例如 -1.5),正值表示延迟。",
|
|
14
|
+
linesStat: "行数",
|
|
15
|
+
firstStat: "首条字幕",
|
|
16
|
+
lastStat: "末条字幕",
|
|
17
|
+
originalLabel: "原始时间",
|
|
18
|
+
resultLabel: "调整后时间",
|
|
19
|
+
downloadButton: "下载修正文件",
|
|
20
|
+
previewBadge: "预览",
|
|
21
|
+
unitSeconds: "秒"
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const faq: SubtitleSyncLocaleContent['faq'] = [
|
|
25
|
+
{
|
|
26
|
+
question: "如果音频比字幕快,我该如何同步?",
|
|
27
|
+
answer: "如果声音出现在文字之前,您需要延迟字幕。在计算器中输入正值(例如输入 2.0 可以延迟 2 秒)。",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
question: "此工具接受哪些文件格式?",
|
|
31
|
+
answer: "目前,该工具针对 .SRT (SubRip) 文件进行了优化,这是视频播放器和流媒体平台中最通用的标准格式。",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: "上传我的字幕文件安全吗?",
|
|
35
|
+
answer: "是的,因为所有处理都在您的设备上 100% 本地完成。您的文件不会发送到任何服务器;同步直接在您的浏览器中进行。",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: "我可以只同步文件的一部分吗?",
|
|
39
|
+
answer: "不可以,此工具对整个文件应用恒定的偏移量。如果偏移量是渐进式的(随时间变化),您可能需要更高级的编辑工具。",
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const howTo: SubtitleSyncLocaleContent['howTo'] = [
|
|
44
|
+
{
|
|
45
|
+
name: "上传您的 SRT 文件",
|
|
46
|
+
text: "将您想要纠正的字幕文件拖入上传区域。",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "确定偏移量",
|
|
50
|
+
text: "在您的播放器中测量字幕相对于音频延迟或提前了多少时间。",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "调整偏移量",
|
|
54
|
+
text: "在控制面板中输入正数(延迟)或负数(提前)的秒数。",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "下载文件",
|
|
58
|
+
text: "在预览中确认时间正确后,点击下载以获取新的 SRT 文件。",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const bibliography: SubtitleSyncLocaleContent['bibliography'] = [
|
|
63
|
+
{
|
|
64
|
+
name: "SubRip (SRT) 格式规范",
|
|
65
|
+
url: "https://matroska.org/technical/subtitles.html#srt-subtitles",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "MDN Web Docs - FileReader API",
|
|
69
|
+
url: "https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader",
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const seo: SubtitleSyncLocaleContent['seo'] = [
|
|
74
|
+
{
|
|
75
|
+
type: 'summary',
|
|
76
|
+
title: '专业字幕同步工具',
|
|
77
|
+
items: [
|
|
78
|
+
'即时纠正音频与字幕的时间偏差',
|
|
79
|
+
'支持标准 SRT (SubRip) 文件',
|
|
80
|
+
'100% 本地处理 - 隐私保障',
|
|
81
|
+
'无需安装,无需订阅,完全免费'
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{ type: 'title', text: '完美的 SRT 字幕同步方案', level: 2 },
|
|
85
|
+
{ type: 'paragraph', html: '对于观众来说,最令人沮丧的事莫过于看到的对白与声音对不上。字幕偏差通常由于视频版本差异引起:帧率变化、广告删减、片头差异或压缩方式改变。使用此工具,您可以在数秒内解决此问题。' },
|
|
86
|
+
|
|
87
|
+
{ type: 'stats', items: [
|
|
88
|
+
{ value: '100%', label: '本地处理', icon: 'mdi:shield' },
|
|
89
|
+
{ value: '毫秒级', label: '精确度', icon: 'mdi:clock-outline' },
|
|
90
|
+
{ value: '无限制', label: '无文件限制', icon: 'mdi:file-document' }
|
|
91
|
+
], columns: 3 },
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: '提前与延迟:实用指南', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: '第一步是正确识别偏差类型。逻辑如下:' },
|
|
95
|
+
{ type: 'list', items: [
|
|
96
|
+
'<strong>延迟(正值):</strong> 当您发现文字在声音出现之前就显示了(字幕过早)。例如:+2.0 秒。',
|
|
97
|
+
'<strong>提前(负值):</strong> 当您发现文字在声音出现之后才显示(字幕滞后)。例如:-2.0 秒。',
|
|
98
|
+
'<strong>测试与调整:</strong> 建议从较小增量(如 0.5s)开始,并使用预览功能进行验证。'
|
|
99
|
+
], icon: 'mdi:arrow-right' },
|
|
100
|
+
|
|
101
|
+
{ type: 'card', title: '专业级隐私保护', html: '通过客户端 JavaScript 处理文件,我们保证您的字幕内容永远不会离开您的电脑。对于处理机密材料或受 NDA(竞业/保密协议)约束的翻译人员和专业人士来说,这一点至关重要。' },
|
|
102
|
+
|
|
103
|
+
{ type: 'title', text: '常见应用场景', level: 3 },
|
|
104
|
+
{ type: 'comparative', items: [
|
|
105
|
+
{
|
|
106
|
+
title: '翻译人员与字幕组',
|
|
107
|
+
description: '在处理多个视频版本后快速同步翻译内容',
|
|
108
|
+
icon: 'mdi:translate',
|
|
109
|
+
points: [
|
|
110
|
+
'来自不同来源的 SRT 文件',
|
|
111
|
+
'内容版本管理(剧场版 vs 流媒体版)',
|
|
112
|
+
'无需切换工具即可快速交付'
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: '内容创作者',
|
|
117
|
+
description: '当视频以不同帧率处理时恢复字幕同步',
|
|
118
|
+
icon: 'mdi:video',
|
|
119
|
+
points: [
|
|
120
|
+
'复用现有字幕',
|
|
121
|
+
'格式更改(从 720p 到 1080p)',
|
|
122
|
+
'避免对 1000 多行内容进行手动调时'
|
|
123
|
+
],
|
|
124
|
+
highlight: true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: '普通用户',
|
|
128
|
+
description: '修正下载的字幕与视频不匹配的问题',
|
|
129
|
+
icon: 'mdi:account',
|
|
130
|
+
points: [
|
|
131
|
+
'通用的下行同步问题',
|
|
132
|
+
'不同地区的电影版本(PAL vs NTSC)',
|
|
133
|
+
'针对剪辑版本进行微调'
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
], columns: 3 },
|
|
137
|
+
|
|
138
|
+
{ type: 'title', text: '为什么字幕会不同步', level: 3 },
|
|
139
|
+
{ type: 'table', headers: ['常见原因', '技术描述', '解决方案'], rows: [
|
|
140
|
+
['帧率差异', '23.976 fps 对比 25 fps - 累积的偏差', '应用单个偏移量调整(本工具)'],
|
|
141
|
+
['内容剪辑', '广告剪减或删除了额外内容', '手动计算 + 分段同步'],
|
|
142
|
+
['地区版本', 'PAL(欧洲 25 fps)对比 NTSC(美国 29.97 fps)', '简单的数学偏移计算'],
|
|
143
|
+
['分辨率改变', '以不同处理速度重新编码', '重新计算原始文件时间轴']
|
|
144
|
+
] },
|
|
145
|
+
|
|
146
|
+
{ type: 'diagnostic', variant: 'info', title: '需要注意的技术限制', icon: 'mdi:information', badge: '重要', html: '此工具对整个文件应用<strong>恒定</strong>的偏移。如果偏差是<strong>点进式</strong>的(开始是同步的,但后来逐渐不对齐),这通常意味着帧率不匹配。在这种情况下,原始文件需要在专业的剪辑软件中重新处理。' },
|
|
147
|
+
|
|
148
|
+
{ type: 'proscons', items: [
|
|
149
|
+
{
|
|
150
|
+
pro: '极速体验 - 毫秒内处理大型文件',
|
|
151
|
+
con: '仅调整固定偏差,无法处理渐进式偏差'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
pro: '极致隐私 - 内容永不离开浏览器',
|
|
155
|
+
con: '需要开启 JavaScript 的现代浏览器'
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
pro: '通用格式 - 支持任何标准 SRT 文件',
|
|
159
|
+
con: '不支持其他格式(ASS, VTT, SCC 等)'
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
pro: '完全免费,无广告,无追踪',
|
|
163
|
+
con: '无更改历史记录或版本管理'
|
|
164
|
+
}
|
|
165
|
+
], proTitle: '优势', conTitle: '限制' },
|
|
166
|
+
|
|
167
|
+
{ type: 'glossary', items: [
|
|
168
|
+
{
|
|
169
|
+
term: 'SRT (SubRip)',
|
|
170
|
+
definition: '最通用的字幕格式:包含序号、时间码 (hh:mm:ss,mmm) 和文本的纯文本文件。播放器和平台的通用标准。'
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
term: '偏移量 (Offset)',
|
|
174
|
+
definition: '对文件中所有时间码增加或减少的固定时长。可以是正数(延迟)或负数(提前)。'
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
term: '帧率 (fps)',
|
|
178
|
+
definition: '每秒帧数。常见的有 24p、PAL 25p、NTSC 29.97p 等。帧率不同会导致累积的时间轴偏差。'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
term: 'NTSC 与 PAL',
|
|
182
|
+
definition: '地区电视标准:欧洲为 PAL (25 fps),美国为 NTSC (29.97 fps)。两者间有约 4% 的速度差异。'
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
term: '渐进式偏差 (Progressive Offset)',
|
|
186
|
+
definition: '指同步开始正确但随后逐渐偏离的现象。这通常意味着帧率不匹配,需要重新处理时间轴。'
|
|
187
|
+
}
|
|
188
|
+
] },
|
|
189
|
+
|
|
190
|
+
{ type: 'message', title: '全权掌握的专业编辑', ariaLabel: '关于同步的技术信息', html: '我们的方案简单而强大:应用即时处理的单偏移量,100% 在您的浏览器内完成。无云端,无存储,无追踪。只需上传、调整、下载。完全掌控您的内容。' },
|
|
191
|
+
|
|
192
|
+
{ type: 'title', text: '总结:让观影无障碍', level: 3 },
|
|
193
|
+
{ type: 'paragraph', html: '完美的字幕同步是高质量视听体验的基础。使用此工具,您可以将原本沮丧的体验转变为完美的电影之夜,无需昂贵或复杂的软件。' }
|
|
194
|
+
];
|
|
195
|
+
|
|
196
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
197
|
+
'@context': 'https://schema.org',
|
|
198
|
+
'@type': 'FAQPage',
|
|
199
|
+
mainEntity: faq.map((item) => ({
|
|
200
|
+
'@type': 'Question',
|
|
201
|
+
name: item.question,
|
|
202
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
203
|
+
})),
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
const howToSchema: WithContext<HowTo> = {
|
|
207
|
+
'@context': 'https://schema.org',
|
|
208
|
+
'@type': 'HowTo',
|
|
209
|
+
name: title,
|
|
210
|
+
description,
|
|
211
|
+
step: howTo.map((step) => ({
|
|
212
|
+
'@type': 'HowToStep',
|
|
213
|
+
name: step.name,
|
|
214
|
+
text: step.text,
|
|
215
|
+
})),
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
219
|
+
'@context': 'https://schema.org',
|
|
220
|
+
'@type': 'SoftwareApplication',
|
|
221
|
+
name: title,
|
|
222
|
+
description,
|
|
223
|
+
applicationCategory: 'UtilitiesApplication',
|
|
224
|
+
operatingSystem: 'Web',
|
|
225
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
226
|
+
inLanguage: 'zh',
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
export const content: SubtitleSyncLocaleContent = {
|
|
230
|
+
slug,
|
|
231
|
+
title,
|
|
232
|
+
description,
|
|
233
|
+
ui,
|
|
234
|
+
seo,
|
|
235
|
+
faq,
|
|
236
|
+
faqTitle: '关于字幕同步的常见问题',
|
|
237
|
+
bibliography,
|
|
238
|
+
bibliographyTitle: '字幕格式技术资源',
|
|
239
|
+
howTo,
|
|
240
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
241
|
+
};
|
|
@@ -22,10 +22,6 @@ export interface SubtitleSyncUI {
|
|
|
22
22
|
|
|
23
23
|
export type SubtitleSyncLocaleContent = ToolLocaleContent<SubtitleSyncUI>;
|
|
24
24
|
|
|
25
|
-
import { content as es } from './i18n/es';
|
|
26
|
-
import { content as en } from './i18n/en';
|
|
27
|
-
import { content as fr } from './i18n/fr';
|
|
28
|
-
|
|
29
25
|
export const subtitleSync: AudiovisualToolEntry<SubtitleSyncUI> = {
|
|
30
26
|
id: 'sincronizar-subtitulos',
|
|
31
27
|
icons: {
|
|
@@ -33,9 +29,21 @@ export const subtitleSync: AudiovisualToolEntry<SubtitleSyncUI> = {
|
|
|
33
29
|
fg: 'mdi:clock-time-four-outline',
|
|
34
30
|
},
|
|
35
31
|
i18n: {
|
|
36
|
-
es: async () => es as unknown as SubtitleSyncLocaleContent,
|
|
37
|
-
en: async () => en as unknown as SubtitleSyncLocaleContent,
|
|
38
|
-
fr: async () => fr as unknown as SubtitleSyncLocaleContent,
|
|
32
|
+
es: async () => (await import('./i18n/es')).content as unknown as SubtitleSyncLocaleContent,
|
|
33
|
+
en: async () => (await import('./i18n/en')).content as unknown as SubtitleSyncLocaleContent,
|
|
34
|
+
fr: async () => (await import('./i18n/fr')).content as unknown as SubtitleSyncLocaleContent,
|
|
35
|
+
de: async () => (await import('./i18n/de')).content as unknown as SubtitleSyncLocaleContent,
|
|
36
|
+
it: async () => (await import('./i18n/it')).content as unknown as SubtitleSyncLocaleContent,
|
|
37
|
+
pt: async () => (await import('./i18n/pt')).content as unknown as SubtitleSyncLocaleContent,
|
|
38
|
+
id: async () => (await import('./i18n/id')).content as unknown as SubtitleSyncLocaleContent,
|
|
39
|
+
ja: async () => (await import('./i18n/ja')).content as unknown as SubtitleSyncLocaleContent,
|
|
40
|
+
ko: async () => (await import('./i18n/ko')).content as unknown as SubtitleSyncLocaleContent,
|
|
41
|
+
nl: async () => (await import('./i18n/nl')).content as unknown as SubtitleSyncLocaleContent,
|
|
42
|
+
pl: async () => (await import('./i18n/pl')).content as unknown as SubtitleSyncLocaleContent,
|
|
43
|
+
ru: async () => (await import('./i18n/ru')).content as unknown as SubtitleSyncLocaleContent,
|
|
44
|
+
sv: async () => (await import('./i18n/sv')).content as unknown as SubtitleSyncLocaleContent,
|
|
45
|
+
tr: async () => (await import('./i18n/tr')).content as unknown as SubtitleSyncLocaleContent,
|
|
46
|
+
zh: async () => (await import('./i18n/zh')).content as unknown as SubtitleSyncLocaleContent,
|
|
39
47
|
},
|
|
40
48
|
};
|
|
41
49
|
|