cuts_from_state: sec를 압축 길이 기준으로 고정, 순환 임포트 주석 정정
sec가 build_highlight_cuts 안에서 start/end(원본 시각)로 계산되어 quota(압축 길이 기준)와 좌표계가 어긋났다 — 구간 탭·붙여넣기 탭처럼 무음 제거가 항상 켜진 경우 "20초인데 카드 3장"처럼 화면 표시가 매번 어긋났다. build_highlight_cuts는 다른 탭도 쓰므로 건드리지 않고, cuts_from_state가 결과를 받은 뒤 sec만 places 기준으로 덮어쓴다. 겸사겸사 순환 임포트 주석도 사실대로 고쳤다 — pipeline은 지금 recommend를 임포트하지 않아 순환이 아니고, 앞으로를 위한 예방 조치다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
3dd5eee684
commit
b9d81acfce
@ -359,14 +359,20 @@ def cuts_from_state(places, orig_ranges, captions, comments, *, key=None):
|
|||||||
- `orig_ranges` = 원본 영상 시각 → ⭐ 분:초 매칭
|
- `orig_ranges` = 원본 영상 시각 → ⭐ 분:초 매칭
|
||||||
둘은 같은 길이여야 하고 인덱스로만 짝지어 다닌다.
|
둘은 같은 길이여야 하고 인덱스로만 짝지어 다닌다.
|
||||||
"""
|
"""
|
||||||
from .pipeline import captions_for_places # 순환 임포트 회피: pipeline은 draft·comments를
|
# pipeline은 지금 recommend를 임포트하지 않아 상단 임포트도 동작한다. 다만 앞으로
|
||||||
# 임포트하고 app.py가 pipeline·recommend를 둘 다 임포트하므로, 파일 상단에서
|
# pipeline이 추천을 쓰게 되면 순환이 되므로 함수 안에서 가져와 미리 끊어 둔다.
|
||||||
# pipeline을 가져오면 임포트 순환이 생긴다. 호출 시점(함수 안)에서만 가져온다.
|
from .pipeline import captions_for_places
|
||||||
if not places or len(places) != len(orig_ranges):
|
if not places or len(places) != len(orig_ranges):
|
||||||
return [], 0, False
|
return [], 0, False
|
||||||
bottoms = captions_for_places(captions, places)
|
bottoms = captions_for_places(captions, places)
|
||||||
quotas = [max(1, int((p1 - p0) // CARD_SEC)) for p0, p1 in places]
|
quotas = [max(1, int((p1 - p0) // CARD_SEC)) for p0, p1 in places]
|
||||||
cuts = [{"start": s, "end": e, "bottom": b, "effect": ""}
|
cuts = [{"start": s, "end": e, "bottom": b, "effect": ""}
|
||||||
for (s, e), b in zip(orig_ranges, bottoms)]
|
for (s, e), b in zip(orig_ranges, bottoms)]
|
||||||
return build_highlight_cuts({"paste": {"cuts": cuts}}, comments,
|
cuts_out, need, ai_failed = build_highlight_cuts(
|
||||||
key=key, quotas=quotas)
|
{"paste": {"cuts": cuts}}, comments, key=key, quotas=quotas)
|
||||||
|
# sec 는 화면에서 quota 바로 옆에 찍힌다. quota 가 압축 길이 기준이므로
|
||||||
|
# sec 도 압축 길이여야 "20초인데 왜 3장?"이 안 생긴다.
|
||||||
|
# (start/end 는 ⭐ 매칭용이라 원본 시각 그대로 둔다 — 좌표계가 둘인 이유)
|
||||||
|
for c, (p0, p1) in zip(cuts_out, places):
|
||||||
|
c["sec"] = round(p1 - p0, 1)
|
||||||
|
return cuts_out, need, ai_failed
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user