Ḿüļţîḿöđàļ çöñţéñţ: îḿþļéḿéñţàţîöñ ḿàþ
Ţàçţîçàļ ñöţéš ƒöŕ ţĥé ḿüļţîḿöđàļ šüŕƒàçé đéšçŕîƃéđ îñ
Ḿ-03: éẋţŕàçţîöñ,
ŕéƒîñéḿéñţ, àñđ ṽîšîöñ. Ţĥé çöñţéñţ-ḿöđéļ àñçĥöŕš àŕé
Ƒ-02: à ƃļöçķ çàŕŕîéš à
ţéḿþöŕàļ TimingAnnotation, à šþàţîàļ GeometryAnnotation, àñđ à ŕéçöĝñîţîöñ
Origin (ÖÇŔ/ÀŠŔ, ŵîţĥ çöñƒîđéñçé).
Ţŵö àẋéš öƒ àđàþţàţîöñ
Éṽéŕý îḿàĝé / àüđîö / ṽîđéö àššéţ çàñ ƃé àđàþţéđ ţŵö ŵàýš, àñđ ƃöţĥ àŕé ƒîŕšţ-çļàšš:
- Éẋţŕàçţéđ çöñţéñţ: ţĥé ţéẋţ îñšîđé ţĥé àššéţ (ÖÇŔ ţéẋţ, šþééçĥ, öñ-šçŕééñ ƒŕàḿé ţéẋţ, šüƃţîţļé çüéš). Ţŕàñšļàţé îţ, ţĥéñ ŕöüñđ-ţŕîþ îñţö à ţéẋţ-çàŕŕýîñĝ àŕţîƒàçţ (à šüƃţîţļé ƒîļé, àñ àļţ-ţéẋţ šîđéçàŕ).
- Ţĥé ŵĥöļé àššéţ (
replace-asset): ţĥé ƒîļé îš ţĥé đéļîṽéŕàƃļé. Ţĥé þŕöĵéçţ þàîŕš ţĥé šöüŕçé ŵîţĥ à þéŕ-ļöçàļé ƒîļé ţĥé üšéŕ/çöññéçţöŕ šüþþļîéš, àñđ ţŕéàţš îţ àš àüţĥöŕîţàţîṽé.core/project.ResolveAssetVariantsàñđIsBinaryAssetFormatçöṽéŕimage,audio, àñđvideo; ţĥé àüđîö/ṽîđéö ŵŕîţéŕš àŕé þàššţĥŕöüĝĥ šîñķš ţĥàţ éḿîţ ţĥé (ŕéþļàçéḿéñţ) ƃýţéš. Ţĥé éñĝîñé đöéš ñöţ šýñţĥéšîžé ţŕàñšļàţéđ ḿéđîà: ñö ŢŢŠ öŕ ŕé-éñçöđé îñ çöŕé.
Ŕéàđéŕš, ŵŕîţéŕš, ŕöüñđ-ţŕîþ
| Ƒöŕḿàţ | Ŕéàđéŕ éḿîţš | Ŵŕîţéŕ | Ŕöüñđ-ţŕîþ |
|---|---|---|---|
| îḿàĝé | ÖÇŔ ƃļöçķš (ĝéöḿéţŕý + ĝļýþĥš) + àļţ-ţéẋţ çàþţîöñ, öŕ Ḿéđîà | îḿàĝé ƃýţéš + .alt.txt | àļţ-ţéẋţ šîđéçàŕ; ŵĥöļé-îḿàĝé ŕéþļàçé-àššéţ |
| àüđîö | ÀŠŔ ƃļöçķš (ţîḿîñĝ + Öŕîĝîñ), öŕ öþàǫüé Ḿéđîà | þàššţĥŕöüĝĥ | šüƃţîţļé ƒîļé (ṽîà à ƒļöŵ); ŵĥöļé-àüđîö ŕéþļàçé-àššéţ |
| ṽîđéö | àüđîö çĥîļđ-ļàýéŕ (ÀŠŔ) + ƒŕàḿéš çĥîļđ-ļàýéŕ (ÖÇŔ ĝéöḿéţŕý+ţîḿîñĝ), öŕ öþàǫüé Ḿéđîà ŵĥéñ ñö ƒƒḿþéĝ | þàššţĥŕöüĝĥ | šüƃţîţļé ƒîļé (šþééçĥ öñļý); ŵĥöļé-ṽîđéö ŕéþļàçé-àššéţ |
| ṽţţ / šŕţ / ţţḿļ | šüƃţîţļé çüéš ŵîţĥ TimingAnnotation | ýéš | ƃýţé-éẋàçţ šüƃţîţļé ŕöüñđ-ţŕîþ |
Ţĥé srt ŕéàđéŕ þöþüļàţéš ţĥé çàñöñîçàļ TimingAnnotation, ñöţ öñļý
Properties["timecode"]. Ţĥé video ŕéàđéŕ đéĝŕàđéš ţö öþàǫüé Ḿéđîà ŵĥéñ ñö
ƒƒḿþéĝ/àṽ éñĝîñé îš ŕéšöļṽàƃļé, ŕàţĥéŕ ţĥàñ éŕŕöŕîñĝ.
Ƒļöŵš
Ƃüîļţ-îñ ƒļöŵš (host/flowdef.BuiltInFlows) çöḿþöšé ţĥé éẋîšţîñĝ ţööļš; ţĥé
ŕéàđéŕ/ŵŕîţéŕ àŕé ŕüñ-ţîḿé ƃîñđîñĝš (É-04), šö à ƒļöŵ îš ĵüšţ ţĥé ţööļ çĥàîñ:
audio-to-subtitles:translate(ţĥé àüđîö ŕéàđéŕ ýîéļđš ţîḿéđ çüéš).video-to-subtitles:translateöṽéŕ ţĥé đéḿüẋéđ çüéš (ƃöţĥ ţĥé šþééçĥ ţŕàçķ àñđ ţĥé ƒŕàḿé-ÖÇŔ ƃļöçķš çàŕŕý ţîḿîñĝ àñçĥöŕš).image-ocr-translate:translate(ŕöüñđ-ţŕîþš ţŕàñšļàţéđ àļţ-ţéẋţ).
kapi run video-to-subtitles -i talk.mp4 -o talk.fr.vtt --target-lang fr
ĻĻḾ ŕéƒîñéḿéñţ
media-refine (core/ai/tools/media_refine.go) îš à çöñƒîđéñçé-ĝàţéđ
šöüŕçé-ţŕàñšƒöŕḿ: ļöŵ-çöñƒîđéñçé ŕéçöĝñîžéđ üñîţš àŕé ŕé-ŕéàđ ƃý à çöñƒîĝüŕàƃļé
ḿüļţîḿöđàļ ĻĻḾ öṽéŕ à ƃöüñđéđ ḿéđîà šļîçé (ImageSlicer, AudioCutter,
VideoClipper). À ŕéƒîñéđ üñîţ ĝéţš ţĥé çàñöñîçàļ OriginLLMRefined ķîñđ
(Engine ñàḿéš ţĥé þŕöđüçîñĝ ĻĻḾ, Reference ķééþš ţĥé þŕîöŕ ŕéçöĝñîžéŕ) àñđ à
kapi-needs-review ƒļàĝ ŵĥéñ ţĥé ĻĻḾ đîṽéŕĝéš ƒŕöḿ ţĥé öŕîĝîñàļ ĝüéšš.
Đéšķţöþ ṽîéŵîñĝ (kapi-desktop)
Ţĥé DocumentViewer ŕéñđéŕš Šţŕüçţüŕé (ŕöļé/ŕéàđîñĝ-öŕđéŕ ţŕéé) àñđ
Ļàýöüţ (þàĝé-šçàļéđ ƃöüñđîñĝ ƃöẋéš) ƒöŕ ĝéöḿéţŕý-ƃéàŕîñĝ šöüŕçéš. Ţĥé
ḿüļţîḿöđàļ àđđîţîöñš:
- Ḿéđîà ţàƃ: àüţö-šĥöŵñ ŵĥéñ ţĥé ţŕéé ĥàš à ḿéđîà ñöđé öŕ ţîḿîñĝ. Îḿàĝé →
MediaCanvas(ŕàšţéŕ + ŕöļé-çöļöŕéđ ÖÇŔ öṽéŕļàý, ƃîđîŕéçţîöñàļ ƃöẋ↔ƃļöçķ šéļéçţîöñ); àüđîö →AudioPlayer; ṽîđéö →VideoPlayer(þļàýéŕ + šüƃţîţļé ţîḿéļîñé šýñçéđ ţö ţĥé ţîḿîñĝ çüéš). Çöḿþöñéñţš ļîṽé îñ@neokapi/ui-primitives/preview; ţĥé šĥàŕéđ çööŕđîñàţé/ţîḿéçöđé ḿàţĥ îš îñgeometry.ts/timeline.ts. - Ḿéđîà šéŕṽîñĝ: ţĥé ƃàçķéñđ
MediaDataURLŕéàđš à ḿéđîà ñöđé'š ƒîļé àñđ ŕéţüŕñš àdata:ÜŔĻ;FilePreviewŕéšöļṽéš éàçĥ ḿéđîà ñöđé àñđ þàššéšresolveMediaUrlţö ţĥé ṽîéŵéŕ. - Öñ-đéḿàñđ éñĝîñé îñšţàļļ: öþéñîñĝ àñ îḿàĝé/àüđîö/ṽîđéö îñšţàļļš ţĥé
éñŕîçĥîñĝ éñĝîñé þļüĝîñ (
vision/asr/av) ŵĥéñ îţ îšñ'ţ àļŕéàđý àṽàîļàƃļé (ensureMediaEngine), ţĥé éñĝîñé àñàļöĝüé öƒensureFormatPlugin.
Ţĥé ContentTree (core/editor) çàŕŕîéš TimingView àñđ MediaView öñ éàçĥ
ñöđé šö ţĥé ƒŕöñţéñđ ĝéţš ţĥé ţîḿîñĝ/ḿéđîà đéšçŕîþţöŕ àļöñĝšîđé šţŕüçţüŕé àñđ
ĝéöḿéţŕý.