5편의 조사에서 기존 화면 녹화기 열한 가지와 이 프로그램을 「원천과 기록」 여덟 항목으로 비교하였다. 이 프로그램이 갖추지 못한 항목은 마우스 주변 따라가기, 다중 모니터 동시 녹화, 웹캠 겹치기, 게임 화면 캡처의 넷이었다. 이 판은 그 넷을 채우고, 5편에서 정한 대로 프로그램 이름을 CatchCatch 로 바꾼다. 4편에서 v1.0.1.0 에 배정하였던 예약 녹화와 MP4 챕터는 v1.0.2.0 으로 한 칸 미룬다.
이름 변경과 원천 보완만 넣고 다른 기능은 손대지 않았다. 코드 변경은 screen.py 에 원천 네 가지, pip.py 신설, videowriter.py 와 session.py 에 겹치기 경로, mainwindow.py 에 원천 두 행과 웹캠 그룹, settings.py 에 항목 일곱과 옛 설정 복사다.
표 1은 이름이 바뀐 자리를 나타낸다. 패키지 이름이 바뀌므로 모든 import 문이 바뀌었고, 설정 폴더가 바뀌므로 첫 실행 때 옛 폴더의 settings.json 을 복사해 온다. 복사는 새 설정 파일이 없을 때 한 번만 한다. 이전 판의 폴더와 개발일지와 게시글은 옛 이름을 유지한다.
| 항목 | v1.0.0.2 | v1.0.1.0 |
|---|---|---|
| 판 폴더 | GenealogyRecording_v1.0.0.2 | CatchCatch_v1.0.1.0 |
| Python 패키지 | genealogyrecording | catchcatch |
| 설정 폴더 | %APPDATA%/GenealogyRecording | %APPDATA%/CatchCatch (옛 설정 자동 복사) |
| 실행 파일 | GenealogyRecording_v1.0.0.2.exe | CatchCatch_v1.0.1.0.exe |
| 창 제목·트레이 | GenealogyRecording v1.0.0.2 | CatchCatch v1.0.1.0 |
| 기본 저장 폴더 | Videos/GenealogyRecording | Videos/CatchCatch |
| 게시글 주소 | genealogyrecording-devlog-NN | catchcatch-devlog-NN |

커서를 가운데 둔 고정 크기 사각형이 커서를 따라간다. 크기는 640×360, 854×480, 1280×720, 1920×1080 가운데 고른다. 구현은 3판의 창 따라가기(FollowSource)를 그대로 쓰고, 창 사각형 대신 커서 위치에서 사각형을 만드는 함수(mouse_provider)를 끼웠다. 사각형이 가상 데스크톱 밖으로 나가면 FollowSource 가 안으로 민다. 커서 위치를 얻지 못한 프레임은 직전 자리를 유지한다.
mss 의 monitors[0] 은 모든 모니터를 합친 사각형이며 3판에도 이미 있었다. 다만 목록에 「모든 모니터」가 보이는 조건이 분명하지 않아 비교표에서 미확인으로 두었다. 이 판은 모니터가 둘 이상이면 목록 맨 위에 「모든 모니터 (가로 × 세로)」를 둔다. 모니터별로 따로 파일을 만드는 방식은 넣지 않았다.
mss 는 GDI BitBlt 로 찍으므로 배타 전체화면 DirectX 화면을 찍지 못한다. 이 판은 ffmpeg 의 ddagrab 필터(Desktop Duplication API)로 모니터를 통째로 받는 원천(DesktopDupSource)을 더하였다. ffmpeg 가 ddagrab → hwdownload → bgra 로 바꾼 원시 프레임을 표준 출력으로 내보낸다. 읽기 스레드가 가장 새 프레임을 보관하고 VideoWriter 가 가져간다. 창 단위 캡처는 없고 출력 번호(모니터)만 고른다. 동봉한 ffmpeg 7.1 에 ddagrab 과 dshow 가 들어 있음을 확인하였다. ddagrab 이 없는 ffmpeg 이면 항목이 꺼지고 그 이유가 표시된다.
이 방식은 게임 캡처 전용 프로그램의 DirectX 후킹과 다르다. 후킹은 게임 프로세스 안에서 프레임을 가로채므로 게임의 프레임 속도를 그대로 얻지만, Desktop Duplication 은 합성된 화면을 모니터 주사율 안에서 받는다. 회의·강의 기록이 목적인 이 프로그램에는 후자로 충분하다고 판단된다.
웹캠 그림을 녹화 화면의 구석에 덮는다(PiP). 카메라는 ffmpeg 의 dshow 로 열고, 3.3 과 같은 파이프 경로로 작은 BGRA 프레임을 받는다. 자리는 오른쪽 아래, 오른쪽 위, 왼쪽 아래, 왼쪽 위의 넷이고, 크기는 출력 가로의 15·20·25·33% 가운데 고른다. 겹치기는 VideoWriter 가 프레임마다 numpy 로 복사해 넣고 2px 흰 테두리를 두른다. 카메라 목록은 ffmpeg 의 장치 목록 출력에서 읽는다. 카메라를 못 열면 겹치기 없이 녹화를 계속하고 그 이유를 표시한다.
3.3 과 3.4 는 PipeSource 하나를 바탕으로 한다. ffmpeg 자식 프로세스의 표준 출력을 읽기 스레드가 프레임 단위(가로×세로×4 바이트)로 받아 가장 새 프레임만 보관한다. 첫 프레임이 10초 안에 오지 않으면 ffmpeg 의 오류 문장을 그대로 들어 실패한다. 장치 없는 환경에서는 같은 클래스에 lavfi testsrc2 를 넣은 PatternSource 로 경로를 시험한다.
표 2는 시험 항목과 결과를 나타낸다. 엔진 시험은 7판까지의 7묶음에 8묶음(v1.0.1.0)을 더해 리눅스 Python 과 wine 위의 Windows Python 에서 모두 통과하였다. 실행 파일은 wine 위의 PyInstaller 로 빌드하였고, Xvfb 화면에서 「마우스 주변」 원천으로 27.3초를 녹화하였다.
| 항목 | 방법 | 결과 |
|---|---|---|
| 마우스 주변 | 커서 위치 넷을 차례로 넣음 | (400,300) → 사각형 (80,120). 화면 밖 두 경우 안으로 밀림. 위치 없음은 직전 유지 |
| 파이프 원천 | testsrc2 160×120, 10fps | 첫 프레임 수신, BGRA 알파 255, 무늬 표준편차 10 이상, 닫은 뒤 프로세스 없음 |
| 웹캠 겹치기 | 320×240 위에 80×60 을 오른쪽 아래 | 자리 (224,164). 안쪽 값 200, 테두리 255, 바깥 0 |
| 겹치기 녹화 | 가짜 화면 + testsrc2 웹캠 2초 | 결과 ok, 겹친 프레임 29(리눅스)·24(Windows Python) |
| ddagrab 명령 | 명령 문자열 검사 | output_idx·framerate·hwdownload·scale 포함 |
| 실행 파일 실기 | wine, Xvfb, xdotool 로 커서 여섯 자리 이동 | 1280×720, 819 프레임, 27.3초. 프레임마다 커서가 가운데(그림 2) |
| 전체화면 앱 (wine) | DesktopDupSource 열기 | 「Failed to create D3D11VA device」로 10초 안에 실패. 문장이 사용자에게 전달됨 |


빌드에서 한 가지를 겪었다. wine 에는 Windows 의 시스템 ICU(icuuc.dll)가 없어 PyInstaller 가 Qt 플러그인을 모으지 못하였다. 빌드와 실기 때만 빈 함수로 된 대역 DLL 을 PySide6 폴더에 두고, 배포본에서는 뺐다. Windows 10 이상에는 시스템 ICU 가 있다.
v1.0.0.2 까지는 실행 파일 폴더를 zip 두 조각으로 나누어 올렸고, 받은 사람이 같은 폴더에 풀어 실행 파일을 열어야 했다. 이 판부터 NSIS 3 으로 만든 설치 파일 하나(CatchCatch_v1.0.1.0_Setup.exe, 50.4 MB)로 배포한다. 설치 파일은 폴더의 파일 87개(198 MB)를 LZMA 로 압축해 담는다. 실행하면 Program Files\CatchCatch 에 풀고 시작 메뉴·바탕 화면 바로 가기와 「프로그램 추가/제거」 항목을 만든다. 제거는 설정과 녹화 결과를 남긴다. 이전 판이 설치돼 있으면 먼저 지운다. 설치 스크립트는 installer/CatchCatch.nsi, 빌드는 build_installer.bat 이다.
설치 파일은 32비트 실행 파일이라 64비트 전용 wine 에서는 돌지 않아 실기를 하지 못하였다. 7z 로 담긴 파일 87개와 실행 파일·ffmpeg·Qt 라이브러리가 들어 있음을 확인하였다. 설치와 제거의 실기는 Windows 실기기에서 한다.
전체화면 앱 캡처와 웹캠 겹치기는 wine 과 리눅스에서 장치가 없어 실기를 하지 못하였다. 파이프 경로와 실패 처리까지만 확인하였고, Windows 실기기에서 ddagrab 이 실제 화면을 주는지와 dshow 가 카메라를 여는지는 다음 확인 항목이다. 파이프로 원시 프레임을 받는 방식은 1080p 30fps 에서 초당 약 250MB 를 옮기므로, 느린 PC 에서는 출력 크기를 줄이는 쪽이 안전하다.
다음 판 v1.0.2.0 은 4편의 배정대로 예약 녹화와 MP4 챕터다. 핵심기능의 최종 결정은 아직 남아 있으며, 본편 2편의 핵심기능 절은 결정 뒤에 쓴다.