화면 재구성과 필기·스크린샷·고주사율 · v1.0.2.0
주 창을 세 탭(화면 녹화·음성 녹음·스크린샷)과 카드 중심으로 다시 짜고, 녹화 중 화면 위에 그리는 필기 덧창을 넣었다. 스크린샷을 녹화와 무관한 셋째 모드로 세우고, 120·144·240fps 와 8K 출력, HEVC·AV1 과 하드웨어 인코더 고르기를 넣었다. 필기 덧창과 도구 막대는 녹화에 찍히지 않으며, 획은 프레임에 직접 합성된다. 장치 없는 환경에서 엔진 시험 9묶음 81항목과 실기 41항목을 통과하였고, 실행 파일과 설치 파일의 실기를 wine 에서 하였다.
2026. 10. 03
목적
6편에서 확정한 핵심기능 아홉 가운데 1(고해상도), 2(고주사율), 3(스크린샷), 5(필기)를 넣는다. 그에 앞서 주 창을 목업으로 다시 짜고 그 목업대로 만든다.
계획
- 주 창 목업을 만들어 겉모습을 먼저 정한다
- 필기 구현 방식을 기존 프로그램 조사로 정한다
- 필기 덧창과 유리 도구 막대를 넣는다
- 스크린샷을 셋째 탭과 녹화 중 단추로 넣는다
- 120·144·240fps 와 8K 출력, 코덱 고르기를 넣는다
- 설정 창을 아홉 묶음으로 나눈다
- 시험과 빌드, 설치 파일을 만든다
체크리스트 14/15
| 항목 | 상태 | 비고 |
|---|---|---|
| 목업 34판(1440×900, 좁은 세로 화면, 터치) | 완료 | |
| 필기 사전조사(기존 프로그램 다섯과 필기 앱 하나) | 완료 | |
| 필기 덧창(펜 넷·지우개 셋·강조선·도형 아홉·올가미·글·레이저) | 완료 | |
| 도구별 두께·색상·투명도·필압 하위 메뉴 | 완료 | |
| 필기와 막대가 녹화에 안 찍힘(WDA_EXCLUDEFROMCAPTURE, 프레임 합성) | 완료 | |
| 스크린샷 탭(PNG·JPG·WebP, 지연, 커서·필기·클립보드) | 완료 | |
| 녹화 중 스크린샷 단추와 단축키 | 완료 | |
| 120·144·240fps(Desktop Duplication 경로) | 완료 | |
| 출력 크기 1080p~8K, H.264 한계 넘으면 HEVC | 완료 | |
| 코덱 H.264·HEVC·AV1, 인코더 자동·CPU·NVENC·QSV·AMF | 완료 | |
| 예약 시작·무음 정지·절전 해제 | 완료 | |
| 엔진 시험 9묶음 81항목(리눅스·Windows Python) | 완료 | |
| 실기 41항목(Xvfb) | 완료 | |
| 실행 파일·설치 파일 빌드와 wine 실기 | 완료 | |
| 하드웨어 인코더·240fps·펜 필압·캡처 제외의 Windows 실기기 확인 | 미완 |
1. 판의 목적 및 범위
6편은 핵심기능 아홉을 확정하고 다음 판의 배정을 7편으로 미루었다. 이 판은 그 가운데 넷을 고른다. 고해상도(1), 고주사율(2), 스크린샷(3), 녹화 중 필기(5)다. 6편에서 v1.0.2.0 에 두었던 파일 분할(4)과 녹화 자동화(6)는 자동화의 일부(예약 시작, 무음 정지, 절전 해제)만 넣고 분할은 다음 판으로 보낸다. 넷을 고른 까닭은 모두 녹화 화면과 주 창의 모양을 바꾸는 일이라, 창을 한 번에 다시 짜는 편이 두 번 고치는 것보다 적게 들기 때문이다.
이 판은 기능보다 화면을 먼저 정하였다. HTML 목업을 34판까지 고치며 겉모습을 확정한 뒤 그대로 코드로 옮겼다. 코드 변경의 중심은 mainwindow.py 전면 재작성과 파일 일곱의 신설이다. 신설 파일은 widgets, settingsdialog, recordscreen, shotpage, ink, inkoverlay, shot 이다. 그 밖에 ffmpegtool.py 에 코덱 표와 인코더 고르기를, videowriter.py 에 출력 크기와 필기 합성을 더하였다. session.py 에 캡처 방식과 소리 경로를, settings.py 에 항목 마흔여섯을 더하였다. 패키지는 6,699줄이며 신설 파일이 4,017줄을 차지한다.
2. 주 창 재구성

이전 판의 주 창은 라디오 단추와 콤보 상자를 세로로 쌓은 설정 화면이었다. 이 판은 「무엇을 찍을지」를 카드 다섯으로 세우고, 카드를 고르면 그 대상의 세부 줄만 아래에 바뀌어 나오게 하였다. 카드는 모니터, 영역, 창, 마우스 주변, 게임이다. 6편의 「전체화면 앱」은 「게임」으로 이름을 바꾸고 「일반 캡처로 검게 나올 때」를 부제로 달았다. 창 카드의 세부 줄은 열린 창의 실제 목록을 보여 주고, 고른 창이 최소화돼 있으면 미리보기에 영역 대신 「창 숨김」을 띄운다. 모니터 세부 줄에서 모니터를 바꾸면 미리보기도 그 모니터로 바뀐다.
미리보기는 1초마다 mss 로 다시 찍고, 영역 대상에서는 미리보기 위에서 사각형을 끌어 고른다. 품질 줄은 셋이다. 품질(낮음·보통·높음·최고), 프레임(15·24·30·60·120·144·240fps), 출력 크기(원본·1080p·1440p·4K·8K·75%·50%)다. 오른쪽 열은 마이크와 시스템 소리의 켜기 스위치·장치·수준계, 웹캠의 켜기·구석·크기다. 아래 막대는 저장 경로, 변경, 열기, 여유 공간, 주석 입력, 녹화 시작 단추, 단축키 안내다.

음성 녹음 탭은 형식(MP3·M4A·WAV·FLAC)과 비트 깊이에 더해 「소리 쓰임」 줄을 얻었다. 영상에 섞을지, 따로 둘지, 둘 다 할지와 따로 둘 때의 형식을 고른다. 녹화 탭에서도 이 설정을 따르므로 영상 곁에 마이크만 담은 MP3 를 함께 남길 수 있다.

설정은 주 창에서 빼어 창 하나에 아홉 묶음(영상, 소리, 웹캠, 표식, 필기, 단축키, 저장, 자동, 화면)으로 모았다. 영상 묶음의 코덱·인코더·캡처 방식, 자동 묶음의 예약 시작 시각·무음 정지 분·절전 해제, 화면 묶음의 트레이 시작이 이 판에서 생긴 항목이다.
3. 녹화 중 화면

녹화를 시작하면 주 창이 둘째 쪽으로 바뀐다. 영상 자리는 VideoWriter 가 마지막으로 보낸 프레임을 0.2초마다 줄여 보여 주므로 커서·웹캠·필기가 실제 찍히는 그대로 보인다. 아래 첫 줄은 파일 크기, 실제 프레임, 놓친 프레임, 여유 공간, 마이크·시스템 수준계, 일시정지, 정지다. 둘째 줄은 표식 메모 입력, 표식 찍기, 필기, 표식 목록이다. 작은 막대로 가면 이 화면 대신 구석의 막대만 남고, 막대에도 필기와 스크린샷 단추가 있다.
주 창·덧창·막대는 모두 SetWindowDisplayAffinity 의 WDA_EXCLUDEFROMCAPTURE 로 캡처에서 제외한다. 이것이 「녹화에 안 찍힘」의 근거이며 Windows 10 2004 이상에서 동작하므로 요구 운영체제를 그 판으로 두었다.


4. 필기
4.1 구현 방식의 선택
코드에 앞서 기존 프로그램 다섯(녹화기 둘, 발표용 그리기 도구 둘, 방송용 녹화기 하나)과 태블릿 필기 앱 하나의 방식을 조사하였다. 녹화기와 그리기 도구는 투명한 최상위 창(덧창)에 그리고 그 창을 화면과 함께 찍는 방식이 대부분이다. 이 방식은 덧창의 도구 막대까지 찍히므로 막대를 화면 밖으로 치우거나 캡처 제외로 숨겨야 한다. 방송용 녹화기는 그리기를 소스로 두어 합성한다.
이 판은 두 길 가운데 「프레임 합성」을 골랐다. 덧창은 입력을 받고 사용자에게 보여 주는 일만 하고, 획 자료(InkState)를 VideoWriter 가 프레임마다 numpy 로 합성한다. 덧창 자체는 캡처에서 제외한다. 이렇게 하면 도구 막대와 선택 테두리가 영상에 들어가지 않고, 획의 투명도와 사라짐이 영상과 화면에서 같게 나온다. 획은 바뀔 때만 다시 그리고, 바뀌지 않은 프레임에서는 직전 그림을 합성하므로 1080p 30fps 에서 추가 부담이 작다. 사라지는 중인 획이 있을 때만 프레임마다 다시 그린다.
4.2 도구

표 1은 도구 일곱과 각 도구의 하위 메뉴를 나타낸다. 두께·색상·투명도는 전역 항목이 아니라 도구마다 따로 두었고, 도구 단추를 다시 누르면 하위 메뉴가 열린다. 두께는 pt 와 화면 높이 % 의 두 단위를 고를 수 있고 직접 입력도 된다. 색은 열여섯 가지, 투명도는 10% 단위다.
| 도구 | 갈래 | 하위 메뉴 |
|---|---|---|
| 펜 | 볼펜, 만년필, 붓, 형광펜 | 두께, 색상, 투명도, 필압(만년필·붓) |
| 지우개 | 지나간 자리만, 지나간 자리 넓게, 획 통째로 | 두께, 형광펜만 |
| 강조선 | 형광, 실선, 점선, 일점쇄선, 이점쇄선 × 가로, 세로, 자유 각도 | 두께, 색상, 투명도 |
| 도형 | 손으로 그림(인식), 직선, 화살표, 상자, 타원, 삼각형, 마름모, 오각형, 육각형, 별 | 두께, 색상, 채움 |
| 올가미 | 둘러 고르기 | 옮기기, 복제, 지우기 |
| 글 | 누른 자리에 입력 | 크기, 색상 |
| 레이저 | 지나간 자리가 곧 사라짐 | 없음 |

「지나간 자리만」 지우개는 획을 지나간 자리에서 쪼갠다. 획의 점 사이를 지우개 반지름 절반 간격으로 보간(densify)한 뒤 지우개가 지나간 선분과의 거리로 가른다. 지우개 포인터도 이동 사이를 보간하므로 빠르게 지나가도 빠지지 않는다. 지우개를 고른 뒤 획을 지워도 펜으로 돌아가지 않는다. 도형의 「손으로 그림」은 끝난 획의 꼭짓점 수와 닫힘으로 직선·화살표·상자·타원·삼각형을 인식한다. 나머지 도형은 종류를 고르고 끌어서 크기만 정한다.
「아래 창 조작」은 덧창을 입력에 투명하게(WindowTransparentForInput) 바꾸어 필기를 둔 채 아래 창을 쓰는 상태다. 이전 목업의 「통과모드」를 뜻이 보이게 고친 이름이다. 단축키는 필기 켜기 Ctrl+Alt+D, 아래 창 조작 Ctrl+Alt+G, 모두 지우기 Ctrl+Alt+0 이다. 덧창 안에서는 P·E·H·S·L·T·Q 로 도구를 바꾸고 Ctrl+Z·Y 로 되돌린다. 마우스, 태블릿 펜(필압), 손가락 터치의 세 입력을 받는다.

획은 결과 파일 곁에 「필기.json」으로도 남길 수 있다. 시각·도구·점·색을 담으므로 다음 판의 편집 기능에서 다시 쓸 수 있다.
5. 스크린샷

스크린샷은 녹화 탭의 곁 기능에서 셋째 탭으로 올라섰다. 대상은 모니터, 모든 모니터, 영역, 창의 넷이며 형식은 PNG·JPG(90)·WebP, 지연은 바로·3·5·10초다. 커서와 필기를 함께 담을지와 클립보드에도 복사할지를 고른다. 저장 폴더는 기본이 Pictures/CatchCatch 이고 이름 규칙은 녹화와 같다. 녹화 중에는 녹화 중 화면과 작은 막대의 단추, 단축키(Ctrl+Alt+S)로 찍으며 그때의 대상은 녹화 영역이다. 녹화 중이 아닐 때는 탭에서 고른 대상이다. 6편 본편에 「없음」으로 적었던 지연·클립보드·JPG 저장이 이 판에서 들어왔고 스크롤·연속·HDR 캡쳐는 남았다.

6. 고주사율·고해상도
프레임 선택에 120·144·240 을 더하였다. mss 의 GDI 캡처는 60fps 를 넘기기 어렵다. 60 을 넘는 값이나 캡처 방식을 「Desktop Duplication」으로 둔 경우에는 6편의 DesktopDupSource 를 쓴다. 이 판에서 그 원천에 crop 필터를 더해 모니터 통째가 아닌 영역·창 사각형도 받을 수 있게 하였다. 영역이 어느 모니터에 있는지는 monitor_of 로 찾는다. ddagrab 이 없는 ffmpeg 이면 60 으로 내리고 그 이유를 표시한다.
출력 크기는 원본 외에 1080p·1440p·4K·8K 와 75·50% 를 두었다. 코덱은 H.264·HEVC·AV1 이며 인코더는 자동·CPU·NVENC·QSV·AMF 가운데 고른다. 자동은 코덱별로 하드웨어 인코더를 한 번 탐지해 두고 없으면 CPU 인코더(libx264, libx265, libsvtav1)를 쓴다. 출력이 4096×2304 를 넘으면 H.264 규격 밖이므로 HEVC 로 바꾸고 안내한다. 하드웨어 인코더 탐지는 창이 뜬 2.5초 뒤 스레드에서 돌린다.
표 2는 이 판의 상한을 나타낸다. 어느 것도 Windows 실기기에서 확인한 값이 아니며, 경로와 명령과 결과 파일의 코덱·크기만 장치 없는 환경에서 확인하였다.
| 항목 | v1.0.1.0 | v1.0.2.0 | 확인한 범위 |
|---|---|---|---|
| 프레임 | 15·24·30·60 | 15·24·30·60·120·144·240 | 240 계획이 ddagrab 없는 환경에서 60 으로 내려감. 실제 240 수신은 미확인 |
| 출력 크기 | 원본·75%·50% | 원본·1080p·1440p·4K·8K·75%·50% | 50% 결과 파일 크기 확인. 8K 는 명령만 |
| 코덱 | H.264 | H.264·HEVC·AV1 | HEVC 결과 파일 확인(libx265). AV1 은 인코더 인수만 |
| 인코더 | 자동(NVENC·QSV·AMF) | 자동·CPU·NVENC·QSV·AMF 선택 | CPU 만. 하드웨어 셋은 명령 인수만 |
| 캡처 방식 | GDI, 전체화면 앱만 Desktop Duplication | 자동·GDI·Desktop Duplication 선택, crop 지원 | crop 필터 문자열 |
7. 자동화와 소리
예약 시작은 설정에 HH:MM 을 적으면 그 시각에 녹화 시작과 같은 경로를 탄다. 무음 정지는 마이크와 시스템 소리의 수준이 정한 분 동안 문턱 아래이면 멈춘다. 절전 해제는 녹화 중 SetThreadExecutionState 로 화면 끄기와 절전을 막는다. 소리는 영상에 섞기, 따로 두기, 둘 다의 셋이며 따로 둘 때 MP3·M4A·FLAC 으로 변환한다. 표식은 txt·csv 외에 하나만 남기는 선택이 생겼고 찍을 때 소리를 낼 수 있다.

8. 시험 결과
표 3은 시험 항목과 결과를 나타낸다. 엔진 시험은 8묶음에 9묶음(v1.0.2.0)을 더해 81항목이 되었고 리눅스 Python 과 wine 위의 Windows Python 에서 모두 통과하였다. 실기 시험은 새 화면에 맞추어 다시 썼으며 Xvfb 위에서 41항목을 통과하였다.
| 항목 | 방법 | 결과 |
|---|---|---|
| 필기 합성 | 320×180 프레임에 획 하나를 합성 | 획 자리 색 바뀜, 밖은 그대로. 판 번호가 같으면 다시 그리지 않음 |
| 지우개 | 직선 획 가운데를 「지나간 자리만」으로 지남 | 획이 둘로 쪼개지고 양끝은 남음 |
| 도형 인식 | 손으로 그린 상자·직선 점 열 | rect·line 으로 인식 |
| 되돌리기·JSON | 획 셋, 되돌리기 하나, 다시 하나 | 획 셋. JSON 에 도구·점·색 저장 |
| 출력 크기 | 3840×2160 을 1080p·50%·8K 로 | 1920×1080, 1920×1080, 7680×4320. 짝수 맞춤 |
| 코덱 고르기 | h264 에 8K 출력 | HEVC 로 바뀌고 안내문 생김. CPU 인코더 libx265 |
| 인코더 인수 | nvenc·qsv·amf·libx265·libsvtav1 | 품질 인수가 각 인코더 형식으로 나옴 |
| 스크린샷 저장 | PNG·JPG·WebP 로 저장 | 세 파일 생성, 이름 규칙 일치 |
| 소리 경로 | 따로 두기 + 영상 섞기, 백업 MP3 | 영상에 트랙 하나, 곁에 MP3 둘 |
| 실기: 필기 덧창 | Xvfb 에서 Ctrl+Alt+D 뒤 마우스 끌기 | 획 생성, 지우개로 쪼개짐, 상자 인식, 강조선, 올가미 고르기 |
| 실기: 녹화 중 스크린샷 | 녹화 중 Ctrl+Alt+S | 녹화 영역 크기의 PNG 저장, 최근 목록에 추가 |
| 실기: HEVC 50% | 2초 녹화 | 결과 코덱 hevc, 크기 절반 |
| 실기: 240fps 계획 | ddagrab 없는 ffmpeg | 60 으로 내려가고 안내문 표시 |
| 실행 파일(wine) | Ctrl+Alt+R·M·D·S 차례로 | 녹화·표식·필기 덧창과 유리 막대·스크린샷 저장·결과 mp4 |
| 설치 파일(wine) | WoW64 접두사에서 /S 설치 | Program Files/CatchCatch 190 MB, 제거 파일 생성 |
실행 파일은 wine 위의 PyInstaller 로 빌드하였다. 6편과 같이 ICU 대역 DLL 을 빌드와 실기 때만 두고 배포본에서 뺐다. 설치 파일은 6편에서 실기를 못 하였으나 이 판은 32비트 wine 접두사를 따로 만들어 조용한 설치까지 확인하였다. 설치 파일은 83개 파일(189 MB)을 담아 50.6 MB 다.
wine 에서 겪은 것이 셋이다. 첫째, 하드웨어 인코더 탐지 스레드를 창을 만드는 중에 돌리면 wine 이 죽어 창이 뜬 뒤로 미루었다. 둘째, 글꼴 밖 글자(이모지)를 단추에 쓰면 간헐적으로 죽어 기본 다국어 평면 안의 기호로 바꾸었다. 셋째, 한글 곁 파일 이름(표식.txt, 필기.json)을 만들지 못하는 환경이 있어 영문 이름으로 물러서게 하였다. 셋 다 Windows 실기기에서는 나지 않을 것으로 보이나 고친 쪽이 안전하다.
9. 한계 및 남은 일
wine 과 Xvfb 에는 합성기와 캡처 제외가 없어 덧창이 검게 보이고 주 창이 영상에 찍힌다. 따라서 「녹화에 안 찍힘」과 투명 덧창의 겉모습, 하드웨어 인코더, 실제 240fps 수신, 태블릿 펜의 필압은 모두 Windows 실기기 확인 항목으로 남는다. 터치 입력은 목업에서 휴대 전화로 확인하였고 코드는 Qt 의 터치 이벤트를 받으나 실기기 확인은 하지 못하였다.
6편 본편의 핵심기능 아홉 가운데 이 판으로 셋(스크린샷, 필기, 고해상도·고주사율은 「경로 있음, 실기 전」)이 바뀌었다. 다음 판 v1.0.3.0 은 파일 분할(4)과 녹화본 기본 편집(7)을 둔다. 필기 JSON 을 편집 기능에서 다시 그리는 일이 여기에 들어간다.
첨부파일 2개 · 52.0 MB
파일 이름을 누르면 내려받습니다.