안녕하세요! 오늘은 콘텐츠 제작자들의 고민거리인 PDF 워터마크 제거를 자동화하는 방법을 알아보겠습니다.
특히 자동으로 생성한 슬라이드 자료를 유튜브 영상이나 블로그에 활용할 때, 우측 하단의 로고를 배경 손상 없이 깔끔하게 지우는 기술적인 해결책을 공유합니다.
1. 왜 이 코드가 특별한가요?
기존의 편집 도구들은 단순히 흰색으로 가리거나 페이지를 잘라내지만, 이 파이썬 스크립트는 다음과 같은 지능적인 기능을 수행합니다.
- 지능형 색상 추출: 워터마크 바로 옆의 픽셀 색상을 실시간으로 읽어와서 배경색이 무엇이든(남색, 검정, 흰색 등) 자연스럽게 덮어줍니다.
- 물리적 데이터 삭제: 단순히 눈속임으로 가리는 것이 아니라, PDF 내부의 이미지/텍스트 레이어 데이터를 실제로 삭제하여 용량을 최적화합니다.
- 일괄 처리: 100장이 넘는 슬라이드도 단 1~2초 만에 모두 처리합니다.
2. 사전 준비
가장 먼저 PDF 처리 라이브러리인 PyMuPDF를 설치해야 합니다.
pip install pymupdf
3. 완성된 전체 코드 (Smart Remover)
이 코드는 주변 색상 자동 감지 방식을 기본으로 하며, 상황에 따라 쓸 수 있는 하단 크롭 방식까지 포함된 통합 솔루션입니다.
import fitz # PyMuPDF 라이브러리
import os
import datetime
def remove_pdf_watermark(input_path):
"""
PDF 워터마크를 제거하는 통합 함수
1. 주변 배경색 샘플링 후 덮어쓰기
2. 데이터 레이어 완전 삭제
"""
# 결과 파일명 설정
output_path = "Cleaned_" + input_path
# 1. PDF 문서 열기
doc = fitz.open(input_path)
print(f"\n[분석 시작] 대상: {os.path.basename(input_path)}")
for i, page in enumerate(doc):
rect = page.rect
# 2. 워터마크가 위치한 좌표 영역 (우측 하단)
# PDF 로고 위치에 맞춰 정밀하게 설정된 좌표입니다.
target_area = fitz.Rect(rect.x1 - 160, rect.y1 - 45, rect.x1 - 5, rect.y1 - 5)
# 3. [지능형 기능] 주변 배경색 자동 채취 (Color Sampling)
# 워터마크 바로 왼쪽(-170 지점)의 색상을 읽어옵니다.
sample_point = fitz.Rect(rect.x1 - 175, rect.y1 - 25, rect.x1 - 170, rect.y1 - 20)
pix = page.get_pixmap(clip=sample_point)
# 첫 번째 픽셀의 RGB를 가져와 0~1 사이 값으로 변환
rgb = pix.pixel(0, 0)
sampled_color = (rgb[0]/255, rgb[1]/255, rgb[2]/255)
# 4. 레이어 삭제 및 배경색 메우기
# 해당 영역을 '교정(Redact)' 후보로 등록하고 채취한 색상을 입힙니다.
page.add_redact_annot(target_area, fill=sampled_color)
# 5. 실제 데이터 구조에서 이미지/텍스트 객체 완전 제거
page.apply_redactions(images=fitz.PDF_REDACT_IMAGE_ALL)
if (i + 1) % 10 == 0:
print(f"> {i + 1}페이지 처리 중...")
# 6. 최적화 저장 (삭제된 데이터 공간을 청소하여 용량 감소)
doc.save(output_pdf, garbage=4, deflate=True)
doc.close()
print("-" * 40)
print(f"[완료] 총 {len(doc)}페이지 워터마크 제거 성공!")
print(f"[저장] {output_path}")
# 실행
if __name__ == "__main__":
FILENAME = "your_file.mp4" # 본인의 PDF 파일명을 넣으세요
if os.path.exists(FILENAME):
remove_pdf_watermark(FILENAME)
4. 코드 핵심 원리 들여다보기
① 주변 색상 샘플링 (The Science of Sampling)
워터마크가 있는 위치(rect.x1 - 160)의 바로 옆 지점을 캡처하여 배경색을 알아냅니다. 이 방식 덕분에 슬라이드 배경이 진한 남색이든, 순백색이든 코드를 수정할 필요 없이 알아서 대응합니다.
② 교정(Redaction) 기술의 활용
단순히 그 위에 사각형을 그리는 draw_rect와 달리, apply_redactions는 레이어 자체를 물리적으로 지워버립니다. 따라서 워터마크가 이미지 파일(비트맵)로 박혀 있어도 깨끗하게 도려낼 수 있습니다.
③ 픽셀 깨짐(Aliasing) 대응
로고를 확대했을 때 보이는 픽셀 잔상을 완전히 없애기 위해, 로고의 실제 크기보다 상하좌우로 약 5~10픽셀 정도 더 넉넉하게 영역을 잡아 지우도록 설계되었습니다.
5. 결과 확인 및 활용 팁
- 유튜브 영상 제작 시: 이 코드로 정제된 PDF를 Vrew(브루)나 영상 편집기에 넣으세요. 우측 하단이 깔끔해져서 자막을 넣거나 본인의 채널 로고를 넣기에 최적의 상태가 됩니다.
- 그라데이션 배경 주의: 배경이 단색이 아닌 복잡한 사진이나 급격한 그라데이션인 경우, 잘라내기(Crop) 방식을 병행하는 것이 좋습니다.
마치며
콘텐츠의 퀄리티는 한 끗 차이에서 결정됩니다. 자동 생성되는 PDF의 강력한 기능은 그대로 누리면서, 파이썬 자동화로 워터마크라는 작은 장애물까지 제거해 보세요!
여러분의 창작 활동이 더 빛나길 응원합니다. 😊
'디자인 인사이트 > 동영상 만들기' 카테고리의 다른 글
| [Python+FFmpeg] 내 마음대로 설계하는 자동 영상 제작 스크립트 만들기 (0) | 2026.02.04 |
|---|---|
| [Python] 이미지 워터마크 완벽 제거: OpenCV 인페인팅과 좌표 설정법 (0) | 2026.02.04 |
| 슬라이드 강의·해설 영상에서 Python으로 장면 전환 자동 추출하기 (0) | 2026.02.04 |
| "열심히 만들었는데 소리가 작대요ㅠㅠ" 유튜브가 좋아하는 '최종 음량' 맞추는 법 (리미터 & LUFS) (0) | 2026.01.22 |
| "속삭일 땐 안 들리고, 웃을 땐 귀가 터져요" 들쑥날쭉한 목소리를 꽉 잡아주는 '컴프레서' 사용법 (0) | 2026.01.22 |
댓글