ffmpeg가 Error opening input: No such file or directory를 내면 입력 경로에 %가 섞였는지부터 본다. ffmpeg는 경로의 %를 프레임 번호 자리로 읽는다. 쇼츠의 숫자 장면 하나가 화면 단위 “6%“를 달고 있었고, 그 %가 작업 폴더 이름 mo-num-6-%에 그대로 들어가 클립 렌더가 멈췄다. 이름을 짓는 함수에서 %를 pct로 바꾸자 같은 편이 통과했다.
판결문 한 건을 블로그 글과 세로 쇼츠로 만드는 일을 클로드 코드로 무인으로 돌리고 있다. 회사를 그만두고 AI로 일을 만드는 실험 중 하나인데, 그날 판결 한 편(폴더 2026-10-07-5)이 원고 검사와 렌더를 지나 마지막 클립 단계에서 멈췄다.
ffmpeg가 in#1을 열지 못했다
17시 36분, 클립 로그에 이 줄이 찍혀 있었다.
[in#1 @ 0xb9ac24280] Error opening input: No such file or directory
에러 문구는 “파일이 없다”인데, 이 입력은 렌더 도중에 우리 쪽 코드가 이름을 지어 넘기는 작업 파일이다. 경로 문자열 자체를 의심해야 하는 신호였다.
rm -rf로 지우고 다시 돌리려던 명령은 가드 훅에 막혔다
처음 친 명령은 작업 폴더의 mo-num-6-% 폴더와 mo-num-6-%.html 두 개를 rm -rf로 지우고 클립을 다시 돌리는 한 줄이었다. 내가 걸어 둔 Bash 가드 훅이 rm -r 대상이 임시 경로가 아니다로 막았다. 로그 머리 12줄을 다시 본 뒤에 원인 쪽으로 갔다.
원인: 화면 단위 “%“가 작업 폴더 이름에 들어갔다
클로드 코드 세션이 남긴 판단은 장면의 단위 “6%“에서 나온 %가 작업 폴더 이름에 들어갔고, ffmpeg가 그것을 패턴 자리표시자로 읽었다는 것이었다. 숫자 장면의 작업 이름 mo-num-6-%가 ffmpeg 입력 경로가 되는 순간, %는 글자가 아니라 번호 자리가 된다.
함정으로 적으면 이렇다. 조건은 화면 문구나 단위로 작업 파일·폴더 이름을 짓고 그 경로를 ffmpeg 입력으로 넘기는 구조다. 증상은 Error opening input: No such file or directory 한 줄이고, 회피법은 이름을 지을 때 %를 다른 글자로 바꾸는 것이다.
처음 고친 파일이 틀렸다
%를 바꾸는 줄은 처음에 쇼츠 렌더 코드 storyreel.mjs의 moving() 함수에 들어갔다. 몇 초 뒤 세션은 “진짜 범인은 figmotion.mjs에 있는 같은 함수”라며 그 줄을 되돌렸고, figmotion.mjs의 frames() 함수에 같은 줄을 옮겨 넣었다.
name = name.replace(/%/g, 'pct');이름을 짓는 코드가 두 파일에 비슷한 모양으로 있으면, 에러가 난 경로를 실제로 만든 쪽이 어디인지부터 가려야 한 줄짜리 수정이 맞는 자리에 들어간다. 원본 줄에는 “ffmpeg 이 경로의 % 를 프레임 번호 자리로 읽는다”는 주석이 그날 날짜와 함께 붙어 있어서, 나중에 이 replace를 지우려는 사람이 이유를 바로 읽을 수 있다.
화면 문구나 사용자 입력으로 파일 이름을 만든다면, ffmpeg에 넘기기 전에 이름에서 %를 바꾸는 줄을 그 이름을 짓는 함수 안에 두세요.
고친 뒤 같은 편을 다시 돌리자 clip exit=0이 찍혔고, 게이트는 12장면 677자로 통과했으며, 쇼츠는 70.5초에 받아쓰기 일치 0.91로 나왔다.