VLC에는 널리 통용되는 격언이 하나 있습니다. "VLC에서 재생되지 않는 파일은 애초에 재생될 수 없도록 만들어진 것이다"라는 말인데, 실제로 VLC는 오디오든 비디오든 어떤 인코딩과 포맷이든 거의 가리지 않고 모두 소화합니다. eMule로 다운로드한 미완성 미리보기 파일이나 온라인 스트림조차 예외가 아닙니다.
하지만 만약 VLC조차 재생하지 못하는 파일이 있다면 어떻게 될까요? 그때 사용자는 무엇이 잘못되었는지 알 길이 없어 답답해집니다. VLC는 검은 화면에 깔때기 로고만 보여줄 뿐, 별다른 오류 메시지도 단서도 제공하지 않기 때문입니다. 오늘은 이 베일을 걷어보겠습니다. VLC에서 파일 재생 문제를 진단하는 방법을 함께 알아보세요.
로그 레벨 및 디버그 콘솔 설정
대부분의 사용자는 VLC 인터페이스 깊숙한 곳까지 들여다보지 않지만, 사실 그 안에는 유용한 기능이 많이 숨겨져 있습니다. 환경 설정(Preferences) 메뉴로 들어간 후 '모두(All)' 버튼을 선택하면 고급 설정 항목들이 모두 드러납니다. 목록 상단에서 세 번째에 있는 '로깅(Logging)' 항목에서는 로그 메시지를 저장할 파일 이름을 지정하고 디버그 레벨을 설정할 수 있습니다.
디버그 레벨 값은 최대 255까지 올릴 수 있으며, 숫자가 클수록 더 자세한 정보가 기록됩니다. 다만 정보가 너무 많으면 오히려 핵심을 파악하기 어려워질 수 있으므로, 간단한 수준부터 시작하는 것이 좋습니다.
더 간단한 방법
VLC 2.X 버전에서는 훨씬 간편한 방법이 있습니다. 도구(Tools) > 메시지(Messages) 메뉴에서 자세히 보기(Verbosity) 수준을 조절하고 로그 파일 경로를 지정할 수 있습니다. 자세히 보기 수준은 0이 오류(Error), 1이 경고(Warning), 2가 디버그(Debug)를 의미하며, 대부분의 사용자에게는 이 정도면 충분합니다.
주의!
문제가 없는데도 굳이 메시지 창을 들여다보지는 마세요. 완벽하게 재생 가능한 파일이라도 손상된 프레임, 불필요한 데이터, 디코딩 오류 등 사소한 결함을 수두룩하게 포함하고 있는 경우가 흔합니다. 쓸모없는 정보에 머리가 과부하 걸릴 수 있습니다. 실제로 제가 테스트용으로 만든 Moron.avi 영상의 로그가 대표적인 예입니다.
꽤 충격적으로 보이죠? 굳이 볼 필요 없는 내용입니다.
실전 예시
자, 이제 재생되지 않던 파일을 직접 실행해 보면서 원인을 파악해 봅시다. 재생 버튼을 아무리 눌러도 반응이 없다면, 로그 파일을 열어 내용을 살펴보세요. 방대한 양의 정보가 쏟아질 텐데, 대부분은 전혀 문제없는 무해한 내용입니다.
정크(junk) 데이터를 걸러낼 마법 같은 필터가 있냐고요? 없습니다. 하지만 때로는 문제의 근본 원인을 찾는 데 도움이 되는 단서가 로그 속에 숨어 있기 마련입니다. 예를 들어 저는 정상적인 동영상 파일을 일부러 텍스트 편집기로 열어 헤더 바이트를 몇 개 변경해 보았습니다. 예상대로 파일은 재생되지 않았고, VLC에서 실행한 뒤 메시지를 확인하니 다음과 같은 결과가 나타났습니다.
다음 단계는 수상해 보이는 로그 항목, 예컨대 "no stream_filter module matching 'any' could be loaded"(일치하는 stream_filter 모듈을 로드할 수 없음) 같은 메시지를 복사해 웹 검색에 활용하는 것입니다. 대부분은 쓸모없는 정보가 쏟아지겠지만, 간혹 결정적인 힌트를 얻기도 합니다. 좌절하지 말고 방대한 데이터 속을 천천히 파고들어 보세요.
로그에는 더 많은 단서가 담겨 있습니다.
ps warning: this does not look like an MPEG PS stream, continuing anyway
ps warning: garbage at input, trying to resync...
ps warning: found sync code
ps warning: garbage at input, trying to resync...
내용만 봐도 짐작이 가시나요? 그리고 아래 로그의 list 'aaa' 부분에 주목하세요. 이 부분이 중요합니다. 잠시 후 그 의미를 설명해 드리겠습니다.
main debug: looking for demux module: 55 candidates
avi debug: <list 'AVI '>
avi debug: <list ' aaa'>
avi warning: unknown chunk (not loaded)
avi debug: </list ' aaa'>
avi warning: unknown chunk (not loaded)
avi debug: </list 'AVI '>
avi warning: unknown chunk (not loaded)
avi debug: * LIST-root size:3338746 pos:0
avi debug: + RIFF-AVI size:3338744 pos:0
avi debug: | + LIST- aaa size:326 pos:12
avi debug: | | + size:849936385 pos:24
avi debug: | + size:849936385 pos:24
avi debug: + size:849936385 pos:24
avi error: avi module discarded (invalid file)
다행히 모든 오류가 이렇게 난해한 것은 아닙니다. 파일에 오디오 스트림이 없거나 음성 싱크가 어긋나거나 프레임이 손상된 경우, 로그에 경고(warning) 형태로 표시되는 일이 많습니다. 처음에 말한 원칙을 기억하세요. 잘 작동한다면 건드리지 마세요!
하지만 파일을 버리는 대신 문제를 직접 파헤치고 싶다면, 여기서부터 조사를 시작해야 합니다. 쉽지 않겠지만 최선의 방법은 정상 파일과 손상 파일을 나란히 비교하며 차이점을 찾는 것입니다. 이전 슈퍼 디버그 튜토리얼에서 했던 것처럼 말이죠.
두 파일을 비교해 보면 헤더의 차이가 눈에 띕니다. 정상 파일에는 hdrlavih8 값이 들어 있는 반면, 손상된 파일에는 junk aaa라는 값이 적혀 있습니다. 바로 앞서 본 로그 예시의 그 부분입니다! 물론 저는 제가 어떤 변경을 했는지 알고 있으니 쉽게 복구할 수 있지만, 여러분이 마주한 문제는 잘못된 인덱스, 시간 스탬프 오류, 무효한 코덱 정보 등일 수도 있으며, 이런 것들은 의외로 간단히 고칠 수 있는 경우가 많습니다. 제 리눅스 데이터 복구 튜토리얼에서 JPEG 파일을 수리했던 것과 비슷한 작업입니다. 감상적으로 소중해서 절대 잃고 싶지 않은 음악·영상 파일이 있다면 수동 복구를 시도해볼 만합니다.
이 주제와 관련한 추가 참고 자료입니다.
- 헤더나 인덱스가 없는 손상된 AVI 파일 다루기
- 헤더가 손실된 파일 복구 절차
또 다른 예시
이제 본격적인 내용을 지나쳤으니, 또 다른 예시를 살펴보겠습니다. 여기 있는 파일은 포맷을 알 수 없어 아예 재생되지 않습니다. 그 이유는 VLC가 적절한 디코더를 선택하지 못하기 때문입니다. 역시 겉으로는 아무 일도 일어나지 않지만, 로그는 우리가 알아야 할 것을 알려줍니다. 대부분의 경우 이 지점에서 포기하고 커피 한잔을 즐기게 되겠죠.
주목할 점은 두 사례 모두에서 "garbage at input"(입력값에서 쓰레기 데이터 발견)이라는 문자열이 공통으로 나타난다는 것입니다. 이제 유용한 패턴이 보이기 시작합니다. 이것이 재생 문제의 미스터리를 풀 첫 번째 단서입니다. 동시에 이는 바이트 단위의 진지한 분석 작업 없이는 이런 파일을 재생하기 어렵다는 뜻이기도 합니다. 권장하지는 않지만, 한가한 주말에 색다른 도전을 즐기고 싶으신 분이라면 시도해볼 만합니다.
마지막으로, 때로는 정말 간단하게 끝나기도 합니다. 메시지 콘솔을 열거나 디버깅을 활성화하지 않아도 VLC가 스스로 문제를 알려주는 경우가 있기 때문입니다. 이럴 때는 무슨 일이 일어났는지 명확히 확인할 수 있습니다.
결론
미디어 문제의 만능 해결책, 즉 은총알을 드렸습니까? 전혀 아닙니다. 하지만 VLC에서 미디어 파일 문제에 접근하는 유용한 방법을 알려드렸습니까? 그럼요. 이 짧은 튜토리얼은 윈도우와 리눅스 모두에서 VLC 로깅을 설정하는 두 가지 방법을 소개합니다. 오류, 경고, 메시지의 미묘한 차이를 설명하고, 허풍성 문제와 진짜 문제를 구별하는 법, 해결책을 찾는 법, 정상 파일과 손상 파일을 바이트 단위까지 비교하는 법, 그리고 재생 불가능해 보이는 파일의 문제 중 일부를 해결하는 방법까지 다루었습니다.
이 글이 도움이 되기를 바랍니다. 더 나아가 VLC의 강력함과 유연성을 조금 더 이해하셨기를 바랍니다. 단순해 보이는 외피 아래에는 놀라운 기능이 얼마나 많이 숨어 있는지, 그래서 프로그램의 훌륭한 능력을 쉽게 잊곤 한다는 사실 말입니다. 자, 이것으로 VLC의 비밀 하나가 풀렸습니다. 그리고 마지막으로 결론을 말씀드리자면, 미디어 재생 디버깅 실력이 아무리 뛰어나도 대부분의 경우 재생되지 않는 파일은 애초에 재생될 운명이 아니었을지도 모릅니다.
즐거운 미디어 생활 되시길 바랍니다!