손상된 MP4 영상 복구: UnTrunc 활용 실전 가이드

촬영 중 갑작스럽게 중단된 영상, 전송 오류로 깨진 파일, 저장 장치 문제로 손상된 소중한 기록물—이러한 상황에 처했다면 UnTrunc가 해결책이 될 수 있다. FFmpeg 기반으로 동작하는 이 오소스 유틸리티는 정상 참조 파일의 메타데이터 구조를 분석하여 손상된 MP4/MOV 컨테이너를 재구성한다.

UnTrunc의 기술적 특성

  • 스트리밍 처리 아키텍처: 파일 전체를 메모리에 로드하지 않고 청크 단위로 처리
  • 대용량 지원: 4GB 이상의 고해상도 영상도 안정적 처리
  • 하드웨어 특화 최적화: GoPro HERO 시리즈, DJI 드론, Sony α 카메라 등의 고유 atom 구조 인식
  • 멀티 코어 활용: 병렬 디코딩으로 처리 속도 향상

사전 준비사항

항목요구사항참고
대상 파일손상된 MP4/MOV/M4V헤더 손상 가능, 데이터 영역 존재 필요
참조 파일동일 기기·동일 설정 촬영해상도, 코덱, 프레임레이트 일치 필수
환경FFmpeg 4.0+ 또는 정적 빌드libavformat-dev, libavcodec-dev

설치 및 빌드 방법

Ubuntu/Debian: 패키지 의존성 설치

sudo apt update && sudo apt install -y \
    build-essential \
    libavformat-dev \
    libavcodec-dev \
    libavutil-dev \
    libswresample-dev \
    git

git clone https://github.com/anthwlock/untrunc.git
cd untrunc
make -j$(nproc)
sudo install -m 755 untrunc /usr/local/bin/

macOS: Homebrew 활용

brew install ffmpeg
git clone https://github.com/anthwlock/untrunc.git
cd untrunc && make && make install

Windows: MSYS2 환경

pacman -S mingw-w64-x86_64-ffmpeg mingw-w64-x86_64-gcc make
git clone https://github.com/anthwlock/untrunc.git
cd untrunc && make

복구 실행 프로세스

기본 명령 구조

untrunc [옵션] <참조_영상.mp4> <손상_영상.mp4>

실전 적용 예시

# 진단 모드로 구조 분석
untrunc -v -i gopro_ref_4k.mp4 corrupted_gopro.mp4

# 출력 파일명 지정
untrunc -o recovered_output.mp4 sony_a7siii_ref.mov damaged_clip.mov

# 특정 샘플 범위만 복구 (디버깅용)
untrunc -s 0 -e 1000 reference.mp4 truncated.mp4

옵션 플래그 상세

-vverbose 모드: atom 구조 상세 출력
-i정보 모드: 복구 없이 메타데이터만 분석
-o출력 경로 지정 (기본값: 원본명_fixed.mp4)
-s/-e시작/종료 샘플 번호 지정
-m메모리 매핑 모드 (초대용량 파일용)

고급 활용 기법

배치 처리 스크립트

#!/bin/bash
REF="reference_gh5.mp4"
OUTPUT_DIR="./recovered_$(date +%Y%m%d)"

mkdir -p "$OUTPUT_DIR"

for damaged in ./corrupted/*.MP4; do
    base=$(basename "$damaged" .MP4)
    echo "Processing: $base"
    
    untrunc -v -o "$OUTPUT_DIR/${base}_fixed.mp4" \
        "$REF" "$damaged" 2> "$OUTPUT_DIR/${base}.log"
    
    if [ $? -eq 0 ]; then
        echo "✓ Success: $base"
    else
        echo "✗ Failed: $base (check log)"
    fi
done

Docker 컨테이너화 실행

# Dockerfile
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
    libavformat-dev libavcodec-dev libavutil-dev \
    build-essential git && \
    git clone https://github.com/anthwlock/untrunc.git /opt/untrunc && \
    cd /opt/untrunc && make && make install

WORKDIR /workspace
ENTRYPOINT ["untrunc"]

# 빌드 및 실행
docker build -t video-recovery .
docker run --rm -v $(pwd):/workspace video-recovery \
    /workspace/ref.mp4 /workspace/damaged.mp4

문제 해결 매트릭스

증상원인 분석해결 방안
moov atom not found 참조 파일 헤더 손상 또는 형식 불일치 다른 참조 파일 사용, ffmpeg -i ref.mp4 -c copy repaired_ref.mp4로 재포맷
Failed to parse atoms 손상 파일의 데이터 영역이 심각하게 파괴 dd로 원시 데이터 추출 후 시도, 또는 전문 복구 서비스 이용
복구 후 화면 깨짐/색상 왜곡 코덱 특수 파라미터 불일치 정확히 동일 기기·동일 해상도·동일 프레임레이트의 참조 파일 확보
메모리 할당 실패 32비트 환경 또는 메모리 제한 64비트 빌드 확인, -m 플래그로 메모리 매핑 모드 활성화
오디오 싱크 불일치 타임스케일 또는 샘플 카운트 오차 ffmpeg -itsoffset로 후처리 보정

내부 동작 메커니즘

UnTrunc의 핵심 알고리즘은 다음 단계로 구성된다:

  1. 참조 파일 파싱: ftyp, moov, trak, mdat atom 계층 구조 추출
  2. 코덱 컨텍스트 생성: avcodec에서 비디오/오디오 스트림 파라미터 획득
  3. 손상 파일 스캔: mdat 영역에서 유효한 NAL 유닛 또는 오디오 프레임 패턴 탐색
  4. 샘플 테이블 재구성: stsz, stco, stts 박스 재계산
  5. 컨테이너 재조립: 수정된 moov + 복구된 mdat로 새 파일 생성

성능 최적화 팁

  • NVMe SSD 활용: 임시 파일 I/O 병목 제거
  • 참조 파일 경량화: 10초 분량의 짧은 클립으로도 충분 (전체 파일 불필요)
  • 병렬 처리: 여러 손상 파일에 대해 GNU parallel 활용
  • FFmpeg 사전 검증: ffprobe -v error ref.mp4로 참조 파일 무결성 확인

대안 도구 비교

도구장점단점적합한 상황
UnTrunc오픈소스, 경량, 코맨드라인GUI 없음, 기술 지식 필요치 처리, 자동화 파이프라인
MP4Repair상용, GUI 제공유료, 클로즈드 소스단일 파일, 빠른 결과 필요
Grau GmbH온라인 서비스, 설치 불필요파일 크기 제한, 프라이버시 우려민감하지 않은 소형 파일
ffmpeg -err_detect기본 탑재, 추가 설치 없음복구 능력 제한적경미한 손상, 긴급 대응

데이터 보존 권장사항

복구 작업 전 반드시 원본 파일의 바이트단위 백업을 생성할 것:

# 원본 보존용 이미지 생성
dd if=/dev/sdX of=damaged_disk_backup.img bs=4M status=progress

# 또는 파일 레벨 복사
cp -a damaged.mp4 damaged.mp4.backup
chattr +i damaged.mp4.backup  # 변경 불가 속성 설정 (Linux)

복구된 파일의 무결성은 ffmpeg -v error -i recovered.mp4 -f null - 명령으로 프레임 단위 검증할 수 있다.

태그: untrunc mp4-repair video-recovery ffmpeg container-format

6월 17일 18:15에 게시됨