refactor: dedupe encoder retry + collectFolderSegments + 3-probe → 1
simplify skill 결과 정리: - editor.ts: HW→libx264 잡 폴백 패턴을 encodeWithFallback() 한 곳으로 모으고 upscale/trim 양쪽에서 호출. 진행률 무전송 변형은 runner 인자로 분기. - editor.ts: upscaleOriginalTo60Fps 가 fps/해상도/길이를 위해 spawnSync ffprobe 를 3번 돌리던 것을 probeVideoMeta() 한 번 호출로 통합. 핫패스에서 이벤트 루프 블로킹을 줄임. 이제 미사용이 된 probeVideoResolution/ probeVideoDuration 은 제거. - routes/helpers.ts: op.ts/public.ts 양쪽에 동일하게 있던 collectFolderSegments 를 공용 모듈로 추출. - youtube.ts: probeYoutube/probeYoutubePlaylist 의 stderr 누적을 runFfmpeg 와 동일하게 마지막 2KB 만 유지하도록 캡. README.md 도 5/31 STEP 1~5 (중첩 폴더 + 영상 ID 편집 + 플레이리스트 임포트 + 짧은 공유 URL) 과 5/16 묶음(부드러운 진행바 + 60fps/FHD 캡 + HW 인코더 자동 감지) 까지 반영해 전반 갱신. `npm run build` 통과. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -66,7 +66,8 @@ export async function probeYoutube(url: string): Promise<ProbeResult> {
|
||||
let stdout = ''
|
||||
let stderr = ''
|
||||
child.stdout.on('data', (chunk) => (stdout += chunk.toString()))
|
||||
child.stderr.on('data', (chunk) => (stderr += chunk.toString()))
|
||||
// stderr 는 에러 메시지 끝부분만 의미가 있어 직렬화에 비례해 자란다 — 마지막 2KB 만 유지.
|
||||
child.stderr.on('data', (chunk) => { stderr = (stderr + chunk.toString()).slice(-2000) })
|
||||
child.on('error', (err) => reject(err))
|
||||
child.on('close', (code) => {
|
||||
if (code !== 0) {
|
||||
@@ -118,7 +119,8 @@ export async function probeYoutubePlaylist(url: string): Promise<PlaylistProbeRe
|
||||
let stdout = ''
|
||||
let stderr = ''
|
||||
child.stdout.on('data', (chunk) => (stdout += chunk.toString()))
|
||||
child.stderr.on('data', (chunk) => (stderr += chunk.toString()))
|
||||
// stdout 은 항목별 JSON 라인이 끝에 모두 필요하므로 그대로 유지. stderr 만 캡.
|
||||
child.stderr.on('data', (chunk) => { stderr = (stderr + chunk.toString()).slice(-2000) })
|
||||
child.on('error', (err) => reject(err))
|
||||
child.on('close', (code) => {
|
||||
if (code !== 0) {
|
||||
|
||||
Reference in New Issue
Block a user