본문 바로가기

IT/멀티미디어

h.264 앞에 추가되어지는 프레임 문제 - 해결? - 녹화 / 인코딩 (추가)


추가 (검색으로 알게된 프레임의 이름과 해결책?)


앞에 추가되어지는 프레임을 이르는 명칭 : 더미 프레임


더미 프레임으로 검색

더미 프레임에 대한 설명이 있는 곳
CCTV News 글 사이에 잠깐 언급되어짐 (ESP : 녹화 및 검색 기능 향상을 위한 DVR전용 파일 포맷)

저 곳의 설명에 의하자면
더미 프레임 : AVI 포맷의 특성(프레임 의존적 시간 계산) 때문에 생기는 프레임이라 함[각주:1]

더미 프레임을 이해하기 쉽게 하자면 1초에 25프레임으로 영상을 만드는 중 녹화나 인코딩 하다보면 1초에 25 프레임이 안 되는 경우가 있으면 시간차가 생기게 되는데, 이 시간차를 없애기 위해 넣은 프레임이라고 보시면 됨.


초당 25 프레임 영상의 경우 재생 1초에 보여줄 프레임은 25프레임이 되겠죠(0~1초 사이에 0~24의 25프레임이 재생되니까요). 이렇게 재생 1분에 보여줄 프레임은 1500 프레임이 될 것이구요.

그런데 앞에서 이 1분 사이에 캡처되지 않았건, 저장되지 않았건 문제가 생긴 프레임이 25프레임이다.

이럴 경우 이대로 저장도어진다면
1분 위치를 재생하면 재생되어지는 프레임은 실제는 1분 1초에 캡처되어진 프레임을 보여주게 되는 겁니다(매 화면마다 시계가 있다면 1분 위치를 재생하는데 1분 1초의 영상이 보여져 시계 표시는 1분 1초로 나오겠죠) - 프레임 수 만으로 시간을 계산하기 때문에 생기는 오류

이것의 해결책이 더미 프레임이라는 말이죠. 사이 사이 모자라는 프레임을 추가해 넣는 거죠.


더미 프레임으로 검색을 하면 제가 언급한 문제들에 대한 글들이 있네요.

h.264 포맷의 문제가 아니라 x264vfw 코덱만의 문제라고 하는데, 글쎄요...

검색 결과에서 나오는 단 하나의 해결책 : VD Hack (VirtualDub Hack) 에 체크 - 제 경우 여기에 체크해도 해결 안됨






h.264 앞에 추가되어지는(?) 프레임 문제 때문에 어제(위 내용 추가하면서 갱신되었으니, 날짜를 지명하는 것이 낫겠네요. 20일) 동영상을 몇 개 생성해보았다.

B-frame 을 끈 상태로 10개 정도 생성해본 것 같다.
모두 앞에 추가되어지는 프레임이 없었다.

글을 쓸까? 말까? 하다가 그만 두었다.

이것이 해결책인지도 모른다는 생각에 오늘 이렇게 글을 쓰본다.


본론


본론으로 들어오기 전에 위에 이 글에서 말하는 답은 적어놓았는데 무슨 이제서야 본론인가???
예. B-frame을 사용하지 않으면 됩니다.

그럼 B-frame을 사용하지 않는 법은 어떻게 되느냐?
아래 갈무리 한 화면 하나면 설명은 다 되리라 봅니다.

▲ 타원형 부분의 값을 0으로 만들면 자동으로 노란 사각 부분의 옵션들이 비활성화 됨.



B-frame을 사용하지 않는 설정은 위의 스크린샷으로 이해되셨겠지만, 그래도 쓰자면

Max consecutive B-frames 값을 0으로 한다. (최대 연속 B-frame 크기 : 0)


같은 조건하에서 이렇게 B-frame을 사용하지 않으면 결과물의 용량이 커집니다.
B-frame의 원래 취지가 용량을 줄이기 위한 프레임이니 당연한 이야기겠죠.

이전 글을 보고 용량차이가 엄청나다고 오해하지는 마십시오. 이전 글에서의 결과는 하나는 화면 변화가 작았고, 하나는 화면의 변화가 많았던 것으로 사료됩니다


오늘 글을 쓰면서 만들어본 영상의 크기는 아래와 같았습니다. (큰 차이가 있기는 하죠[각주:2])

B-frame 사용 : 305 KByte
B-frame 사용하지 않음 : 367 KByte


곁다리 - 문제 있는 동영상은


이미 프레임이 추가되어진 동영상은?

제가 만들었던 동영상 중 하나만 테스트 해보았습니다.
여러 개를 불러들여보았지만 그 중에 명확하게 알 수 있는 영상이 하나 있었습니다.
화면에 녹화 진행시간이 보이는 것이었죠.

그 영상을 불러왔더니, 첫 프레임이 녹화 진행 4.53초 지난 영상이었습니다.
그 다음 프레임은 0초였구요.

아마도 h.264 코덱에서 처음 시작부분 (0초)의 화면 보다는 4.53 초 부분의 화면을 키 프레임처럼 쓰는 것이 더 효율적이라고 판단했던 듯 합니다.

인코딩 과정에 추가되어진 4.53초로 표시된 첫 프레임을 지웠습니다.

그리고

1. 인코딩 하지 않고 저장
화면이 깨집니다[각주:3]. 처음 시작 화면이 전체 정보를 가지고 있지 않아서 인 듯 (키 프레임을 지운 셈이죠[각주:4])

2. B-frame 사용하지 않고 인코딩
화면이 정상입니다.





이게 진짜 제대로 된 방법이 맞나?

심히 의심스럽지만, 해결책을 못찾는 분들이 테스트해볼 수는 있겠지.

하는 생각으로 쓰기 시작했습니다.

끝 마무리를 지으면서 제 생각은 해결책으로 여겨집니다.



맨 앞에 더미 프레임이 생긴다면

1) VD Hack (VirtualDub Hack) 에 체크해본다 : 인터넷에 있는 유일한 방법이니

2) 소프트웨어를 바꾼다 : x264vfw, 또는 Virtualdub 에서 있는 현상인 것으로 인터넷에 쓰여 있으니.
더미 프레임을 추가하지 않는 프로그램 내지는 코덱을 찾아봐야죠.

참고 : AVIDemux, 더미 프레임 추가됨


3) .... 다른 방법은 모르겠고
....

00) 어떤 방법으로도 안된다면 마지막 방법으로 어쩔 수 없이 B-frame을 사용하지 않는다




이것과 관련된 이전 글
동영상 - 키프레임에 대해서 - 화질 부분 추가
동영상 제작 코덱으로 'H.264/MPEG4-AVC' 를 사용하다가





  1. h.264 앞에 추가되어지는 프레임은 이 프레임 의존적 시간 계산 때문이 아니라, 압축 효율성 문제인 것 같습니다. [본문으로]
  2. 오디오가 포함되지 않아서 순수 비디오만의 차이입니다. 그리고 이 CQP 코딩 방식이 화면의 자그마한 차이로도 용량의 차이가 나는 방식이어서 실제 용량 차이를 가늠할 수는 없습니다. [본문으로]
  3. 상용 프로그램에서는 추가되어진 프레임만 지우고, 인코딩 없이 저장(copy)해도 문제 없는 동영상이 만들어질지도 모르지만 제가 사용하는 프로그램은 이렇습니다. 이전 글 '키 프레임 많이 넣을 것인가? 적게 넣을 것인가?' 에서 언급했죠. [본문으로]
  4. 앞에 추가되어진 프레임이기 때문에 실제 키 프레임은 아닙니다. 단지 뒤의 프레임이 참조할 프레임이라는 뜻으로 키 프레임이라고 한 것입니다. [본문으로]