👆 〈하늘에서 본 미래〉 1부 트레일러
웨이브에서 보기 · 티빙에서 보기 · 왓챠에서 보기 · 네이버 시리즈온에서 보기 · 네이버 TV 채널
〈하늘에서 본 미래〉는 국내 제작사인 '보더레스랩’과 해외 제작사인 'Off the Fence' (〈나의 문어선생님〉으로 유명한 제작사)의 합작 프로젝트입니다. 1시간물 X 4개 에피소드로 대두되는 기후 변화 위기에서 희망을 줄 첨단 기술들을 알아보고 그것이 실현된 미래를 CG로 구현해보는 프로젝트이지요. 이 작품은 과학기술정보통신부 KCA 방송프로그램 제작지원사업 국제공동제작 선정작입니다.
밀키쉐도우는 후반제작부터 개입했으며 한글어 버전을 만드는 작업을 맡았습니다.
일단 모든 촬영본은 영국 Off the Fence(이하 otf)로 모이고 편집되어 영어 버전이 만들어지며, 우리는 이를 이어받아 한국어 버전을 만드는 프로젝트였습니다.
편집부터 이후 과정 (CG, VFX, 컬러그레이딩, 믹싱, 마스터링)은 각자의 나라에서 진행하지만 1차적으로 영국에서 먼저 편집을 시작했기 때문에 시간을 아끼려 이를 이어받아 작업하기로 했습니다.
단순히 한국어 자막을 달고 끝내는 프로젝트가 아니라 구성이 다르기 때문에 영국에서 편집한 프로젝트를 그대로 이어받아 오는 것이 과제였습니다.
영국에서 Avid Media Composer로 작업한 것을 국내 제작사 환경에 맡게 Adobe Premiere Pro로 변환시키는 것이 큰 골자의 숙제였습니다.
이 이후부터는 Avid Media Composer 프로젝트를 어떻게 Adobe Premiere Pro로 변환시켰는지를 소개합니다. 기술적인 내용이므로 관련 기술에 관심이 있는 분들을 대상으로 기술하겠습니다.
CG 관련 내용은 다음 포스트를 참고해 주세요.
otf에서 다행히 아비드 BIN과 프록시를 보내준 상황이지만, 촬영 원본을 받는건 몇달 기다려야하는 상황이었습니다. (그런걸 할 사람이 없다는 이유)
촬영 원본을 기다리고 그 이후에 착수하면 많은 게 깔끔할 수 있지만 그걸 기다릴 시간은 없었습니다. ENA에 방영 일정은 대략 잡혀있었고, 한국에서 추가로 진행해야하는 내레이션 녹음, CG 등 작업이 있었기 때문에 프록시로라도 편집을 빨리 마쳐야하는 상황이었습니다.
촬영 로케이션도 많고 회차가 많기 때문에 총 촬영 원본은 약 80테라바이트, 프록시 파일 개수만 9만개가 넘었습니다. 1시간물 4개를 다시 편집하는 것 보다는 조금 더 똑똑하게 관리하고 싶었습니다.
작업자는 아비드 경험이 있고 쓸 수 있지만, 원 제작사 (보더레스랩) 작업자들은 아비드 경험이 없고, 방영 이후에도 더 활용될 가능성을 생각하면 미리 프리미어로 변환시켜놓는 게 나중에 더 이득일거라 판단했습니다.
Avid MC는 고유의 파일 관리 체계를 갖고 있습니다. 저장장치 루트에 [Avid MediaFiles] 폴더를 만들고 모든 촬영본 파일이 체계 없이 저장되며 Avid의 자체 코덱인 DNxHD 혹은 DNxHR이 MXF OP-Atom 형식으로 저장됩니다.
MXF OP-Atom 컨테이너 형식은 모든 미디어 채널이 낱개의 파일에 저장되는데 예를 들어, [1개의 비디오트랙 - 8개의 오디오트랙 - 1개의 타임코드트랙]이 한 파일인 경우 이를 다 쪼개어 총 10개의 파일을 만들어냅니다. (DCP랑 비슷한 방식) 그래서 프록시 파일이 9만3천개가 되었던 겁니다. 각 파일은 고유의 uuid를 갖고있으며 Avid가 따로 만든 BIN 파일에 이 uuid를 모아 이 파일이 사실은 한 파일이라는 사실을 명시합니다. 이렇게 따로 BIN파일을 운영하기 때문에 [Avid MediaFiles] 폴더 안에 있는 실제 미디어 파일들은 파일이름도 바뀌고 폴더 구조도 없어집니다. 때문에 원래 어떤 파일이었는지는 꼭 BIN을 봐야 알 수 있습니다.
다행히 아비드에서 타임라인은 AAF로 익스포트가 가능합니다. 하지만 그 AAF 타임라인 정보 안에 링크되어있는 파일들은 MXF OP-Atom 즉, 다 쪼개진 파일인데, 이는 Adobe Premiere Pro에서 호환되지 않는 파일입니다. 프리미어에는 MXF OP-Atom을 모아서 한 파일로 인식하는 기능이 없습니다. (참고. Davinci Resolve는 가능하니 다빈치 리졸브로 편집하면 아주 수월해집니다.) 그래서 MXF OP-Atom을 MXF OP-1a로 변환하고 AAF파일의 미디어링크를 만들어진 MXF OP-1a로 변경하는 작업을 수행해야했습니다.
Avid BIN을 토대로 파일구조를 알아내고 정리하려면 BIN파일을 parsing 하는 게 필요합니다. 다행히도 MDVx라는 어플리케이션을 발견해 (게다가 무료!) csv 형식의 데이터를 만들고 이를 가공하기 좋게 데이터베이스로 변경했습니다. 이 과정 중에 하나의 MXF OP-Atom 파일을 검색해도 연관된 uuid (예를 들면 하나의 오디오 파일을 선택하면 연관된 비디오 파일은 무엇인지)를 알아낼 수 있도록 정리했습니다. MDVx 다운로드 페이지
이를 읽어 ffmpeg을 이용해 mux (비디오, 오디오 채널을 합치는 과정)합니다. 다행히 DNxHD는 프리미어에서 읽을 수 있으므로 코덱을 컨버팅 할 필요는 없었습니다.
[오디오가 없이 비디오만 있는 경우, 비디오와 오디오가 같이 있는 일반적인 촬영본] 두가지 모두 잘 출력이 되지만 [비디오 없이 오디오만 있는 경우]가 문제였습니다. 대부분 동시녹음기에서 녹음된 WAV 파일로, MXF 스펙 자체에 비디오 없이 오디오만 있는 경우를 규정하지 않고있고 ffmpeg도 이를 지원하지 않아 에러가 납니다. 그럼 ffmpeg으로 MXF 변환할 게 아니라 WAV 등 오디오 파일로 뽑으면 되겠지요? 하지만.
WAV 파일도 고전 스펙으로는 스테레오까지만 지원하고 3개 이상의 멀티 채널 오디오를 지원하지 않습니다. 비교적 최근 BWF (Broadcast Wave Format) 라는 스펙이 정의되었고 이런 스펙으로 출력해서 멀티채널 오디오를 만들어낼 수 있는 툴이 잘 없습니다. (임포트는 잘되지만 그렇게 출력하는 오디오 툴이 많이 없습니다. 심지어 프로툴도!) 비디오가 블랙인 MXF나 MOV를 만들까 번뇌했지만 나중에 촬영원본이 왔을때 대조가 어려울 것 같아 정공법으로 WAV 파일을 만들고 싶었습니다.
많은 테스트를 통해 SoX를 이용해 파일을 합칠 수 있다는 걸 알아내고 python wrapper인 pysox를 설치해 멀티채널로 합친 후, BWFMetaEdit으로 시작 타임코드를 DB에서 읽어서 넣어주었습니다.
하지만시작 타임코드를 넣었음에도 이를 프리미어에서 임포트했을 때와 다빈치 리졸브에서 임포트 했을 때 시작 타임코드가 달리 보이는 문제가 있었습니다. 보통 영상용 녹음을 할때 흔히 쓰는 48000Hz가 아니라 48048Hz (48000+48) 혹은 47,952Hz(48000-48)가 존재한다 는 걸 이때 처음 알았으며 프리미어와 다빈치 리졸브가 서로 다르게 해석해 시작 TC가 달리 보이는 것입니다.
정확한 메타데이터를 다시 넣어줄 필요가 있는데 이때 쓴 것이 Wave Agent입니다. 동시녹음기로 유명한 Sound Devices에서 만든 무료 앱이고 (더이상 개발하고 있진 않아서 지원이 곧 끊길 앱입니다.) GUI 앱으로 자동화가 되진 않아 python이 아니라 노가다로 BWF 파일의 메타데이터를 넣어주었습니다. 이럴 거면 처음부터 Wave Agent를 써도 될 뻔했습니다.
파일이 너무 많아 자동화 과정을 100% 믿기 어려웠습니다. (내가 짠 코드의 버그나 문제 있는 파일 등) MXF OP-Atom 파일과 새로 만든 MXF OP-1a 또는 WAV 파일의 관계를 만들어 추후 문제가 발생했을 때 해결가능토록 했습니다. 상술한 멀티트랙 오디오나 FX9 등으로 찍은 8트랙 오디오가 붙어있는 동영상의 경우 트랙 개수가 너무 많아 이렇게 해야만 추적이 가능했습니다.
DB까지 만들고 나서 Avid가 임의로 바꾼 이상한 파일 이름이 아니라 원래 이름(Avid BIN 안에서 clipname)으로 프리미어와 다빈치 리졸브에 임포트합니다. 촬영 원본이 없으니 원래 폴더 구조는 모르지만 BIN을 근거로 폴더를 구분하고 제가 수기로 에피소드1의 촬영본인지 어떤 로케이션인지 구분합니다.
여기까지 작업한 것을 frame.io에 올려 작가와 다른 제작진이 프록시를 볼 수 있도록 했습니다.
프리미어가 waveform cache를 만드는 걸 기다리면서 장소 분류를 마치면 스크립트를 이용해 다빈치 리졸브 메타데이터 상에서 카메라 이름을 붙여줍니다. 다행히 촬영본 대부분이 Tentacle Sync를 써서 TC가 동기화 되어있기 때문에 다빈치 리졸브에서 아주 빠르게 싱크를 맞출 수 있습니다. 싱크를 맞추고 XML을 뽑으면 프리미어에서 싱크 맞춘 타임라인을 불러올 수 있습니다.하지만 이 XML 파일을 프리미어에서 불러오면 비디오와 오디오가 링크Link 되어있지 않고 낱개 클립으로 선택되는 걸 확인 할 수 있는데요, XML 파일에 적절한 가공을 통해 강제로 링크를 만들어 줄 수 있습니다.
Tentacle Sync를 쓰지 않은 촬영본은 Syncaila로 싱크를 맞춰줍니다. Plural Eyes는 개발이 중단되었습니다.
프리미어에서 불러들인 타임라인은 영국 otf에서 가편이 진행된 '편집 타임라인’과 촬영본 싱크를 맞춘 '멀티캠 타임라인' 두가지로 나뉘게 됩니다. 추후 후반작업의 용이성을 위해 편집 타임라인 안에 있는 클립 중 멀티캠 촬영된 부분은 싱크를 맞춘 멀티캠 타임라인으로 바꾸는 게 좋다고 판단했습니다. (원할 때 카메라를 바꾸기 쉽도록)
이런 과정으로 otf 가편본 중 인터뷰나 멀티캠 편집이 용이한 부분은 멀티캠 타임라인으로 대체해 언제든이 컷을 바꾸고 카메라를 바꿀 수 있도록 변경했습니다.
후반작업이 진행됐습니다. 이후 항공편으로 촬영원본을 받았습니다. 이제 프록시 편집한 프로젝트에 촬영원본을 붙여줍니다. 다행히 프리미어에는 'Reconnect Full Resolution Media…' 라는 이름으로 기존 클립은 프록시로 격하하고 원본을 붙일 수 있는 기능이 있습니다.
Avid BIN에 있고 지금은 DB에 저장해놓은 clip name, reelname, start tc, duration, 오디오 트랙 개수 이러한 정보로 프록시와 촬영원본의 대응 맵을 만들면 됩니다. 문제는…
Avid가 프록시를 만들 때 23.976프레임이 아닌 촬영본은 모두 23.976 프레임으로 만들어 버립니다. (23.976인 이유는 <하늘에서 본 미래> 프로젝트 프레임레이트이기 때문)다시 말해, 60프레임으로 찍은 영상은 23.976으로 변환해 슬로우모션인 것 처럼 보이는 것이지요. 이미 편집은 꽤나 진행이 됐기 때문에 프록시를 60프레임으로 만들 순 없고 촬영원본을 강제로 모두 23.976 프레임으로 변환해야 했습니다. Apple Compressor도 간단하게 나마 커맨드라인으로 실행할 수 있는 기능이 있습니다. 이를 이용해 자동화 해줍니다.
이렇게 했더니 start tc 메타데이터가 사라져서 결국 다시 ffmpeg으로 넣어줍니다 ㅠ. 다행히 코덱을 건드리는 건 아니고 컨테이너만 만지는 거라 속도도 빠르고 화질 열화도 없습니다.
쓴 카메라 중 고프로, A7S3도 있었고 DJI 드론도 있었습니다. 촬영날이 바뀌면 파일이름이 같아지는 경우가 발생하지요. - 예를 들어 ```DJI_0001.MP4``` - 더 문제는 듀레이션까지 같은 경우가 있다는 겁니다. 촬영을 길게하면 카메라가 파일을 쪼개서 저장하는데 예를 들어 2시간 10분을 찍었으면 30분짜리 파일 4개와 10분짜리 파일 1개가 생기는 식이지요. 같은 카메라가 같은 파일이름을 만드는 것이기 때문에 다른 메타데이터도 동일해서 대조가 불가능해집니다. 결국 육안으로 같은 화면인지 아닌지 보면서 맞출 수 밖에 없어집니다. 그럼 이미지가 얼마나 같은지 판단하는 스크립트를 짜면 될줄 알았습니다.
Avid MC가 프록시를 만들 때 Output Transform을 적용해 렌더합니다. 그러니까 촬영 원본의 컬러스페이스는 Log인데 프록시는 Rec709였습니다. 서로 색이 다르니 화면의 유사도를 비교하는 스크립트를 짤 때 이를 고려해야 했습니다. 오디오의 경우에도 Avid MC가 클립 이름을 그냥 ’01’ 이런식으로 변경한 경우가 많아 대조가 필요했습니다.
opencv, librosa, skimage 등의 패키지를 이용해 비교대조 했습니다.
오디오도 비슷한 원리입니다. 스펙트럼 이미지를 만들어 비디오를 비교할 때처럼 비교하기도 했고, 주파수 값을 비교하기도 했습니다.
비주얼 유사성을 판단해 점수가 95점 이상이면 촬영원본으로 간주하고 DB에서 관계를 매핑합니다.
이후 스크립트로 프리미어에서 원본으로 대치하고 시퀀스 사이즈를 UHD로 늘려줍니다.
이렇게 Avid MC에서 Adobe Premiere Pro로 프로젝트를 전환하는 모든 과정이 끝났습니다. 이 글에서 다 적지 못한 실패와 문제 해결 과정이 꽤나 흥미로웠던 프로젝트인데, 결과적으로 성공해 무사히 편집을 마칠 수 있어서 다행이었지요.
이후 그래픽이나 편집 과정은 다음 포스트에 담겠습니다.