동영상 학습 노트
사용자가 선택한 자료를 읽고, 개념, 절차, 사례, 결론을 정리하며, 저자의 의견과 AI의 보충 내용을 명확히 구분합니다. 먼저 실제 확보한 자료와 범위를 설명한 후 내용을 보고하며, 다운로드 성공, 자막 길이, 전사 완료를 의미적 검증으로 간주하지 않습니다.
입력 및 출력 위치 확인
단일 동영상, 선택된 분할 재생(P) 또는 로컬 파일을 확인합니다. 컬렉션(재생목록) 범위가 불명확하고 작업에 영향을 미칠 경우 추가로 질문합니다. 원본 출처 링크와 정규화된 링크를 보존하고, 관련 없는 추적 파라미터는 제거합니다.
사용자의 원본 파일은 읽기 전용으로 유지합니다. 매번 현재 작업 디렉토리에 고유한 work/video_tmp/<작업ID>/를 생성하여 미디어, 체크포인트 및 임시 화면을 저장하며, 동일한 디렉토리에는 하나의 쓰기 프로세스만 허용됩니다. 출처, 모델 또는 언어를 변경할 때마다 새 작업 디렉토리를 생성합니다. 동일한 작업에 대한 유효한 재시도는 원래 디렉토리를 재사용합니다.
이번 작업에 필요한 환경만 확인하며, 명령어는 환경 설명을 참조하세요. 사용자가 지정한 노트 디렉토리가 있으면 우선 저장하고, 없으면 기존에 쓰기 가능한 Obsidian 동영상 노트 디렉토리를 사용하며, 그마저도 없으면 현재 작업 디렉토리의 outputs/에 저장합니다. 동일한 이름의 산출물에는 고유 접미사를 추가하여 덮어쓰지 않습니다.
신뢰할 수 있는 자료 확보
| 출처 | 기본 경로 | 신뢰할 수 있는 자막이 없는 경우 |
|---|---|---|
| Bilibili | 공개 API 또는 이미 연결되고 권한이 부여된 자막 도구 | 설정된 bili audio --no-split -o <task_dir> 또는 기타 권한이 부여된 도구 |
| YouTube | yt-dlp를 사용하여 선택한 언어의 필요한 자막 획득 | 오디오 트랙을 획득하고, 화면이 필요한 경우에만 비디오 스트림을 추가 획득 |
| 기타 사이트 | 기존 플랫폼 도구 또는 yt-dlp | 실제 실패에 따라 지원되는 획득 경로로 전환 |
| 로컬 오디오/비디오 | 기존 자막 | 원본 파일에 대해 전사 스크립트 실행 |
동영상 식별자, 분할(P), 언어, 자막이 비어 있는지, 명백히 누락된 부분이 있는지 확인합니다. 자막이 존재한다고 해서 문장별 정확성이 증명되는 것은 아니며, 정상적인 엔딩 크레딧의 무음 구간을 직접적으로 누락으로 간주하지 않습니다.
공개 자료를 우선 사용하며, 브라우저 쿠키, 로그인 또는 새 채널을 기본적으로 추출하지 않습니다. 동일한 실패에 대해 명확한 변화를 포함하는 최대 두 번의 시도만 수행합니다. 반복 재시도, 프록시 변경, 연결 실패를 동영상 없음으로 처리하지 않습니다. 장애가 발생하면 확보한 자료를 보존하고, 누락된 부분을 설명합니다.
필요에 따라 오디오 트랙 전사
신뢰할 수 있는 자막이 없는 경우, 먼저 전사 명령어를 읽은 후 transcribe.py를 사용합니다:
- 모델을 명확히 선택하고, 기존 캐시를 우선 사용하며,
--pilot을 실행하여 첫 1분을 시험 전사하고 언어, 내용 및 속도를 확인합니다. - 시험 전사가 사용 가능하다고 판단되면 동일한 명령어에서
--pilot을 제외하고 실행하여 체크포인트로부터 전체 처리를 계속합니다. 캐시가 없고 다운로드가 확실히 필요한 경우에만--download-model을 추가합니다. - 전체
transcript.json을 읽고, 빈 음성, 비정상적인 반복,needs_review, 핵심 용어 및 숫자를 확인합니다. 중요한 인용이 분 단위 경계에 걸쳐 있을 경우 경계를 넘는 구간을 다시 청취합니다.
스크립트는 16kHz 모노 PCM16 및 NumPy 입력을 인식기에 사용하며, 분 단위로 체크포인트를 저장합니다. completed: true는 처리 범위가 소비되었음을 의미할 뿐, 인식 정확도를 증명하지 않습니다. 자동으로 작은 모델로 전환하지 않으며, 모듈을 가져오기 위해 모델을 다운로드하지 않습니다.
전체 주 인식 경로는 하나만 실행합니다. 먼저 작은 자료 조각을 검증한 후 전환 여부를 결정합니다. 기본적으로 전체 미디어에 대해 동시에 ASR과 OCR을 실행하지 않으며, 백그라운드 단일 대기 시간은 60초를 초과하지 않고 의미 있는 진행 상황을 보고합니다.
주요 화면 확인
먼저 화면 선택 설명을 읽습니다. 챕터가 있으면 챕터별로 위치를 찾고, 챕터가 없으면 주제 전환에 따라 분석가의 구분을 설정합니다. 소량의 개요 화면으로 위치를 찾은 후, 필요한 선명한 화면을 추출합니다.
코드, 수식, 표, 설정 및 작업 절차는 음성만으로 전달할 수 없습니다. 유사한 화면이라도 고유한 정보가 있으면 보존하며, 고정된 스크린샷 수로 완전성을 판단하지 않습니다.
OCR은 그림 속 텍스트 확인 또는 사용 가능한 오디오 트랙이 없는 경우의 예비 경로로만 사용합니다. 먼저 대표 화면을 시험 읽어 자막, 본문 및 워터마크를 음성 내용과 혼동하지 않도록 합니다. 저해상도, 가려짐 또는 식별 불가능한 수식은 구체적인 시간 누락을 표시합니다. 무음 시각 자료 동영상은 시각적 읽기 방식을 사용한다고 설명하고, 가상의 음성 전사를 생성하지 않습니다.
노트 및 증거 작성
기본적으로 제목, 출처, 길이, 실제 자료, 요약, 주제별 요점 및 주요 시간 지점을 포함합니다. 사용자가 요청하거나 동영상이 작업 재현에 적합한 경우에만 워크플로우, 입력, 단계, 출력 및 완료 조건을 추가로 정리합니다. 기본적으로 전체 대본을 첨부하지 않습니다.
원본 동영상의 사실, 저자의 의견 및 사례, AI 보충 내용을 구분합니다. 저자가 시연한 속도나 수량을 일반적인 보장으로 기술하지 않습니다. 처리된 범위와 이해에 영향을 미치는 누락 사항을 명확히 밝히며, "전체 자막 있음"을 "전체 음성 트랙 문장별 검증 완료"로 기술하지 않습니다.
스크린샷은 영구 첨부 파일 디렉토리에 저장하고, 마크다운 이미지 링크로 삽입합니다. 노트, 첨부 파일 및 동일한 이름의 .evidence.json은 임시 미디어 디렉토리에 의존할 수 없습니다. 증거는 필요한 조각, 시간 범위, 핵심 세부 사항 및 확인 기록만 보존하며, 형식은 증거 설명을 참조하세요.
검증 및 정리
먼저 자료, 노트 및 첨부 파일을 다시 읽고, 각 장의 주요 개념, 방법, 사례, 결론, 중요한 이름, 숫자, 수식 및 단계를 확인합니다. 증거에는 확인 범위와 해결되지 않은 항목을 사실대로 기록합니다. 무음 또는 반복 구간은 실질적인 내용이 없음을 설명할 수 있지만, 시간 축을 채우기 위해 가상의 요약을 생성하지 않습니다.
그런 다음 finalize.py를 실행하여 출처, 장, 완료 상태, 영구 파일 및 누락 사항을 확인합니다. 스크립트는 기록과 파일만 검증하고 내용 검토를 대체하지 않으므로, 검사를 통과하기 위해 reviewed 또는 passed를 거짓으로 채우지 않습니다.
선택된 자료가 처리되고, 내용 확인이 통과되었으며, 영구 파일 다시 읽기가 성공한 경우에만 --clean을 추가합니다. 정리는 현재 작업 디렉토리의 work/video_tmp에 있는 하나의 직접 하위 디렉토리로만 제한되며, 디렉토리 및 하위 항목의 심볼릭 링크, 정션 또는 재분석 지점을 거부합니다. 원본 파일, 모델 캐시 및 영구 산출물은 삭제하지 않습니다. 실패하거나 여전히 해결되지 않은 누락이 있는 경우 미디어와 체크포인트를 보존합니다.
마무리 단계에서 실제 자료와 처리 범위, 노트 위치, 정리 결과 및 제한 사항을 보고합니다. 짧은 영상 시험 재생, 정적 검사 및 가져오기 성공은 실제 범위에 따라 보고하며, 전체 영상 검수로 간주하지 않습니다.