ffprobe는 FFmpeg에 포함된 미디어 검사 도구다. 파일이나 스트림에서 컨테이너·코덱·해상도·길이·태그 등의 정보를 읽어 출력한다. ffmpeg가 변환 파이프라인을 실행하는 도구라면 ffprobe는 입력의 구조를 파악하고 변환 결과를 점검하는 데 초점을 둔다.
컨테이너와 스트림 정보
하나의 파일에는 영상·음성·자막 등 여러 스트림이 들어갈 수 있다. 파일 전체의 format 정보와 각 stream 정보가 서로 다른 수준의 설명인 이유다. 영상의 가로·세로를 파일 확장자만으로 추정하거나, 첫 스트림이 항상 영상이라고 가정하면 잘못된 검사가 된다.
장점은 사람이 읽는 출력뿐 아니라 JSON 같은 구조화 결과를 제공해 자동 검수에 연결하기 쉽다는 것이다. 필요한 필드만 선택하면 로그와 처리량도 줄일 수 있다. 한계는 메타데이터가 없거나 부정확한 파일이 있고, 일부 정보는 더 깊은 분석 없이는 알 수 없다는 점이다. 검사에 성공했다고 전체 파일이 끝까지 정상 재생된다고 보장되지는 않는다.
도서 낭독 영상의 기본 정보 조회
ffprobe가 설치되어 있고 가상의 reading-preview.mp4가 있다고 가정한다. 다음 명령은 첫 번째 영상 스트림과 파일 전체 길이를 필요한 필드만 골라 JSON으로 출력한다. 원본 파일을 변경하지 않는다.
ffprobe -v error -select_streams v:0 \
-show_entries stream=codec_name,width,height:format=duration \
-of json reading-preview.mp4streams 배열에서 codec_name·width·height를 읽고 format에서 duration을 읽는다. -select_streams v:0은 첫 영상 스트림을 뜻하므로 음성 전용 파일에서는 영상 목록이 비어 있을 수 있다. 길이 값은 JSON에서도 문자열로 나올 수 있어 숫자로 쓸 때 변환과 범위 검증이 필요하다.
예를 들어 가로 960, 세로 540을 얻었다면 저장된 영상 해상도가 그 크기라는 뜻이다. 파일 크기나 프레임 수까지 알려 주는 결과는 아니며, 선택하지 않은 정보는 반환되지 않는다. 출력 필드의 순서에 기대어 문자열을 자르지 말고 JSON 키와 배열을 사용한다.
자동 검수에서의 오류 처리
종료 코드와 표준 오류를 함께 확인하고 JSON이 비었거나 특정 필드가 없을 때의 처리를 정한다. 알 수 없는 길이를 임의의 0초로 바꾸면 정상적인 빈 파일과 구분할 수 없게 된다. 프레임 수나 평균 프레임률도 가변 프레임률 영상의 실제 시간 구조와 혼동하지 않는다.
프레임·패킷 단위 출력은 훨씬 많은 정보를 만들고 오래 걸릴 수 있다. 서버에서는 외부 입력의 분석 시간과 출력 크기를 제한하며, 메타데이터 태그에 개인 정보가 포함될 수 있으므로 검수 로그에는 필요한 항목만 남긴다. 컨테이너 구조 검사, 실제 디코딩 검사, 사람이 보는 화질 검사는 서로 보완하는 단계다.