제미나이 프로와 함께한 디버깅
간략한 개요
최근 진행 중이던 개인 프로젝트들에서 묘한 버그가 발견됐다.
비디오 품질 측정을 하는데 결과가 일부만 저장되는 문제가 터진 것.
또 하나는, Exif를 수정하는 앱이 일부 데이터를 파괴하는 것.
둘 다 오랫동안 수정보완 중이라 오히려 디버깅이 까다로웠다.
결국 제미나이에게 도움을 요구했다.
1. 영상 분석 툴 파이프라인 교정 및 리팩토링
비디오 인코더의 화질 기준 파라미터를 정립하고 있었다.
VMAF, PSNR, SSIM 를 추출해서 적절한 파라미터를 정하는 과정이었다.
이 과정에서 세 가지 구조적 버그를 찾아 교정했다.
1) VMAF 입력 순서 반전과 대참사 (ㅋㅋㅋ)
그동안 습관대로 [원본][사본] 순서로 입력했다.
이대로 테스트를 몇 년간 진행해왔었다.
하지만 AI가 공식 레퍼런스를 근거로 순서 지적을 했다.
확인 결과 정말 순서가 반대였다.
FFmpeg 공식 명세:
The first input is the distorted video, and the second input is the reference video.(첫 번째가 사본, 두 번째가 원본이다.)
비대칭 연산을 하는 VMAF 특성상 순서가 바뀌면 왜곡이 생긴다.
순서를 교정시키니 원래의 데이터와 오차가 크게 나왔다.
결국 기존 벤치마크 데이터를 모두 폐기했다.
전체 코덱을 처음부터 다시 테스트해야 하는 참극을 맞이한 것이다.
그래도 올바른 궤도를 찾았으니 다행이다.
2) split 필터 부재로 인한 프레임 싱크 미스 가능
기존에는 하나의 스트림을 분기 없이 연속으로 필터로 보냈다.
필터 간 연산 속도 차이로 버퍼가 밀릴 수 있다는 뜻이다.
제미나이의 가이드에 따라 split 필터를 적용하도록 생성 코드를 수정시켰다.
각 측정 엔진에 독립된 프레임 사본을 보내도록 고칠 수 있었다.
3) Pandas 인덱스의 배신과 정렬 버그
추출된 CSV 결과를 파이썬으로 가공할 때도 말썽이었다.
자연어 정렬(natsort)을 적용해도 데이터가 튀었다.
제미나이가 판다스(Pandas) 내부 메커니즘에 의한 오류 포인트를 짚어냈다.
sort_values로 행 순서는 정렬됨- 하지만 고유 라벨인
index번호는 리셋되지 않음 - 이 상태로 컬럼을 덮어씌우면 인덱스 기준으로 매핑됨
- 결국 다른 행의 데이터가 서로 꼬이는 문제가 발생함
정렬 직후 .reset_index(drop=True)를 결합했다.
이제야 의도한 대로 정렬된 그래프가 엑셀에 깔끔히 그려졌다.
이제서야 완벽하게 나온 AV1 인코더의 성능 비교
2. CExifInfo 라이브러리 오류 해결
이 쪽은 아예 처음 만든지 15년은 된 개인 라이브러리다.
Exif 정보에서 필요한 내용만 제거하거나 추가하도록 만든 라이브러리.
그런데, 리팩토링을 하는 과정에서 날짜/시간 정보가 중간에서 잘리는 문제가 생겼다.
또 가끔씩은 카메라 제조사 정보도 날려주기도 하는 건 덤이고.
한땀한땀 만든 코드지만, 처음 만들었을 때의 자료가 있는 것도 아니고, 기억이 나지도 않는다.
며칠을 매달렸다가 이건 결국 안티그래비티한테 떠넘겼다.
귀신같이 오류 두 개를 찾아줬다.
하나는 memmove를 안전하게 써야 할 위치에서 memcpy를 사용해 오버랩이 발생한 것이었다.
그리고, 또 하나는 평범한(응?) 파라미터 오류.
포스팅을 마치며
난 여전히 AI에게 코드 작성을 떠넘기는 것은 부정적인 입장이다.
만드는 것이야 간단하지만, 결국 내 머리에 남는 건 없다는 근본적인 문제가 너무 크다.
하지만, 디버깅이나 리팩토링은 좀 다른 영역이다.
맥락을 정확히 이해하는 디버깅 파트너 역할을 충실히 해준다.
이걸 보면서 스스로도 큰 공부가 되고 있고.
덧. 그래서 저 테스트 언제 다 끝내지?
