diff --git a/src/main/resources/templates/rework.html b/src/main/resources/templates/rework.html index 496bdb3..be7d33b 100644 --- a/src/main/resources/templates/rework.html +++ b/src/main/resources/templates/rework.html @@ -470,14 +470,18 @@ } // ===== AI 자막 (음성 Whisper / 화면 Gemini) ===== - function renderAiPanel(elId, segs, error){ + // segs 있으면 목록, 없으면 error(빨강) 또는 note(회색 안내) 표시. + function renderAiPanel(elId, segs, error, note){ const box = document.getElementById(elId); + if(segs && segs.length){ + box.innerHTML = segs.map(sg => + '
' + + '' + mmss(sg.start) + '' + + '' + esc(sg.text) + '
').join(''); + return; + } if(error){ box.innerHTML = '
' + esc(error) + '
'; return; } - if(!segs || !segs.length){ box.innerHTML = '
자막 없음
'; return; } - box.innerHTML = segs.map(sg => - '
' - + '' + mmss(sg.start) + '' - + '' + esc(sg.text) + '
').join(''); + box.innerHTML = '
' + esc(note || '자막 없음') + '
'; } // 음성(Whisper 정밀+한국어) + 화면(Gemini 한국어)을 동시에 생성해 좌우 패널에 표시. @@ -490,7 +494,8 @@ // 왼쪽: 저장된 Whisper 세그먼트 → 한국어 번역(LibreTranslate) const audioP = (async () => { - if(!SEGMENTS || !SEGMENTS.length) return { error: '음성 자막 없음 — 이 영상에 말소리가 없거나(음악·화면자막만) 아직 ‘전사’ 미실행' }; + // 말소리가 없는(음악·화면자막만) 영상은 오류가 아니라 '음성 없음' 안내. + if(!SEGMENTS || !SEGMENTS.length) return { note: '음성 없음 — 말소리가 없거나(음악·화면자막만) ‘전사’ 미실행' }; const r = await api(API + '/' + VIDEO_ID + '/translate?target=ko&format=segments', { method:'POST' }); const ko = (r && r.texts) || []; return { segments: SEGMENTS.map((sg, i) => ({ start: sg.start, end: sg.end, text: (ko[i] != null ? ko[i] : (sg.text || '')) })) }; @@ -504,8 +509,8 @@ const [audio, screen] = await Promise.all([audioP, screenP]); AI_AUDIO = audio.segments || []; AI_SCREEN = screen.segments || []; - renderAiPanel('aiAudioList', AI_AUDIO, audio.error); - renderAiPanel('aiScreenList', AI_SCREEN, screen.error); + renderAiPanel('aiAudioList', AI_AUDIO, audio.error, audio.note); + renderAiPanel('aiScreenList', AI_SCREEN, screen.error, screen.note); status.style.color = '#4ade80'; status.textContent = '완료 · 음성 ' + AI_AUDIO.length + '개 · 화면 ' + AI_SCREEN.length + '개'