Fix IN/OUT marker placement: bližina trim handle namesto fiksnega initialCenter
PROBLEM: Ko je clip range premaknjen zelo daleč od LLM-jevega prvotnega center-ja, klikni+Enter za zelen IN postavi rdeč OUT (in vice versa) — ker se odločitev IN vs OUT temelji na 'initialCenter' (fiksen iz LLM analize), ki ne predstavlja več trenutne uporabnikove pozicije. Primer (Die Granaten — A Frau is a Frau): - initialIn=0:50, initialOut=1:30 → initialCenter=1:10 - User razširi clip: trimStart=0:06, trimEnd=2:33 - User klikne pri 2:02, želi postaviti IN bližje začetku - Stara koda: 2:02 > 1:10 → postavi OUT (NAROBE, ker je playhead daleč desno od dejanskega center-ja trim range-a) FIX: Odločitev IN vs OUT po BLIŽINI playhead-a do trim handle-a: - Bližje trimStart → IN marker - Bližje trimEnd → OUT marker Plus: clamp markerjev znotraj trim range-a (vsaj 0.5s razlika med IN/OUT) Plus: počisti staro initialCenter logiko v onPointerMove (handle drag)
This commit is contained in:
parent
d2c9a48cc2
commit
08ca5893c7
@ -1696,9 +1696,11 @@
|
|||||||
trimEnd = t;
|
trimEnd = t;
|
||||||
if (video) video.currentTime = t;
|
if (video) video.currentTime = t;
|
||||||
}
|
}
|
||||||
// Sync markerji: če čez initialCenter, reset (zelen sme samo levo, rdeč desno)
|
// Sync markerji v okviru novega trim range-a
|
||||||
if (markerInTime > initialCenter - 0.1) markerInTime = trimStart;
|
if (markerInTime < trimStart) markerInTime = trimStart;
|
||||||
if (markerOutTime < initialCenter + 0.1) markerOutTime = trimEnd;
|
if (markerInTime > trimEnd) markerInTime = trimStart;
|
||||||
|
if (markerOutTime > trimEnd) markerOutTime = trimEnd;
|
||||||
|
if (markerOutTime < trimStart) markerOutTime = trimEnd;
|
||||||
renderTrim();
|
renderTrim();
|
||||||
renderMarkers();
|
renderMarkers();
|
||||||
}
|
}
|
||||||
@ -1783,17 +1785,35 @@
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (video) {
|
if (video) {
|
||||||
if (video.paused) {
|
if (video.paused) {
|
||||||
// STROGO: zelen IN samo v LEVI polovici, rdeč OUT samo v DESNI polovici
|
// Postavi marker po BLIŽINI playhead-a do trim handle-a:
|
||||||
// Center = ORIGINAL (LLM-jev clip center) — NE se NE spreminja!
|
// - Bližje LEVI handle (trimStart) → postavi IN marker
|
||||||
// Tako, če user razširi clip, klik blizu OUT še vedno → OUT marker
|
// - Bližje DESNI handle (trimEnd) → postavi OUT marker
|
||||||
|
// Tako uporabnik vedno premakne tisti handle, ki ga je opazoval.
|
||||||
const t = video.currentTime;
|
const t = video.currentTime;
|
||||||
const center = initialCenter;
|
const distToStart = Math.abs(t - trimStart);
|
||||||
if (t < center) {
|
const distToEnd = Math.abs(t - trimEnd);
|
||||||
markerInTime = Math.min(t, center - 0.1);
|
|
||||||
|
if (distToStart < distToEnd) {
|
||||||
|
// Bližje začetku → IN marker
|
||||||
|
// Klamp da ne preseže OUT marker (vsaj 0.5s pred OUT)
|
||||||
|
markerInTime = Math.min(t, markerOutTime - 0.5);
|
||||||
|
if (markerInTime < 0) markerInTime = 0;
|
||||||
} else {
|
} else {
|
||||||
markerOutTime = Math.max(t, center + 0.1);
|
// Bližje koncu → OUT marker
|
||||||
|
// Klamp da ne preseže IN marker (vsaj 0.5s za IN)
|
||||||
|
markerOutTime = Math.max(t, markerInTime + 0.5);
|
||||||
|
if (markerOutTime > videoDuration) markerOutTime = videoDuration;
|
||||||
}
|
}
|
||||||
console.log("[Marker]", { t, center, trimStart, trimEnd, markerInTime, markerOutTime });
|
console.log("[Marker]", {
|
||||||
|
t: t.toFixed(2),
|
||||||
|
trimStart: trimStart.toFixed(2),
|
||||||
|
trimEnd: trimEnd.toFixed(2),
|
||||||
|
distToStart: distToStart.toFixed(2),
|
||||||
|
distToEnd: distToEnd.toFixed(2),
|
||||||
|
chose: distToStart < distToEnd ? "IN" : "OUT",
|
||||||
|
markerInTime: markerInTime.toFixed(2),
|
||||||
|
markerOutTime: markerOutTime.toFixed(2),
|
||||||
|
});
|
||||||
renderMarkers();
|
renderMarkers();
|
||||||
video.play().catch(() => {});
|
video.play().catch(() => {});
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user