안녕하세요.
장편 영화 한 편의 MOV(422HQ) 파일은 대략 170mbps의 비트레이트를 갖습니다. 애플 프로레스가 이 분야에서는 업계 표준으로 사용되고 있습니다. 압축률 대비 품질이 괜찮아서겠지요.
H.264는 가벼운 상영용 스크리너 용도로 쓰입니다. 3Gb~20Gb까지 다양한 품질로 익스포트를 합니다. 블루레이 제작 시에는 20Gb~25Gb 까지... H264치고는 꽤나 고용량의 데이터로 나오는데요.
궁금한 것은, 1) H.264 코덱이 가질 수 있는 최대의 비트레이트(데이터 전송률, 주로 Mb per sec)는 몇인지... 편집툴에서 최대의 옵션을 걸고 뽑아 봐도... 소스 영상(위에 말한 422HQ의 파일)에 따라 들쭉날쭉 합니다. 어떤 녀석은 최대로 뽑아도 20mbps가 한계이고... 어떤 녀석은 60mbps까지 올라갑니다.
그리고 2) 동영상 파일의 비트레이트를 결정하는 요소들에는 뭐가 있는지 입니다. 제 추측으로는... 영상 소스 내에 움직임이나 컬러 정보가 많다면 비트레이트도 높게 뽑히는 것 같은데 이건 그냥 추론입니다.정적인 영화라고 해서 꼭 가벼운 파일로 나오는 것 같지도 않구요...
혹시... 인코딩 하는 PC의 사양에 따라 결과물이 달라질 수도 있는 건 아닌지... 이건 아니겠죠... 같은 옵션인 앉은 자리마다 다른 파일을 만들어 낸다면...
같은 두 시간 짜리 영상인데... 왜 어떤 영화는 최대가 20Gb이고... 어떤 영화는 60Gb 용량으로 나오는 것일까요...
혹시나 해서... 영상의 화면비(상하로 들어가는 검은 레터박스의 비율)에 따라 달라지는 것인가도 생각해봤습니다.생각해보면 2.35:1의 영화는 1.85:1의 화면비를 가진 영화보다 훨씬 더 적은 양의 색정보/밝기 정보를 포함하겠지요... 그런데.. 그렇다고 해서 1.85:1 화면비를 가진 영화들이 꼭 고용량으로 뽑히는 것도 아니더랍니다...
230828 댓글로 조언주신 분들 감사드립니다. 말씀하신 사항들 체크해가며 테스트한 결과를 기록합니다. 테스트는 다빈치 리졸브 스튜디오로 했습니다.
H264 코덱의 비트레이트에 영향을 주는 요인
- 해상도
- 프레임 레이트
- 품질 옵션 ( 크로마 비율, 패스 횟수, QP, 엔트로피)
- 영상 속 피사체 (물, 불, 숲 등… Particle 처럼 보이는게 많으면 압축해도 용량이 커진다)
- 코덱의 버전 (주로 편집기에 내장된)
- 하드웨어 인코딩(GPU 사양) 여부
가장 영향을 많이 끼치는 순으로 정렬해보면 위와 같습니다. 해상도나 프레임레이트 등은 대부분 업계에서 표준적으로 쓰이는 것들이 있다보니 큰 변수는 아닙니다. 제 생각에 가장 의미 있는 요인은 영상 속 어떤 피사체가 나타나느냐 입니다. 아래 메모는 최대 품질 옵션으로 5분을 테스트 렌더링한 결과별로 비트레이트를 기록한 것입니다.
Black Solid Layer - 101kbps (아무 움직임이 없는 솔리드 레이어를 5분 인코딩)
엔딩 크레딧 - 7000kbps (ProRes 422HQ 소스로 평범한 상업영화의 엔딩 크레딧을 5분 인코딩)
로맨티 코미디 영화의 일상적인 화면 - 29.6mbps (마찬가지로 ProRes 422HQ 소스)
물, 폭발이 많은 액션 장면을 하드웨어 인코딩 - 92mpbs (마찬가지로 ProRes 422HQ 소스)
물, 폭발이 많은 액션 장면을 소프트웨어 인코딩 - 185mbps (마찬가지로 ProRes 422HQ 소스)
액션 장면을 가지고 세부적으로 테스트해본 결과, Entropy Mode(CABAC, CAVLC)는 비트레이트 상에 유의미한 차이를 발생하지 않았습니다.
의외의 발견은 하드웨어 가속 시 bit rate 모드가 가변(variable)로 사용된다는 것이고. bit rate는 하드웨어 인코딩을 사용하지 않은 경우가 월등히 높게 나옵니다. 전자의 경우는 다빈치 리졸브의 특성일지 모르겠습니다.
정적인 화면이면 프레임당 처리해야 하는 비트수가 적고, 동적이면 비트수가 많을 수 밖에 없습니다.
영상의 상대적인 용량은 정보 엔트로피가 영향을 끼치지요. 정보량 (화면의 복잡도와 변화량 등)과 목표하는 재현 정확도가 높으면 높을 수록 용량이 크다고 볼 수 있는데.. 단, 인코더의 설계는 복잡한 부분이 많아서 저도 현실적인 최대 비트레이트 수치는 잘 모르겠습니다.
아마 1Gbps인듯합니다 (이런 비트레이트로 만들면 분당 7.5기가라는 끔찍한 수치가 나옵니다)
6.1의 Base/Mainline의 최대치가 800M인데, High Profile은 그 1.25배라고 하니 저런 수치일듯합니다
프로파일이 버전업 되면 늘어나므로 더 오를 가능성도 있습니다
2. mpeg 이후 키프레임 개념이 도입되었으므로 키 프레임의 개수와 키/다른 프레임의 변경되는 정보량, 영상 자체의 복잡도, 해상도, 컬러, 손실 압축이므로 얼마나 원본에 가깝게 처리할지(Q)라던가 많은 요인이 엃힙니다
위에도 적혀있지만, 같은 소스에 동일 설정 줘도 스팩에 따라 바뀔 수 있습니다 (GPU 제조사나 하드웨어 세대는 물른이고, 심지어는 인코더의 버전에 따라서도 차이날 수 있습니다)
1. 모든 손실 영상압축은 DCT 이산 코사인 변환 이라는 방법에 베이스를 두고 있습니다. DCT를 간단히 설명하자면, 화면의 특정 부분을 네모난 블럭으로 때우는 기술입니다. 네모의 각 꼭지점 4개는 독자적 컬러 정보를 가지고 있고요, 그 사이에는 코사인 보간을 한 색 그라데이션이 입혀지게 됩니다.
2. 아니 그런 허접 방법으로 영상 압축이 된다굽쇼! 네 됩니다 ;;;;; 생각보다 영상이란 건 초점이 안 맞아 흐릿한 부분이 많고, 이런 흐릿한 부분은 꽤 큰 DCT블럭으로 때울 수 있거든요. 사실 이건 개략적인 설명이고, 자세한 이해를 위해서는 이산푸리에 변환에 대한 지식이 좀 필요합니다만... 몰라도 이해에는 큰 문제 없습니다!
3. 추가적으로 빌딩한 DCT블록들은 허프만 코딩이나 Lempel-Ziv(LZW)알고리즘을 통해 용량을 더 줄일 수도 있습니다.
4. 거기에다가 영상으로 가면 프레임 간에 바뀌는 부분과 바뀌지 않는 부분도 있기 때문에 안 바뀌는 부분은 전부 퉁쳐서 압축할 수 있습니다. 소위 I프레임 P프레임 B프레임이라고 부르는 건데 자세한 설명은 https://tell-mia.tistory.com/46 참조하세요
5. 그리고 우리가 흔히 쓰이는 초당 비트 레이트 Bit Rate per Second 그냥 요즘은 비트레이트라고 쓰는데, 얘는 뭐냐면 이 영상 1초를 저장하기 위해서 데이터가 얼마나 필요하냐는 겁니다. 100 kbps 라고 하면 1초 저장하는데 1k비트(는 대충 128킬로바이트)정도가 필요하다는 거겠죠.
6. 아니 그런데 왜 딱 128킬로가 아니라 그 정도라는 어중간한 표현을 쓰냐고요... 그건 웃기는 얘긴데 영상 데이터 압축은 해 봐야 정확한 압축값을 알 수 있기 때문입니다. 이미 압축된 데이터는 정확한 비트레이트를 계산할 수 있지만, 무손실 영상을 압축할 때 예상 비트레이트를 100kbps라고 정해도 정확하게 100kbps로 압축 되지는 않습니다. 영상이 동적이거나 고주파 영상(=디테일이 높은 영상)은 압축이 잘 안 되기 때문이고 그 반대의 경우는 압축이 훨씬 잘 되기 때문입니다. 영상을 인코딩 할 때 비트레이트를 정하는 건 DCT블럭의 스레스홀드 값이나 기타 파라미터를 이 정도로 하면 이 정도 영상에서 대충 이 정도 비트레이트가 나오겠지 하는 값에 불과합니다.
7. 그렇다고 해서 동일하게 압축한다고 해도 어떤건 20G, 어떤 건 60G가 나오고 이러긴 어렵습니다. 비슷한 퀄리티로 압축할 경우 오차가 배로 나고 이러진 않아요 :) 그 정도로 차이난다면 애초에 압축할 때 압축 파라미터 특히 DCT블럭의 문턱값이라든가 초당 허용 가능한 I프레임의 개수 등등 이런 파라미터 자체가 차이 나는 겁니다. 당연히 고품질일수록 영상이 손실이 덜 하겠지요.
대충 이해가 되셨을라나요?
2)는 다른분이 답변했으니 생략
위 문서에 보시면 레벨별 최대 비트레이트와 해상도, FPS정보가 있습니다.
그리고 사람눈에는 정적으로 보이는 것도 기계가 해석하기에는 매우 복잡한 부분들이
잔디, 구름, 파도, 나무, 숲 같은 것들입니다.
어쨋든 컴퓨터가 해석하기에 복잡하면 용량이 커지는 구조입니다.
그리고 인코딩 결과물의 사이즈는 컴퓨터 성능보다는 코덱의 버전에 따라 용량이 달라집니다.
코덱의 버전에 따라 용량이 달라지는게 맞지만 최신 pc는 복잡한 명령어 셋을 많이 지원하고
예전 PC나 휴대폰 같은 경우 복잡한 명령셋이 없거나 지원해보 배터리 효율로 인해 선택을 안함으로 인해서 간단히 인코딩 할 수 있는 알고리즘을 선택해서
압축률이 떨어질 수 있습니다.
동적인 화면에서는 높게 정적인 화면에서는 낮게 수동으로 결정합니다.