동영상 특정 영역 모자이크(흐리게) 하기

준비물: python, ffmpeg

동영상 파일을 input.mp4 로 복사 또는 수정한다.
아래 파이썬 코드를 이용하여 흐리게 할 영역 및 시간을 구한다.

import cv2

video_path = "input.mp4"
cap = cv2.VideoCapture(video_path)

frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
fps = cap.get(cv2.CAP_PROP_FPS)

cv2.namedWindow("Video Viewer")

roi_start = None
roi_end = None
dragging = False
current_frame = None

def draw_rectangle(event, x, y, flags, param):
    global roi_start, roi_end, dragging
    if event == cv2.EVENT_LBUTTONDOWN:
        roi_start = (x, y)
        dragging = True
    elif event == cv2.EVENT_MOUSEMOVE and dragging:
        roi_end = (x, y)
        redraw_frame()
    elif event == cv2.EVENT_LBUTTONUP:
        roi_end = (x, y)
        dragging = False
        x0, y0 = roi_start
        x1, y1 = roi_end
        x, y = min(x0, x1), min(y0, y1)
        w, h = abs(x1 - x0), abs(y1 - y0)

        if w > 0 and h > 0:
            print(f"{w}:{h}:{x}:{y}")

        redraw_frame()

def redraw_frame():
    if current_frame is None:
        return
    frame = current_frame.copy()
    if roi_start and roi_end:
        x0, y0 = roi_start
        x1, y1 = roi_end
        w = abs(x1 - x0)
        h = abs(y1 - y0)
        if w > 0 and h > 0:
            cv2.rectangle(frame, roi_start, roi_end, (255, 0, 0), 2)
    frame_number = cv2.getTrackbarPos("Frame", "Video Viewer")
    time_text = f"Time: {frame_number / fps:.2f}s"
    cv2.putText(frame, time_text, (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    cv2.imshow("Video Viewer", frame)

def on_trackbar(val):
    global current_frame
    cap.set(cv2.CAP_PROP_POS_FRAMES, val)
    ret, frame = cap.read()
    if ret:
        current_frame = frame.copy()
        redraw_frame()

cv2.setMouseCallback("Video Viewer", draw_rectangle)
cv2.createTrackbar("Frame", "Video Viewer", 0, frame_count - 1, on_trackbar)

# 초기 프레임 표시
on_trackbar(0)

while True:
    if cv2.getWindowProperty("Video Viewer", cv2.WND_PROP_VISIBLE) < 1:
        break
    key = cv2.waitKey(100)
    if key == 27:
        break

cap.release()
cv2.destroyAllWindows()

그리고 ffmpeg.exe 을 이용하여 아래와 같이 사용한다.
영역값은 드래그 했을때 출력된 값 (예: 100:100:40:80)
시작시간,종료시간은 초단위 (예: 3.5)

ffmpeg -y -i input.mp4 -filter_complex "[0:v]crop={영역값},boxblur=3:1[blur]; [0:v][blur]overlay=43:65:enable='between(t,{시작시간},{종료시간})'" -c:a copy output.mp4

댓글

알짜게시판

리눅스 Apache에서 GPTBot·Amazonbot·AhrefsBot의 게시판 이미…
기타 Midjourney, DALL·E, ChatGPT에서 Y2K 파스텔 UI 프롬프…
리눅스 Cloudflare R2 자동 업로드 구성하기. 특정 폴더에 파일…
워드프레스 워드프레스 7.0 관리자 링크 색상 변경 후 이전 색상으…
워드프레스 캐시 환경에서 AJAX 댓글(코멘트) 분리로 서버 응답시간…
리눅스 아파치 일반 계정 파일 접근 권한 설정과 mod-ruid2 적…
델파이 Delphi IDE 메인 폼 안열림 dproj 설정으로 해결
개발팁 VSCode 한국어 설정법, Configure Display Language로 U…
기타 RustDesk 자체 서버 구축으로 공용 서버 로그인 문제 해…
리눅스 Dante SOCKS5 프록시 서버 구축 및 설정
윈도우 윈도우 실행파일(exe) 서비스 등록 자동화 쉽게 하는 방…
기타 CLIProxyAPI Windows 설치 가이드
워드프레스 그누보드7 데이터를 WordPress WXR로 변환하기
기타 Ollama 설치 경로 C드라이브 고정 문제 해결 및 드라이…
개발팁 Apache Access Log 기반 도메인별 방문자 카운터 구현
윈도우 ZImage AI 이미지 생성 환경 구축 방법
윈도우 파일 복사 후 실행 배치파일 - 에러 감지 포함
개발팁 네이버 검색 Open API
개발팁 네이버 검색광고 키워드 도구 API 검색
개발팁 MariaDB column_stats 테이블 오류 해결 방법
개발팁 PHP-FPM 에러 로그 실시간 모니터링
윈도우 윈도우11 업데이트 후 네트워크 드라이브 접근 불가 문…
개발팁 다국어 번역 함수 구현 방법
워드프레스 "치명적인 오류가 발생했습니다" 디버깅 가이드
리눅스 Apache 웹 로그 분석하기 – awk와 GoAccess 활용
길호넷 칼무리 - 외부 명령으로 캡처 자동화하기
윈도우 윈도11 강제업데이트 피하고 윈도10 계속 쓰기
리눅스 PHP 파일 업로드 용량 늘리기
개발팁 애드센스 충돌 문제 해결하기
파이썬 Python Playwright로 Edge 브라우저 제어하기