교통사고나 주차장 접촉사고가 발생해 CCTV 영상을 받았는데 컴퓨터에서 열리지 않는 경우가 있습니다.
파일 확장자가 낯설거나 화면은 나오지만 소리가 없고, 재생속도가 이상하게 느껴질 수도 있습니다.
CCTV는 제조사마다 영상 저장 방식과 코덱이 다릅니다.
일부 장비는 전용 플레이어가 있어야 재생할 수 있고, 여러 카메라의 영상과 시간정보가 하나의 파일에 저장되기도 합니다.
이때 활용할 수 있는 무료 오픈소스 도구가 FFmpeg입니다.
FFmpeg는 영상과 음성, 자막, 관련 메타데이터를 처리하는 라이브러리와 명령줄 도구 모음입니다. 다양한 멀티미디어 형식을 분석하고 변환하는 데 사용할 수 있습니다.
먼저 원본을 복사해야 하는 이유
CCTV 파일을 편집하거나 변환하기 전에 원본을 별도로 보관해야 합니다.
권장 폴더 구조는 다음과 같습니다.
01_원본
02_작업용복사본
03_MP4변환본
04_정지화면
05_작업기록
원본 파일은 이름을 바꾸거나 덮어쓰지 않는 것이 좋습니다.
법적 분쟁에 사용될 가능성이 있다면 파일의 해시값과 전달받은 날짜, 제공자를 기록해야 합니다.
FFmpeg로 할 수 있는 작업
- 영상과 음성 코덱 확인
- 영상 해상도 확인
- 프레임 속도 확인
- 재생시간 확인
- MP4 등 일반 형식으로 변환
- 필요한 구간 추출
- 정지화면 저장
- 음성만 별도 추출
- 화면 크기 조정
- 밝기와 대비 조정
- 여러 파일 연결
그러나 FFmpeg는 수사기관의 전문 영상감정 프로그램을 자동으로 대신하는 도구가 아닙니다.
영상을 변환하면 파일 구조와 메타데이터, 압축 상태가 변경될 수 있으므로 변환본을 원본이라고 표시해서는 안 됩니다.
파일정보 확인하기
FFmpeg 패키지에는 영상정보를 확인하는 ffprobe 도구가 포함됩니다.
명령창에서 다음과 같이 입력할 수 있습니다.
ffprobe "cctv-original-file"
출력 결과에서는 다음 정보를 확인할 수 있습니다.
- 영상 코덱
- 음성 코덱
- 해상도
- 프레임 속도
- 재생시간
- 영상 스트림 수
- 메타데이터
파일 확장자가 MP4라고 해도 내부 코덱이 일반 프로그램에서 지원되지 않을 수 있습니다.
반대로 확장자가 낯설어도 FFmpeg가 내부 스트림을 읽을 수 있는 경우가 있습니다.
일반 MP4로 변환하기
원본을 보존한 뒤 작업용 복사본을 변환합니다.
가장 기본적인 예는 다음과 같습니다.
ffmpeg -i "original-file" "converted-video.mp4"
이 방식은 영상을 다시 압축할 수 있으므로 화질과 프레임이 일부 달라질 수 있습니다.
원본 코덱을 그대로 복사할 수 있는 경우에는 다음과 같은 스트림 복사 방식도 검토할 수 있습니다.
ffmpeg -i "original-file" -c copy "copied-video.mp4"
다만 원본 스트림이 MP4 컨테이너와 호환되지 않으면 실패할 수 있습니다.
필요한 구간만 추출하기
오후 2시 10분부터 30초 구간을 별도로 만들고 싶다면 다음과 같은 방식으로 사용할 수 있습니다.
ffmpeg -ss 00:02:10 -i "original-file" -t 00:00:30 "selected-section.mp4"
여기서 시간은 영상 파일의 시작점을 기준으로 합니다.
CCTV 화면에 표시된 실제 시간과 파일 내부의 재생시간은 다를 수 있으므로 별도로 기록해야 합니다.
특정 장면을 사진으로 저장하기
영상 시작 후 1분 15초 지점의 장면을 저장하는 예입니다.
ffmpeg -ss 00:01:15 -i "original-file" -frames:v 1 "frame.png"
연속된 장면을 초당 한 장씩 저장하려면 다음처럼 사용할 수 있습니다.
ffmpeg -i "original-file" -vf fps=1 "frame-%04d.png"
정지화면을 저장할 때는 원본 파일명과 장면 위치를 함께 기록하는 것이 좋습니다.
CCTV 화면의 시간을 그대로 믿으면 안 되는 이유
CCTV 화면에 표시된 날짜와 시간이 실제 시간과 다를 수 있습니다.
- 장비 시간 설정 오류
- 서머타임 적용 오류
- 정전 후 초기화
- 네트워크 시간 동기화 실패
- 카메라와 녹화기의 시간 차이
- 사용자의 임의 설정
교통사고나 범죄 사건에 사용한다면 카드 결제시간, 통화기록, 다른 CCTV, 경찰 출동기록 등 정확한 시간이 확인되는 자료와 비교해야 합니다.
하지 말아야 할 행동
- 원본 파일에 덮어쓰기
- 변환본을 원본이라고 표시
- 화면을 스마트폰으로 다시 촬영
- 시간표시 부분을 잘라내기
- 과도한 선명화
- 인공지능으로 번호판이나 얼굴을 임의 생성
- 사용한 명령과 설정을 기록하지 않기
- 전용 플레이어를 삭제하기
FFmpeg가 열지 못하는 경우
CCTV 제조사의 독자 암호화나 전용 구조가 사용됐을 수 있습니다.
이 경우에는 다음 자료를 함께 확보해야 합니다.
- 제조사 전용 플레이어
- 내보내기 프로그램
- 파일이 들어 있던 전체 폴더
- 설정 파일
- 코덱 설치파일
- 녹화장치 모델명
- 영상 내보내기 방법
- 원본 저장장치
동영상 파일 하나만 따로 복사하면 주변 설정정보가 없어 열리지 않을 수 있습니다.
Windows에서 FFmpeg 사용하는 방법
1단계: 프로그램을 준비합니다
FFmpeg 공식 사이트는 소스코드와 함께 Windows용 빌드 제공처를 안내합니다. 공식 다운로드 페이지에서 연결된 빌드를 사용하고, 무작위 자료실이나 광고성 다운로드 페이지는 피하는 것이 좋습니다.
압축을 풀면 일반적으로 다음 파일이 있습니다.
ffmpeg.exe
ffprobe.exe
ffplay.exe
2단계: 작업 폴더를 만듭니다
예를 들어 C 드라이브에 다음 폴더를 만듭니다.
C:\CCTV_WORK
폴더 안을 다음과 같이 구성합니다.
CCTV_WORK
├─ original
├─ converted
├─ frames
└─ notes
원본 파일은 original에 복사하고 수정하지 않습니다.
3단계: 명령 프롬프트를 엽니다
파일 탐색기에서 FFmpeg가 있는 폴더로 이동한 뒤 주소창에 다음을 입력합니다.
cmd
Enter를 누르면 해당 폴더 위치에서 명령 프롬프트가 열립니다.
4단계: FFmpeg가 실행되는지 확인합니다
ffmpeg -version
버전과 빌드 정보가 나오면 정상입니다.
5단계: CCTV 파일정보를 확인합니다
ffprobe -hide_banner "C:\CCTV_WORK\original\camera01.avi"
출력에서 다음을 확인합니다.
Duration
Video
Audio
Resolution
fps
Codec
6단계: 상세정보를 JSON으로 저장합니다
작업기록을 남기려면 다음처럼 사용할 수 있습니다.
ffprobe -v quiet -print_format json -show_format -show_streams ^
"C:\CCTV_WORK\original\camera01.avi" ^
> "C:\CCTV_WORK\notes\camera01-info.json"
7단계: 화질 손실 없이 컨테이너만 바꿔봅니다
원본 코덱이 MP4와 호환될 때는 다음 명령을 사용할 수 있습니다.
ffmpeg -i "C:\CCTV_WORK\original\camera01.avi" ^
-c copy "C:\CCTV_WORK\converted\camera01-copy.mp4"
-c copy는 영상과 음성을 다시 압축하지 않고 컨테이너에 복사하는 방식입니다.
호환되지 않으면 오류가 발생할 수 있습니다.
8단계: 일반 MP4로 다시 인코딩합니다
스트림 복사가 실패하거나 재생 호환성이 낮다면 다음처럼 변환할 수 있습니다.
ffmpeg -i "C:\CCTV_WORK\original\camera01.avi" ^
-c:v libx264 -crf 18 -preset medium ^
-c:a aac -b:a 192k ^
"C:\CCTV_WORK\converted\camera01-h264.mp4"
여기서 변환본은 원본과 구분해야 합니다.
9단계: 필요한 구간을 추출합니다
영상 시작 후 10분부터 45초 동안 추출하는 예입니다.
ffmpeg -ss 00:10:00 ^
-i "C:\CCTV_WORK\original\camera01.avi" ^
-t 00:00:45 ^
-c:v libx264 -c:a aac ^
"C:\CCTV_WORK\converted\camera01-10m-45s.mp4"
10단계: 정지화면 한 장을 저장합니다
영상 시작 후 12분 8초 지점입니다.
ffmpeg -ss 00:12:08 ^
-i "C:\CCTV_WORK\original\camera01.avi" ^
-frames:v 1 ^
"C:\CCTV_WORK\frames\camera01-12m08s.png"
11단계: 1초마다 이미지를 추출합니다
ffmpeg -i "C:\CCTV_WORK\original\camera01.avi" ^
-vf fps=1 ^
"C:\CCTV_WORK\frames\frame-%05d.png"
영상이 길면 이미지가 매우 많이 생성됩니다.
필요한 구간을 먼저 자른 뒤 실행하는 것이 좋습니다.
12단계: 화면비를 확인합니다
사람이나 자동차가 가로 또는 세로로 늘어나 보인다면 무작정 화면 크기를 바꾸지 않습니다.
먼저 ffprobe 결과와 CCTV 전용 플레이어 화면을 비교합니다.
화면비가 잘못된 상태에서 인물 체형이나 차량 모양을 판단하면 안 됩니다.
핵심 정리
FFmpeg는 재생되지 않는 CCTV 파일의 구조를 확인하고 일반 형식으로 변환하거나 필요한 장면을 추출하는 데 유용한 무료 도구입니다.
그러나 변환된 영상은 원본이 아닙니다.
원본을 별도로 보관하고 사용한 명령과 설정, 추출한 시간 범위를 기록해야 합니다.
사고 책임이나 형사사건처럼 결과가 중요한 경우에는 단순 변환본만으로 판단하지 말고 전문 영상분석을 검토하는 것이 안전합니다.
참고자료
- FFmpeg Project, FFmpeg
- FFmpeg Project, FFmpeg README and Documentation