Projekt Subtitld
Własny plik Subtitld: pakiet ZIP, na którego początku stoi dokument USF z napisami, ich tłumaczeniami, mówcami i dubbingami, a dalej manifest wszystkiego, co jest w środku, obraz miejsca, w którym skończyłeś, i, jeśli zechcesz, wideo oraz jego dźwięk. Jeden plik do przeniesienia, zarchiwizowania lub przekazania, a każdą jego część da się odczytać standardowymi narzędziami.
W skrócie
| Rozszerzenie | .usfx |
|---|---|
| Typ mediów | application/x-usfx, rodzaj application/zip. W systemach Apple org.subtitld.usfx. |
| Specyfikacja | Ta strona. Pakiet to ZIP firmy PKWARE (APPNOTE.TXT); dokument to USF 1.0 z elementami Subtitld. |
| Pakiet | ZIP, składniki skompresowane metodą Deflate (RFC 1951) i sprawdzane CRC-32; Zip64 dla plików powyżej 2 GiB |
| Pierwszy składnik | subtitles.usf: jego nazwa stoi na bajcie 30 każdego projektu zapisanego przez Subtitld |
| Precyzja czasu | Napisy: milisekundy. Dubbingi: dokładne sekundy, z tyloma miejscami po przecinku, ile trzeba. |
| Kodowanie tekstu | UTF-8, w XML i w nazwach składników |
| Stylizacja | Ta z USF: kursywa, pogrubienie, podkreślenie, przekreślenie, kolor i dziewięć miejsc |
| Mówcy | Każdy z nazwą, kolorem, zdjęciem i głosem |
| Języki | Oryginał i każde tłumaczenie, każde w osobnym bloku, według kodu ISO 639-2 i nazwy |
| Media w środku | Dubbingi i zdjęcia mówców; wideo, jego dźwięk, rozdzielone głosy i tło oraz przebieg fali z osi czasu, jeśli zechcesz |
Budowa pliku
Plik .usfx to ZIP. Otworzy go każdy program do archiwów, po zmianie nazwy na .zip, jeśli program się upiera.
Tears of Steel.usfx subtitles.usf manifest.xml thumbnail.png assets/speakers/Celia.png assets/dubs/77a03e27.wav assets/video/Tears_of_Steel.mkv assets/waveform.npy assets/audio/vocals.flac
- 1 · Dokument
Sam projekt, w USF: każdy napis, tłumaczenie, mówca i dubbing. Zawsze obecny, zawsze pierwszy.
- 2 · Manifest
Co utworzyło plik, gdzie było wideo, jak zmiksowano dźwięk, oraz typ mediów każdego innego składnika.
- 3 · Obraz
To, co menedżery plików pokazują z projektu: klatka, na której skończyłeś, jej napis i oś czasu w tym miejscu.
- 4 · Zasoby
Dźwięk każdego dubbingu i twarze mówców; wideo, jego dźwięk i przebieg fali tylko na życzenie.
Dokument mówi, co się dzieje; zasoby są tym, co odtwarza. Dubbing w subtitles.usf wskazuje swój klip ścieżką w pakiecie, assets/dubs/77a03e27.wav, więc pakiet można przenieść do innego folderu, na inny dysk czy komputer, a nadal będzie kompletny.
Składniki
| Ścieżka | Co zawiera | Kompresja | Zapisywany |
|---|---|---|---|
subtitles.usf |
Dokument: napisy, tłumaczenia, mówcy, głosy, dubbingi | Deflate | Zawsze, jako pierwszy |
manifest.xml |
Manifest | Deflate | Zawsze, jako drugi |
thumbnail.png |
Karta PNG projektu, 512 × 384 | Bez kompresji | Gdy jest z czego zrobić obraz |
assets/speakers/<speaker>.png |
Zdjęcie mówcy, najwyżej 256 pikseli na bok | Deflate | Chyba że to wyłączysz |
assets/dubs/<uid>.<ext> |
Dźwięk ujęcia dubbingu, nazwany jego identyfikatorem | Deflate | Zawsze, dla każdego ujęcia z dźwiękiem |
assets/dubs/<uid>__<n>__<file> |
Podzielony lub rozciągnięty fragment ujęcia oraz nietknięte źródło, z którego go rozciągnięto | Deflate | Gdy ujęcie podzielono lub rozciągnięto |
assets/video/<file> |
Wideo | Deflate | Na życzenie |
assets/waveform.npy |
Szczyty przebiegu fali z osi czasu, tablica NumPy | Deflate | Na życzenie |
assets/audio/original.flac |
Dźwięk wideo | Deflate | Na życzenie |
assets/audio/vocals.flac, background.flac |
Dźwięk rozdzielony na głosy i resztę | Deflate | Na życzenie |
Nazwy w assets/ składają się z liter, cyfr, -, _ i .; wszystko inne staje się _, więc Tears of Steel.mkv zostaje zapisany jako Tears_of_Steel.mkv. Litery spoza ASCII są zachowywane, a nazwa zapisana w UTF-8 i tak oznaczona (bit 11 nagłówka ZIP), jak wymaga APPNOTE.
Dlaczego obraz jest przechowywany bez kompresji. PNG jest już skompresowany; Deflate kosztowałby tylko czas. Bez kompresji jego bajty leżą w pliku dokładnie jako PNG, więc generator miniatur odczytuje je bez rozpakowywania czegokolwiek.
Pierwsze bajty
Każdy projekt zaczyna się tak samo: lokalny nagłówek pliku ZIP, a potem nazwa pierwszego składnika.
50 4B 03 04 14 00 00 00 08 00 4E 70 51 5D 64 CE 1E 0B 6F 3B 00 00 7F E2 00 00 0D 00 00 00 73 75 62 74 69 74 6C 65 73 2E 75 73 66
- 1 · Sygnatura
PK\3\4, bajty od 0 do 3: tu zaczyna się składnik ZIP. - 2 · Nagłówek
Wersja 2.0 potrzebna do rozpakowania; bez flag; metoda 8, Deflate; czas i data w stylu MS-DOS (tutaj 17 października 2026, 14:02:28); CRC-32; rozmiar po kompresji i bez niej (15 215 i 57 983 bajty).
- 3 · Długość nazwy
13, i bez pola dodatkowego.
- 4 · Nazwa
subtitles.usf, od bajtu 30.
Nazwa nigdy nie jest kompresowana, nawet gdy składnik jest. Dzięki temu działa jak sygnatura: ZIP, którego nazwa na bajcie 30 to subtitles.usf, jest projektem Subtitld. Tracker w Haiku odróżnia projekty od innych archiwów dokładnie tą regułą, 0.60 ("PK\003\004") [30] ("subtitles.usf" | "manifest.xml"), umieszczoną wyżej niż zwykła reguła ZIP. ODF i EPUB robią to samo z pierwszym składnikiem o nazwie mimetype.
Wideo może być większe niż pierwotny limit ZIP wynoszący 4 GiB. Od 2 GiB Subtitld zapisuje pola dodatkowe i rekordy końcowe Zip64 (APPNOTE, sekcja 4.5), tak jak powyżej 65 535 składników; Subtitld, jego moduł miniatur dla Windows i każdy współczesny unzip je odczytują.
Manifest
<?xml version="1.0" encoding="UTF-8"?>
<manifest version="1.0">
<format>USFX</format>
<generator>Subtitld</generator>
<source path="/home/ana/Videos/Tears of Steel.mkv"
basename="Tears of Steel.mkv"/>
<voicemix volume="0.5000"/>
<entry path="subtitles.usf" type="application/x-usf+xml"/>
<entry path="thumbnail.png" type="image/png"/>
<entry path="assets/speakers/Celia.png" type="image/png"/>
<entry path="assets/dubs/77a03e27.wav" type="audio/wav"/>
</manifest>
| Element | Co zawiera |
|---|---|
<manifest version> |
Wersja manifestu, 1.0 |
<format>, <generator> |
USFX i to, co zapisało plik: Subtitld |
<source path basename> |
Pełna ścieżka wideo w chwili zapisu projektu oraz sama nazwa pliku |
<voicemix volume> |
Położenie suwaka Muzyka/Głos: 0 tylko tło, 0.5 dźwięk bez zmian, 1 tylko głosy, przy czym dubbingi cichną razem z tłem |
<entry path type> |
Po jednym dla każdego składnika oprócz samego manifestu, każdy z typem mediów |
Typy to application/x-usf+xml, image/png, audio/wav, audio/flac, audio/mpeg, video/mp4, video/x-matroska, video/quicktime, video/webm, video/ogg oraz application/octet-stream dla przebiegu fali i wszystkiego innego.
Ścieżka wideo podróżuje z plikiem. <source path> to miejsce, w którym wideo leżało na komputerze, który zapisał projekt, razem z folderami i nazwą użytkownika. Pamiętaj o tym, zanim udostępnisz projekt. Gdy ścieżka donikąd nie prowadzi, Subtitld szuka wideo po nazwie w folderze projektu.
Dokument
subtitles.usf to plik Universal Subtitle Format, w UTF-8, taki, jaki Subtitld zapisuje samodzielnie, z tym, czego potrzebuje projekt, dodanym w stylu samego USF: elementy i atrybuty tam, gdzie USF ich nie ma. Czytnik USF, który pomija to, czego nie zna, odczyta napisy.
<USFSubtitles version="1.0"
xmlns:subtitldcc="https://subtitld.cc/ns/usf/1">
<metadata>
<title>Tears of Steel</title>
<author><name>Subtitld</name></author>
<language code="eng">English</language>
<subtitldcc:origin share-id="Xk3pQ9aZ2bT" version="3"/>
</metadata>
<styles>
<style name="Celia">
<fontstyle color="#e5484d"/>
<dubbing engine="edge-tts" voice="en-GB-SoniaNeural"
rate="0" pitch="0" fit_to_subtitle="true"/>
</style>
</styles>
<subtitles>
<language code="eng">English</language>
<subtitle start="00:00:23.000" stop="00:00:24.500">
<text speaker="Celia" style="Celia">You're a jerk, Thom.</text>
<dubbing uid="77a03e27" engine="edge-tts"
voice="en-GB-SoniaNeural" rate="0" pitch="0"
path="assets/dubs/77a03e27.wav"
start="23.0" end="24.5"/>
</subtitle>
</subtitles>
<subtitles>
<language code="por">Portuguese (Brazil)</language>
<subtitle start="00:00:23.000" stop="00:00:24.500">
<text speaker="Celia" style="Celia">Você é um idiota, Thom.</text>
</subtitle>
</subtitles>
</USFSubtitles>
Co Subtitld dodaje do USF
| Gdzie | Element lub atrybut | Co zawiera |
|---|---|---|
<metadata> |
<subtitldcc:origin share-id version> |
Napisy z subtitld.cc, z których pochodzi projekt, aby zmiany można było opublikować jako ich następną wersję. We własnej przestrzeni nazw, https://subtitld.cc/ns/usf/1, zapisywany tylko wtedy, gdy istnieje. |
<styles> |
<style name> |
Po jednym dla każdego mówcy, nazwany jego imieniem. Bez stylu Default, który w odtwarzaczu zmieniłby styl każdego napisu. |
<style> |
<fontstyle color> |
Kolor mówcy, #RRGGBB |
<style> |
<dubbing engine voice rate pitch fit_to_subtitle> |
Głos mówcy: silnik, głos, tempo i wysokość od −100 do 100 oraz to, czy dubbingi są dopasowywane do długości napisu |
<text> |
speaker, style |
Kto to mówi i jego styl |
<text> |
alignment |
Jedno z dziewięciu miejsc USF, od TopLeft do BottomRight; brak dla środka dołu |
<subtitle> |
<dubbing> |
Ujęcie dubbingu napisu, każde osobnym elementem |
<dubbing> |
uid engine voice rate pitch |
Identyfikator ujęcia i głos, którym je wykonano |
<dubbing> |
path, raw_path |
Jego dźwięk w pakiecie oraz źródło, z którego zrobiono rozciągnięte ujęcie |
<dubbing> |
start, end |
Gdzie gra na osi czasu, w sekundach |
<dubbing> |
<subclip type path raw_path start end offset rate> |
Fragmenty ujęcia, które podzielono lub rozciągnięto |
W zwykłym .usf zdjęcia mówców i dźwięk dubbingów mogą podróżować wewnątrz XML, jako base64 w <avatar> i <data>. .usfx nigdy tego nie robi: są osobnymi składnikami, o ćwierć mniejszymi niż w base64, i odczytywanymi bez parsowania XML.
Czas
start i stop napisu to czasy USF, zaokrąglone do najbliższej milisekundy. Czasy dubbingu to zwykłe sekundy zapisane w całości, 18.01579117916244: najkrótsza liczba dziesiętna, która odczytuje się z powrotem jako ta sama liczba 64-bitowa, więc klip umieszczony przeciąganiem wraca dokładnie tam, gdzie był.
Starsze wersje Subtitld zapisywały czasy o milisekundę za wcześnie, a start w zerze jako 23:59:59.999. Subtitld odczytuje tę wartość jako zero, a milisekundę zostawia, jak jest.
Ujęcia i podklipy
Napis może mieć kilka ujęć. Pierwszy <dubbing> to ten, który gra; pozostałe są alternatywami, cichymi, dopóki któregoś nie wybierzesz, a wtedy przechodzi na początek.
Ujęcie podzielone lub rozciągnięte przechowuje listę elementów <subclip>, ułożonych jak klipy w edytorze audio:
| Atrybut | Znaczenie |
|---|---|
start, end |
Część pliku źródłowego, która gra, w sekundach od początku pliku |
offset |
Gdzie ta część się zaczyna, w sekundach od start ujęcia |
rate |
Tempo, do którego ją rozciągnięto: 20 to 120 % |
path, raw_path |
Dźwięk, który gra, oraz nietknięty dźwięk, z którego go rozciągnięto |
Podklip gra od start ujęcia plus jego offset, przez end minus start sekund. Przerwy to cisza; nakładające się części są miksowane. Źródła nigdy się nie zmieniają, więc każdy podział i rozciągnięcie można cofnąć, a rozciągnięcie zawsze powstaje na nowo z raw_path, nigdy z rozciągnięcia rozciągnięcia.
Tłumaczenia
Każdy język ma własny blok <subtitles>, oznaczony kodem ISO 639-2 i, w elemencie, nazwą języka, która odróżnia portugalski brazylijski od europejskiego. Każdy blok zawiera każdy napis w tych samych czasach; tylko pierwszy zawiera dubbingi. Subtitld dopasowuje tłumaczenie do napisu po czasie początku albo do tego, z którym najbardziej się nakłada, więc bloki zapisane przez inne narzędzia nie muszą się idealnie pokrywać.
Otwieranie projektu
Duże projekty otwierają się od razu: Subtitld najpierw czyta to, czego potrzebuje edytor, a resztę w trakcie pracy.
subtitles.usf, odczytany dla napisów, mówców i głosówmanifest.xml, dla wideo i miksuassets/speakers/, twarze, dekodowane poza głównym wątkiem- Dołączone wideo, rozpakowane raz
- Dubbingi, najpierw, abyś mógł je odtworzyć
- Potem przebieg fali
- Rozdzielony dźwięk, na końcu
Każdy dubbing na osi czasu jest zakreskowany, dopóki nie dotrze jego dźwięk, a potem gra.
Składniki są rozpakowywane do własnych folderów Subtitld, nigdy obok projektu: dokument, twarze i dubbingi do folderu pamięci podręcznej nazwanego skrótem MD5 ścieżki projektu. To, co dociera w trakcie pracy, spływa w porcjach po 1 MiB do pliku tymczasowego, który po ukończeniu zostaje przemianowany na właściwe miejsce, więc awaria w połowie nie zostawia niczego zapisanego do połowy. Przy następnym otwarciu tego samego projektu plik, który już istnieje, jest używany ponownie tylko wtedy, gdy ma dokładnie rozmiar składnika; w przeciwnym razie zostaje rozpakowany na nowo.
Wideo jest szukane w tej kolejności:
- wideo w pakiecie, w
assets/video/; - ścieżka z
<source path>, jeśli nadal istnieje; - plik o nazwie z
<source basename>, w folderze projektu; - w przeciwnym razie Subtitld o nie prosi.
Plik, który nie jest ZIP-em, jest ucięty lub nie przechodzi kontroli CRC, niczego nie otwiera: Subtitld to zgłasza i usuwa go z listy ostatnich. Wcześniejsze projekty też się otwierają: bez manifestu albo z USF pod inną nazwą w katalogu głównym ZIP.
Zapisywanie projektu
Zapisz nigdy nie naraża projektu, który masz.
- Migawka. Projekt jest kopiowany w stanie z chwili zapisu, więc możesz dalej edytować, gdy jest zapisywany. Zapisy, autozapisy i kopie zapasowe czekają na swoją kolej: naraz pisze tylko jeden.
- Nowy plik. Pakiet jest zapisywany do
<project>.usfx.tmpobok projektu. - Niczego nie brakuje. Dubbing, którego dźwięku nie ma jeszcze w pamięci podręcznej, bo wciąż spływa lub został usunięty, jest kopiowany z pliku, który ma zostać zastąpiony. Projekt zapisany bez wideo zachowuje obraz, który miał.
- Sprawdzony. Nowy plik jest ponownie otwierany, a CRC-32 każdego składnika weryfikowane.
- Podmieniony. Dopiero wtedy zastępuje projekt, jedną zmianą nazwy (
os.replace): pod nazwą projektu nigdy nie leży pół projektu.
Jeśli któryś krok się nie powiedzie, plik tymczasowy zostaje usunięty, projekt na dysku jest tym, który miałeś, a twoje zmiany są nadal otwarte w Subtitld. Dopóki dubbingi projektu wciąż spływają, Zapisz na nie czeka.
Co trafia do środka
Ustawienia globalne, a potem USFX, decydują, co jeszcze zawiera projekt, dla każdego projektu, który zapisujesz:
- Zdjęcia mówcówTwarze mówców. Włączone.
- Pamięć podręczna przebiegu faliPrzebieg fali, aby projekt otwierał się na innym komputerze bez ponownego obliczania. Wyłączone.
- Oryginalna ścieżka dźwiękowaDźwięk wideo, jako FLAC. Wyłączone.
- Przetworzone audio (wokal + tło)Dźwięk rozdzielony na głosy i resztę, jako FLAC, aby nie trzeba było ponownie uruchamiać separacji. Wyłączone.
- Oryginalny plik wideoSamo wideo: jeden plik ze wszystkim, tak duży jak wideo i więcej. Wyłączone.
Każdy trafia do środka, gdy Subtitld ma co włożyć: rozdzielony dźwięk na przykład dopiero po przeprowadzeniu separacji. Napisy, tłumaczenia, mówcy, głosy i każdy dubbing są w środku zawsze. Deflate zmniejsza WAV dubbingu o mniej więcej jedną szóstą; wideo i FLAC prawie się nie kurczą.
Autozapis i kopie zapasowe
- Automatycznie zapisuj plik projektuZapisuje sam twój
.usfx, jak Zapisz, w ten sam bezpieczny sposób. Dla projektu zapisanego jako USFX. - Automatyczne kopie zapasowePełny
.usfxw folderze kopii zapasowych Subtitld, z dala od twojego pliku, o nazwie<project>_<YYYYMMDDHHMMSS>.usfx, gdy są zmiany do zachowania. Powyżej Zachowuj najwyżej, domyślnie 20, najstarsze są usuwane.
W menedżerach plików
Miniatura to karta w stylu Subtitld: klatka wideo, na której pozostawiono projekt, napis na niej, a pod nią dwanaście sekund osi czasu wokół głowicy odtwarzania, przebieg fali i napisy w kolorach mówców. 4:3 w rozmiarze 512 × 384, więc lepiej wypełnia kwadratowe pole menedżera plików niż szeroka klatka. Bez wideo zamiast klatki pojawia się znak Subtitld.
| System | Typ | Co daje |
|---|---|---|
| Linux | application/x-usfx w shared-mime-info, rodzaj application/zip, rozpoznawany po *.usfx |
Własną ikonę; z pakietem AUR miniatury z subtitld-thumbnailer, generatora miniatur freedesktop.org |
| Windows | Typ pliku w instalatorze i pakiecie MSIX | Ikonę; dostawcę miniatur powłoki (UsfxThumbnail.dll, IThumbnailProvider), który sam czyta katalog centralny ZIP, łącznie z Zip64, i dekoduje PNG przez WIC w rozmiarze, o jaki prosi Eksplorator |
| macOS | Typ org.subtitld.usfx, zgodny z public.zip-archive |
Własną ikonę |
| Haiku | application/x-usfx, z powyższą regułą rozpoznawania |
Ikonę oraz Trackera odróżniającego projekt od ZIP |
Po dwukrotnym kliknięciu projekt otwiera się w Subtitld we wszystkich czterech. Oba generatory miniatur czytają tylko thumbnail.png, odrzucają większy niż 8 MiB i nie przyjmują niczego, co nie zaczyna się od sygnatury PNG, 89 50 4E 47 0D 0A 1A 0A. Windowsowy przyjmuje go tylko bez kompresji, tak jak zapisuje go Subtitld. Linuksowy korzysta wyłącznie ze standardowej biblioteki Pythona, bo menedżery plików uruchamiają generatory miniatur w piaskownicy i po wiele naraz.
Samodzielne czytanie .usfx
Nic w projekcie nie należy wyłącznie do Subtitld. Aby zajrzeć do środka:
unzip -l "Tears of Steel.usfx"
unzip -p "Tears of Steel.usfx" manifest.xml
Aby odczytać jego napisy, w każdym języku, standardową biblioteką Pythona:
import zipfile
import xml.etree.ElementTree as ET
def text_of(element):
"""A <text>'s words, <br/> as a line break."""
parts = [element.text or '']
for child in element:
parts.append('\n' if child.tag == 'br' else text_of(child))
parts.append(child.tail or '')
return ''.join(parts)
with zipfile.ZipFile('Tears of Steel.usfx') as usfx:
usf = ET.fromstring(usfx.read('subtitles.usf'))
for block in usf.iter('subtitles'):
language = block.find('language')
if language is not None:
print('#', language.get('code'), language.text)
for subtitle in block.iter('subtitle'):
text = subtitle.find('text')
print(subtitle.get('start'), subtitle.get('stop'),
text.get('speaker'), text_of(text))
Projekt od kogoś innego parsuj za pomocą defusedxml zamiast xml.etree, jak każdy XML, którego nie napisałeś sam.
Tworzenie własnego
Najmniejszy projekt, jaki otworzy Subtitld, to ZIP zawierający subtitles.usf. Bez manifestu Subtitld poprosi o wideo. Aby zrobić taki, który rozpoznają też menedżery plików, postępuj tak jak Subtitld:
- najpierw
subtitles.usf, potemmanifest.xml; - każdy składnik skompresowany metodą Deflate, z wyjątkiem
thumbnail.png, przechowywanego bez kompresji; - dubbingi w
assets/dubs/, wskazywane w dokumencie ścieżką w pakiecie; - wszędzie UTF-8.
Subtitld zachowuje to, co zna. Zapis tworzy składniki opisane na tej stronie oraz dokument zbudowany z tego, co Subtitld zrozumiał ze starego. Plik dodany do pakietu przez inne narzędzie albo własny element w USF znika, gdy tylko Subtitld zapisze projekt. Trzymaj własne dane obok.
Porównanie
USFX jest zbudowany tak jak pakiety dokumentów pakietów biurowych i e-booków: ZIP, główny dokument w XML, spis zawartości, media obok.
ODF (.odt) |
EPUB | Office Open XML (.docx) |
USFX | |
|---|---|---|---|---|
| Standard | OASIS ODF 1.3, część 2 | W3C EPUB 3.3, jego OCF | ECMA-376 część 2, OPC | Ta strona |
| Jak narzędzie go rozpoznaje | Pierwszy składnik mimetype, bez kompresji |
Pierwszy składnik mimetype, bez kompresji: application/epub+zip |
[Content_Types].xml |
Nazwa pierwszego składnika, subtitles.usf, na bajcie 30 |
| Spis zawartości | META-INF/manifest.xml, typ dla każdego pliku |
META-INF/container.xml, potem dokument pakietu |
[Content_Types].xml i _rels/ |
manifest.xml, typ dla każdego składnika |
| Główny dokument | content.xml |
Dokument pakietu i jego spine | word/document.xml |
subtitles.usf |
| Media | Pictures/ |
W dowolnym miejscu pakietu | word/media/ |
assets/ |
| Podgląd | Thumbnails/thumbnail.png |
Obraz okładki | Opcjonalna część z miniaturą | thumbnail.png, bez kompresji |
Główny dokument jest samodzielnym otwartym formatem: wyjmij subtitles.usf z .usfx, a otrzymasz plik USF, format z publiczną specyfikacją od 2002 roku.
Ciekawostki
Bajt, od którego zaczyna się nazwa pierwszego składnika każdego projektu, i sposób, w jaki Haiku odróżnia projekt Subtitld od każdego innego ZIP.
Rozmiar obrazu projektu: 4:3, bo menedżery plików pokazują pliki w kwadratach.
Wydanie, które dało .usfx własną ikonę w Linuksie, Windows, macOS i Haiku oraz obraz w Eksploratorze Windows i linuksowych menedżerach plików.
Powiązane formaty
Otwórz wideo w Subtitld, zrób do niego napisy i zapisz: to jest .usfx.