yt-fts

Web Scraping & CrawlingCLIPython

★ 1,812주당 +1조회 4

무엇인가

yt-fts는 YouTube 채널·재생목록의 자막을 로컬 데이터베이스로 색인해 두고 명령줄에서 검색하는 도구다. 영상 스트림을 내려받지 않고 자막 텍스트만 수집하므로 검색 대상은 영상 자체가 아니라 발화 내용이다. 수집·색인·질의가 모두 로컬 SQLite 파일에서 끝나고, 결과는 해당 발언이 나온 시점의 YouTube URL로 돌아온다.

어떻게 동작하나

수집은 yt-dlp가 담당한다. download 명령이 채널 또는 재생목록 URL을 받아 자막을 병렬로 내려받고 --jobs로 동시 작업 수를 조절한다. --cookies-from-browser로 브라우저 쿠키를 넘겨 로그인 요구 오류를 우회한다. 자막은 SQLite에 적재되고 전문 검색은 SQLite FTS의 Enhanced Query Syntax로 처리되며, 접두 질의로 단어 일부를 매칭할 수 있다. search는 최대 40자 문자열을 받아 일치 구간과 타임스탬프 URL을 출력하고 -e로 CSV 내보내기를 한다. embeddings 명령은 자막을 --interval 초 단위(기본 30초)로 잘라 OpenAI 또는 Gemini 임베딩 API에 보내고 벡터를 chromadb에 저장한다. 이후 vsearch가 유사도 순으로 결과를 정렬한다.

무엇과 다른가

YouTube 자체 검색은 영상 단위 메타데이터를 대상으로 하고 채널 범위 질의를 제공하지 않는다. yt-fts는 채널 전체를 하나의 코퍼스로 취급해 영상 경계를 넘는 구문 검색을 수행한다. 클라우드 자막 검색 서비스와 달리 원문 자막과 색인을 로컬 SQLite에 두고, 외부로 나가는 것은 임베딩 생성 요청뿐이다. llm 명령은 별도 RAG 파이프라인을 구성하지 않고 vsearch 결과를 그대로 대화 컨텍스트로 쓰며, 답을 못 하면 대화에서 뽑은 질의로 컨텍스트를 갱신한다.

어떻게 쓰나

설치는 pip로 한다. download에 채널 URL을 주면 자막이 적재되고 list -l로 라이브러리를 확인한다. search -c <채널> <구문>으로 질의하고 -v로 특정 영상에 한정한다. export -c <채널> -f vtt는 채널 ID 이름의 디렉터리에 자막을 내보낸다. 시맨틱 검색은 embeddings -c <채널>을 한 번 실행해 벡터를 만든 뒤 쓴다. 그러면 list에서 채널 이름 옆에 (ss)가 붙고 vsearch와 llm이 활성화된다. API 키는 OPENAI_API_KEY 또는 GEMINI_API_KEY 환경 변수나 --api-key로 전달한다. 다운로드가 403 오류로 실패하면 diagnose가 연결을 점검하고 조치를 제안한다.

전제와 한계

README는 이 프로젝트가 중단(abandoned) 상태라고 밝힌다. 자막이 없는 영상은 색인 대상에서 빠지고, 자막 언어는 -l로 지정하며 기본값은 en이다. 전문 검색 문자열은 40자로 제한된다. 시맨틱 검색과 llm은 OpenAI 또는 Gemini API 키와 임베딩 생성 비용을 전제로 한다. update를 반복 실행하면 나중에 추가된 자막이 증분으로 들어온다.

유사 도구